MySQL导数据笔记
2019-12-16 9:08:43 星期一
MySQL 5.6 limit / order 有bug,
如果主键不是自增的, 只能全表导出导入, 分批导出再导入的话会报主键重复
触发器:
批量导入数据时, 要关闭触发器 (5.6版本不会为每条数据执行一次触发器, 而是很多条记录执行一次触发器)
SELECT * FROM information_schema.`TRIGGERS`;
show create trigger 触发器名;
drop trigger 触发器名;
外键 (导数据表时会检测外键依赖):
禁用外键约束.: SET FOREIGN_KEY_CHECKS=0;
启动外键约束: SET FOREIGN_KEY_CHECKS=1;
数据包限制(导数据时, MySQL限制插入和导出的数据量, 如果设置的太小就会报 mysql has gone away):
show global variables like 'max_allowed_packet';
set global max_allowed_packet = 2* 1024 * 1024 * 1024
如果设置不成功, 而且数据量不是特别大的话, 可以一次性把数据都读出来, 然后用类似PHP的array_splice()方法分批查入到新的表中
修改表结构:
在数据量大的表中修改表结构, 不要加 after cloumnxxx;
insert 返回值:
当表的主键字段不是自增的时候,添加一条数据返回的最后插入字段的id的值就是0,但并不表示其插入错误或没有插入成功
字符集
alter table xxxdefault charset=utf8;
alter database xxx character set utf8 COLLATE utf8_general_ci;
show variables like '%char%';