目录
1、关于UUID自增列设置
(1)MySQL5.7
MySQL 5.7 支持自增 UUID,但是不支持直接设置一个列为自增 UUID。自增 UUID 通常是用来生成唯一标识符,比如主键。MySQL 5.7 引入了一个新的数据类型 UUID
,可以生成一个随机的 UUID,但是不会自增。
如果你想要实现自增 UUID,你可以使用以下方法:
创建一个自定义函数来生成自增的 UUID。
使用一个额外的表来存储当前的计数器值。
(2)MySQL 8.0
MySQL 8.0 支持自增 UUID,你可以使用 UUID_TO_BIN()
和 BIN_TO_UUID()
函数来转换 UUID
CREATE TABLE test( id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())), name VARCHAR(50) NOT NULL, age INT NOT NULL );
2、关于列中的关键字
有些保留字字作为表得列,在8.0中(5.7中好像没问题),会报错:
(1)案例:
select system from operation_workorder;
(2)报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'system from operation_workorder' at line 1
(3)原因
在使用MySQL时,有时不小心会将MySQL的关键字设置为表的字段,在进行数据插入的时候总是提示SQL有问题。
(4)解决
如果将MySQL中的关键字与保留字设置为表字段时,解决方法为给关键字加上反引号 " `" 。
注意是 反引号 **反引号 ** 反引号 输入法切换到英文状态下,键盘上Esc键下面,数字键1左边,Tab键上面那个键。
3、关于hash join(8.0.18及之上)
(1)hash join的替代
在MySQL 8.0.18之前,表的join方式只有嵌套循环(nested loop)这一种方式;8.0.18推出了hash join的方式以替代嵌套循环。
(2)hash join的原理概括为:
选择占用空间较小的表t1(不一定是行数)作为驱动表,计算其join字段的hash值,在内存中build一个hash table,将t1的join字段的hash值存放至hash table。
然后对被驱动表t2的join字段计算hash值,并与内存中的hash table进行查找匹配。
(3)使用hash join生效的前提
使hash join方式生效的前提是用于join的字段上没有索引
在8.0.18及8.0.19中,还需要一个对等的条件(table1.a=table2.a),才能满足hash join。
在8.0.20中,取消了对等条件的约束,可以全面支持non-equi-join,Semijoin,Antijoin,Left outer join/Right outer join。
4、关于read_only参数(super_read_only)
(1)MySQL5.7
read_0nly在复制数据库上,除了超级管理员,都只能读,不能写
(2)MySQL8.0
8.0及以上,新增了一个super_read_only
read_0nly在复制数据库上,除了超级管理员,都只能读,不能写
super_read_only在复制数据库上,任何权限的用户,都只能读,不能写,充分保证了复制数据与主数据库的数据一致性。