最近的开发过程中碰到了几个问题,都是知道不知道的类型,记录一下,避免下次再犯。
问题1 在程序中和MySQL做交互的时候,提示这个错误,
Column count doesn’t match value count at row 1
从字面的意思,应该很直白了,一般出现在INSERT语句,指定的字段数据和数据库表的字段类型不同。
场景1 不指定具体插入的字段名称,但是实际在VALUES中的个数和表字段个数不同,
INSERT INTO table_name
VALUES (value1, value2, value3,…)
这就是为什么我们在规范中要求INSERT必须指定要插入的具体字段名称。
改为字段和VALUES字段一一对应,这个不香么?
INSERT INTO table_name (column1, column2, column3,…)
VALUES (value1, value2, value3,…)
场景2 INSERT语句指定了具体的字段名称,但是个数和VALUES不同,这就是考眼力了,
INSERT INTO table_name(col_name1, col_name2, col_name3) VALUES(‘value1′,’value2’);
我的错误就是这场景,因为调整VALUES中某个值的时候多删了一个字段。
场景3 书写错误
其实和2很相近,例如多写了个”,”。
问题2 从MySQL集群环境用mysqldump导出导入数据的时候,提示这个错误,
@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty
他的意思是,当前GTID_EXECUTED参数已经有值,而从集群导出来的dump文件中包含了SET @@GLOBAL.GTID_PURGED的操作。
解决方案1 reset master
这个操作可以将当前库的GTID_EXECUTED值置空。
解决方案2 设置-set-gtid-purged=off
在dump导出时,添加–set-gtid-purged=off参数,避免将gtid信息导出,例如,
mysqldump -uroot -p –set-gtid-purged=off test > test.sql
问题3 MySQL导出的时候,一般用什么参数?
这个咨询了老杨,这是常用的参数,
mysqldump –single-transaction –master-data=2 –all-databases -E -R –triggers –set-gtid-purged=off
–single-transaction,为了不进行全局的锁表,但同时能保证数据一致性,加这个参数。
–master-data=2,master-data会将二进制日志的位置和文件名写入到输出中,2则会将change log行注释。
-E,指的是导出event,我理解就是Oracle中的job定时任务。
-R,导出存储过程和自定义函数。
–triggers,导出触发器,默认会导出,可使用–skip-triggers不导出。
如果是单机,一般用–single-transaction,可能就够了,如果是测试数据,或无业务请求,即使用lock-all-tables都可以。
近期更新的文章:
《Linux系统中的kill -9和-15有什么区别?》
《Linux系统中的kill -0有什么作用?》
《主键和唯一约束的索引肯定唯一?》
《小白学习MySQL – 查询会锁表?》
《误操作怎么办?试试这个神器-Log Miner》
文章分类和索引:
《公众号700篇文章分类和索引》
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/423527.html