1. mysql不支持事务嵌套,如果要实现事务嵌套则要采用其它策略来实现,而laravel中直接粗暴的不执行嵌套的事务,在PHP中事务嵌套会报错。
2. mysql 查询是不区分大小写的,如要区分大小写则要使用关键字BINARY,效果如下
3. 使用like查询,如果未加通配符,则查询结果一样,但表现不一样,使用age like 50这种写法是不走索引的,效果如下所示
6. 使用like查询,查询属性中有%标识,可以不转义,效果如下所示
7. select 的union是去除重复记录的,而union all是不去重复的,效果如下
8. 当字段数目不一致的时候是不允许使用union的
9. 使用union的时候,会按照字段的顺序进行汇总,哪怕字段的名称不一致,如果字段名称不一致则以第一个表的字段为准
10. groupby语句可以不加汇总函数如sum,count等,如果不加会对记录进行去重复,效果如下
11. 我们可以使用一个名字来替代null,效果如下
13. with rollup可以统计总数,效果如下所示,显示总数的字段为null
14. mysql中join是inner join的别名,join有inner join, left join, right join 但无full join
15. IS NULL 和 IS NOT NULL ,是特定的写法,如果写成 XXX = NULL 是无效的
16. mysql 对正则的支持是不全面的,支持以下的正则,也支持分组,别的如方向引用等没有测试
并且mysql不支持转义但支持分组
mysql支持分组
17. 不要滥用MYSQL的索引,因为过多的索引会占据内存,切在修改操作时候会维护索引,会减慢更新的速度。
如果某个字段不允许重复,除了代码层面要做逻辑判断,还要建立唯一索引。其语法如下所示
CREATE INDEX indexName ON mytable(username(length));
ALTER table tableName ADD INDEX indexName(columnName)
DROP INDEX [indexName] ON mytable;
SHOW INDEX FROM table_name;
18. 临时表
删除临时表:
DROP TABLE SalesSummary;
临时表只用命令show tables是看不到的。
19. 可以使用inser select来复制表,先建立一张空表和要复制的表完全相同的字段和类型,然后查询插入
20. 数据表的id一般是以step+1的方式自增,但如果做了主从复制,则主表的id未1,3, 5则step + 2;
21. 可以使用sql查看MYSQL服务器的元信息,效果如下
22. 一般数据表都有一个id自增的序列,我们也可以设置,重设序列(最好不要做很危险),在创建的时候设置序列的初始值
23. delete from XXX;和trunate table XXX;的效果是不一样的,trunate操作在删除所有记录后,还会重置序列(自增id)从1开始。
24. 删除重复数据的一种实现方法是先将数据去重复放到临时表,然后删除查询的表,最后将临时表重命名为当前表名
25. 可以使用SELECT ... INTO OUTFILE做数据表备份;使用dump语句做数据库备份
mysqldump -u root -p RUNOOB runoob_tbl > dump.txt
导入备份
mysql -u root -p database_name < dump.txt
26. mysqldump是linux命令, 在mysql中无法使用,其语法格式如下所示
具体参考文章:https://www.cnblogs.com/jpfss/p/7867668.html
27. 常见日期处理函数DATE_FORMAT(d,f)
28. MYSQL 预算符优先级,如下所示
和一般的语言一样,一元运算符>算数运算符>关系运算符>逻辑运算符>复制运算符