Mysql技术内幕知识点摘录

来源:互联网 发布:易建联发展联盟数据 编辑:程序博客网 时间:2024/04/30 09:29

1:TIMESTAMPDIFF()

2:MONTH,DAY,YEAR

3:ORDER BY RAND() 随机选行

4:ORDER BY IF(ISNULL(字段), 0, 1), 字段[ASC|DESC] 对NULL的排序处理

5:DATE_ADD(CURDATE(), INTERVAL 6 MONTH)

6:


 注意 <=> 运算符和 = 号的不一样

 7:设置数据库自动提交,set autocommit=(0|1),当以事务的方式执行数据库操作时,相当于临时挂起默认的提交方式,该为手动提交,所以事务执行完后需要commit,如果忘记commit就可能会导致其他的数据库操作阻塞掉,因为当2个对数据库的更新或者删除操作同时进行时,数据库会对所操作的行上锁来控制并发,如果事物1更新某一行后迟迟不提交,事物2对同一行的更新操作就无法继续进行。

8:设置事务的隔离级别:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} 
注意:默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果你使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做这个。使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。 查询级别:
SELECT @@global.tx_isolation; 
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;
9:数据库中两个不同的连接对同一行数据进行修改操作时(update, delete),会加行锁,一个连接读,一个连接写时,需要根据事务隔离级别来判断执行结果。
数据库隔离级别为repeatable read时会对表里的行加锁,也就是一个事务在读取某些行时另一个事务不能去修改这些行里的字段,所以可以解决不可重复读的问题但是不能解决幻读的问题。
数据库隔离级别为sysn时,会对整个表加锁,也就是说一个事务在对表进行操作时,另一个事务不能对该表进行任务操作。所以牺牲性能带来了解决不可重复读和幻读的问题。
10:索引的缺点,占用空间,如何判断是否需要建立索引:尽量为作为查询条件的列建立索引,考虑一个列的维度数,维度数越高的列索引效果越好,应该对尽量短小的值建立索引(好处:加快比较操作,减小索引体积进而减少IO,提高内存缓存索引块包含键值的数量),

0 0
原创粉丝点击