在我们的mysql里也是如此,也就是我们的ACID原则。...A原子性,把一系列的动作视为一个最小的操作(原子操作)C一致性,从一个状态到另一个状态是一致的,I隔离性:事务与事务之间是不可见相互隔离的,D持久性:一旦事务提交,则所做修改就会被永久保存到数据库中。...12.谈谈三大范式,什么时候使用反范式设计 答:第一范式(1NF):确保每列保持原子性即列不可分 第二范式(2NF):属性完全依赖于主键,也就是说在一个数据库表中,一个表中只能保存一种数据,...总结一下: 只要我们熟知,我们mysql的底层是B+tree的,B+tree是什么样子的,很多面试题都是围绕这个东西来出题的,为什么不为空,空不好找B+tree的位置啊等等。...总之不管他怎么问我们,我们真的理解了其中的原理,就算是题再怎么变化,也脱离不了底层原理的,我们要学会加法,而不是要学会1+1。 最进弄了一个公众号,小菜技术,欢迎大家的加入
在我们的mysql里也是如此,也就是我们的ACID原则。...12.谈谈三大范式,什么时候使用反范式设计 答: 第一范式(1NF):确保每列保持原子性即列不可分 第二范式(2NF):属性完全依赖于主键,也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中...这个操作其实就是一个反范式的。 13.说几个mysql中你常用的函数 答:sum、count 、avg、min、max ?...总结一下: 只要我们熟知,我们mysql的底层是B+tree的,B+tree是什么样子的,很多面试题都是围绕这个东西来出题的,为什么不为空,空不好找B+tree的位置啊等等。...总之不管他怎么问我们,我们真的理解了其中的原理,就算是题再怎么变化,也脱离不了底层原理的,我们要学会加法,而不是要学会1+1。
为什么这条SQL语句的执行结果显示还可以走id这个主键索引呢? 要想搞懂这个,就首先要明白为什么我们之前背的八股会说发生隐式类型转换会导致索引失效。...例如,如果一个字段是VARCHAR类型,索引中存储的就是字符串。当执行查询时,数据库系统会使用索引来快速定位到符合条件的行。...但是谁告诉你被转换的就一定是id这个索引列呢?你怎么知道不是输入的参数‘1’被转为数字1了? 所以又有一个新的问题:MySQL究竟是把字符串转为数字,还是把数字转为字符串?...我们用一个很简单的SQL语句就可以得出结论: select 1+'1'; 如果MySQL的默认转换规则是将字符串转为数字,那么这条语句的执行结果应该是1+1=2。...回顾我们之前分析的内容,这条SQL语句就可以被看作: select * from users where (字符串强制转为数字) id = 1; 这也符合我们之前说的:“在索引列上发生隐式类型转换会导致索引失效
row in set (0.00 sec) (2)使用非唯一性索引联表查询(由于customer_id在a表中不是主键,是普通索引(非唯一),所以是ref) mysql> explain select...14 Extra: 2 rows in set (0.00 sec) type = eq_ref,相对于ref来说就是使用的是唯一索引,对于每个索引键值,只有唯一的一条匹配记录(在联表查询中使用...primary key或者unique key作为关联条件) (在film和film_text中film_id都是主键,即都是唯一索引) mysql> explain select * from film...Extra: Using where 2 rows in set (0.00 sec) type = const/system,单表中最多只有一条匹配行,查询起来非常迅速,所以这个匹配行中的其他列中的值可以被优化器在当前查询中当做常量来处理...row in set (0.00 sec) mysql> select 1+1 from dual; +—–+ | 1+1 | +—–+ | 2 | +—–+ 1 row in set (0.05
//在mysql中如何写注释语句 mysql> SELECT 1+1; # 这个注释直到该行结束 mysql> SELECT 1+1; -- 这个注释直到该行结束 mysql> SELECT...2)获得MySQL的元信息 正如上一节讲到,可以通过联合查询来或者数据库的元信息。...-+-------+----------+ 6 rows in set (0.00 sec) 首先找到一个存在SQL注入的网页,然后利用上面这个联合查询来猜测数据库中可能存在哪些表,表中可能存在哪些字段...select 1,load_file('/etc/passwd'),3, 4, 5, 6 通过这个语句,可以读取Linix目录中/etc/passwd文件。...更多MySQL函数可以查询MySQL的官方网站。 5)长度折断 下面这条语句往user表中插入了一个系统管理员admin的账户,是通过正常手段生成的。
首先,让计算机做简单的数值运算是必需的: - 符合 # ,后面的内容都被视为注释,就是一些备注,不会被当作为代码 - 上图的代码即表示其上方注释表达的中文意思 - 在 cell 交互模式中,最后的值会被自动输出...,比如第一个 cell 的1+1结果2,就会被显示出来(上图右方第一个区域) 有人问:运算就只有这些吗?..."先求出1+1的结果,然后用这结果乘以2"。...,因为 Python 没法知道你要的是变量的值,因此使用花括号 "{}" 包围变量,即表示文本中嵌入变量的值 > "{}" 中并不是只能嵌入变量,可以是任意的合法表达式,比如 f'结果是{1+1}'...,因此上述的需求可以这么写: - 最外层使用双引号,里面则可以直接使用单引号 > 注意看代码的着色,第一个例子的 "张三" 是白色的,而这个例子整个内容都是红色,证明整个被视为一个字符串 总结
我们在写代码的时候非常忌讳出现n+1次查询,这就意味的你的循环有多少次,就会查询多少次数据库,这是很恐怖的场景。...因为每次服务调用mysql查询的时候,都是一件很耗费性能的操作,下面我们举个例子,来说说n+1的触发场景及解决方案。...n+1改为1+1模式 我们可以将n次查询的条件添加到一个集合中,然后通过in语句一次性查询出我们需要的数据,这样就可以避免n+1次查询的出现,可以大大提高我们的执行效率,代码如下所示: /** * 订单...童鞋们有空的话可以思考如下问题: n+1模式修改为1+1模式需要注意哪些问题? mysql中in语句长度是否有限制(或者说sql长度是否有限制,如果有那是多少)?...n+1中如果n的数值非常大,要如何优化(因为直接查询组装成in,查询效率也会很差)?
小王内心 OS:为什么1+1=2?...小王回过神来以后复盘这次面试过程,觉得自己在 MySQL 分库分表问题上没有回答得特别到位,于是他开始进一步地深究起来这个“1+1=2”的问题。...这个数据文件被划分成很多的数据页,每个数据页大小是16K。...这个过程中查询了三个数据页,如果这三个数据页都没有加载到内存,那么就需要经历三次磁盘 IO 查询。 了解完 B+树是如何存储数据的,我们就可以开始进行数据的估算。...当然这个数据是根据每条行记录的大小为 1K 的时候估算而来的,而实际情况中可能并不是这个值,所以这个建议值两千万只是一个建议,而非一个标准。
为了在本地服务器下搭建svn,在CentOS中安装mysql,使用yum install mysql-server mysql mysql-devel安装mysql却无法启动mysql服务 使用service...MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。 在2008年1月16号 MySQL被Sun公司收购。...过去一年中,大型互联网用户以及Linux发行商纷纷抛弃MySQL,转投MariaDB阵营。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。...-MariaDB虽然被视为MySQL数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。而且从MySQL迁移到MariaDB也是非常简单的。...讲到这里,大家也应该明白为什么使用yum install mysql-server mysql mysql-devel安装mysql数据库会报这个错误了吧。
MSSQL手工注入 与MySQL注入不同的是,MySQL利用的爆出显示的字段,MSSQL利用的报错注入,插入恶意的sql语句,让查询报错,在报出的错误中,显示我们想要的信息。...id=12+1) 不行,因为加号在url里面是空格的意思。 2.你知道mysql里有几种注释方式吗? 三种:①.# 这个注释直到该行结束;②./注释多行/;③.–+ 这个注释直到该行结束。...40119 + 1*/ 该查询结果: 返回2(MySQL版本为4.01.19或者更高) 返回1(其他情况) 10.如果注入语句中的‘=’被过滤?...MSSQL:在MSSQL中,“+”运算符被用于字符串连接和加法运算,‘1’+‘1’=‘11’,1+1=2; MySQL:在MySQL中,“+”运算符只被用于加法运算,‘1’+‘1’=‘2’,1+1=2;...Oracle:在Oracle中,“+”运算符只被用于加法运算,‘1’+‘1’=‘2’,1+1=2。
一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。...一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。...●用户 用户是在实例下建立的。不同实例中可以建相同名字的用户。 注: 表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。...] [having 过滤] [order by 排序] 如: select * from emp; select 1+1; --在Oracle等于报错 ,在MYSQL中输出结果是2 dual...: oracle中的虚表 ,伪表, 主要是用来补齐语法结构 select 1+1 from dual; select * from dual; select 1 from emp; --直接写一个常量比写
FROM 列的别名 去除重复行 空值参与运算 着重号 查询常数(查询同时添加常数字段) 显示表结构 过滤数据 练习题 基本的SELECT语句 SELECT… SELECT 1+1, 2+2;# 直接这样写相当于下面这句...而且,在 MySQL 里面,空值是占用空间的。 着重号 我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来。...1 # 正确 mysql> SELECT * FROM `ORDER`; 查询常数(查询同时添加常数字段) SELECT 查询还可以对常数进行查询。...对的,就是在 SELECT 查询结果中增加一列固定的常数列。这列的取值是我们指定的,而不是从数据表中动态取出的。...比如说,我们想对 employees 数据表中的员工姓名进行查询,同时增加一列字段corporation ,这个字段固定值为 “timerring”,可以这样写: SELECT 'timering' as
row affected: 表中没有冲突数据,数据被插入 2 row affected: 表中有冲突数据,并且数据已经被更新 替换 主键 或者 唯一键 没有冲突,则直接插入; 键 或者 唯一键 如果冲突...,则删除后再插入 1 row affected: 表中没有冲突数据,数据被插入 2 row affected: 表中有冲突数据,删除后重新插入 Retrieve 基本查询 语法: SELECT [DISTINCT...SELECT id,name,math FROM exam_result; 查询字段为表达式 表达式不包含字段 SELECT name,math,1+1 FROM exam_result; SELECT...ORDER BY column [ASC|DESC], [...]; 注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序 NULL 视为比任何值都小 同学及数学成绩,按数学成绩升序显示...LIMIT n OFFSET s; 注意:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死 按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3
为什么可以作为MySQL的缓存: Redis访问速度比MySQL快很多,并且处理一个访问请求,Redis消耗的资源比MySQL少很多,因此Redis支持更大的并发量: 1.Redis数据在内存,并且访问速度比硬盘快很多...如果已经在 Redis 中存在了, 就直接返回. 此时不必访问 MySQL 了. 如果在 Redis 中不存在, 再查询 MySQL....Random 随机淘汰 从所有的 key 中抽取幸运⼉被随机淘汰掉. 在Redis中已经实现好了以上类似机制: 整体来说 Redis 提供的策略和我们上述介绍的通用策略是基本⼀致的....) 在查询某个key的时候,在Redis中没有,在MySQL中也没有,那么这么key肯定不会更新到Redis中~ 但是这个查询没有,接连着查询了多次,依然会给MySQL造成一些压力; 为什么出现这种情况...如果发现操作成功,那么就可以视为当前没有节点对001车次加锁,那么就可以进行数据库的读写,操作完成之后,就可以吧这个key删除(相当于解锁) 如果服务器1在操作数据库时候,服务器2也想买票
前两种方法是在子shell中执行;第三种方法是在当前shell中执行 Shell变量 Linux系统下常见的四种变量 1.自定义变量 自定义变量是由系统用户自己定义的变量吗,只在用户自己的Shell环境中有效...,单引号中的特殊符号都将视为普通字符,比如: [root@linux /]# c='Hello $b' [root@linux /]# echo $c Hello $b 3>反撇号( ):主要用于命令替换...是左上角~键,不是单引号 或者使用$,后面括号内是执行的命令: echo "current path is $(pwd)" 另外,前面两种方式对于计算表达式也是行不通的,而要采取下面的方式: echo "1+...1=$((1+1))" #打印:1+1=2 即$后面用两重括号将要计算的表达式包裹起来。...那如果要执行的命令存储在变量中呢?前面的方法都不可行了,当然括号内的内容被当成命令执行还是成立的。
误区1:将 Elasticsearch 视为关系数据库 Elasticsearch 常被误解为 MySQL 或者 PostgreSQL 等关系数据库的直接替代品,用户除了直接替代使用外更看其全文搜索和快速聚合的能力...在关系数据库中,我们可以使用复杂的 SQL 查询、事务和多表关联操作来保证数据的一致性和完整性。...不论 Nested 查询、Join 查询,都试图在订单文档中查找特定客户购买的特定产品,这类似于 SQL 中的 JOIN 操作。...结合产生“火花”,形成“1+1>2”的组合效果。 根据数据特点和查询需求,合理设计和优化 Elasticsearch 索引、合理规范的数据建模,避免不必要的字段和过多的嵌套结构。...结合使用关系数据库和 Elasticsearch(记住:1+1>2),可以实现更高效的数据管理和分析。
一、高性能索引 1、查询性能问题 在MySQL使用的过程中,所谓的性能问题,在大部分的场景下都是指查询的性能,导致查询缓慢的根本原因是数据量的不断变大,解决查询性能的最常见手段是:针对查询的业务场景,设计合理的索引结构...时间点:就是订单生成的时间,年月日时分秒; 标识位:即一个唯一的UID,保证订全单号唯一; 埋点一:在很多业务中,在订单号记录产品类目; 埋点二:通常会标识产品属性,例如颜色,口味等; 错位符:防止订单号被分析...1、单列查询 这里直接查询主键索引,MySQL的主键一般选择自增,所以速度非常快。...* FROM ds_order WHERE id+1=1; 这里,id=2,id=1+1,MySQL都可以自动解析,但是id+1是在索引列上执行运算,直接导致主键索引失效。...; 索引通过减少扫描表的行数提高查询的效率; 2、索引的缺点 创建索引和维护索引,会耗费空间和实际; 查询以外的操作增删改等,都需要动态维护索引; 3、索引使用总结 索引机制在MySQL中真的非常复杂,
慢查询指的是数据库中执行时间超过指定阈值的 SQL 语句。不同业务场景下,这个阈值通常各不相同。在我们公司内部,这个阈值被设定为 1 秒钟。...也就是说,任何执行时间超过 1 秒的 SQL 语句都会被视为慢查询。 对慢查询进行问题排查通常分为以下几个步骤: 发现问题 一般而言,慢查询问题相对容易发现。...例如,在 Linux 系统上,可以使用以下命令来查看慢查询日志文件: sudo vi /var/log/mysql/mysql-slow.log 请将路径 /var/log/mysql/mysql-slow.log...配置完毕后,MySQL 会将执行时间超过 long_query_time 设置的时间阈值的 SQL 语句记录到慢查询日志中。...我们可以定位到具体的慢 SQL 语句,然后可以进一步分析为什么这个 SQL 语句执行缓慢,主要是排查以下几个可能的原因: 缺少索引:没有为查询涉及的列创建适当的索引,导致数据库需要全表扫描来找到匹配的行
问题复现 在进行问题复现的过程中,我们发现当尝试在搜索框中输入“A+A”并执行搜索时,结果页面中没有A+A。 原因分析 用户搜索时期望的效果与mysql like %搜索关键字%相同。...由于品牌的数量有限且数据量不大,在实际实现时,也是这样做的。 是不是“A+A”这个品牌不存在? 不是。 在品牌列表中是有的: 其他的都正常,"A+A"为什么没搜到? 也不知道。...那么,问题搞清楚了: 根本原因在于,在URL中,加号(+)被视为一个特殊字符,通常用于表示空格。 因此,Web服务器将URL上的“A+A”理解为“A A”。...复盘 回顾整个问题的发生,我们意识到在设计API时,没有充分考虑到特殊字符的处理。尽管加号在URL中有特定的含义,但在我们的应用场景中,它应该被视为普通字符进行处理。...这一疏忽导致了用户在搜索包含加号的内容时遇到了困难。 解决方案 方案1、使用body来传递查询参数 这个方案的优缺点: 缺点:前后端都需要进行改动。都要重新开发、测试、发布。 优点:彻底。
领取专属 10元无门槛券
手把手带您无忧上云