最近碰到的几个问题

Posted bisal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最近碰到的几个问题相关的知识,希望对你有一定的参考价值。

最近的开发过程中碰到了几个问题,都是知道不知道的类型,记录一下,避免下次再犯。

问题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篇文章分类和索引

以上是关于最近碰到的几个问题的主要内容,如果未能解决你的问题,请参考以下文章

最近在项目中碰到把对象数组转为键值对,

vscode 自定义导包失败问题

最近碰到的一些 SSL 问题记录

最近碰到的问题

如何正确地将多个片段添加到片段过渡?

最近碰到的几个问题