我有一个类似的查询
INSERT INTO support_users VALUES("1",,"2","1","4",,,"2017-05-06 20:24:36");
但是新的MySQL没有插入给定的错误错误代码:1064
但我将其更改为
INSERT INTO support_users VALUES("1","","2","1","4",,,"2017-05-06 20:24:36"
);
工作
但是以前的MySQL没有这样的问题。如何解决。无需更改查询
表定义
CREATE TABLE support_users (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`client` int(11) DEFAULT NULL,
`user` int(11) DEFAULT NULL,
`ticket` int(11) DEFAULT NULL,
`scope` int(11) DEFAULT NULL,
`notify` tinyint(1) DEFAULT NULL,
`email` tinyint(1) DEFAULT NULL,
`added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
答案 0 :(得分:3)
首先,尊重数据类型。如果其整数不使用引号。
解决问题的正确方法是使用NULL。因此,这适用于任何版本的MySQL。
INSERT INTO support_users VALUES(1,NULL,2,1,4,NULL,NULL,'2017-05-06 20:24:36');
答案 1 :(得分:1)
整数列值不应该被引用。
所以“ 1”变成1
不应自动将自动增量值赋予SQL-让它自己计算出来。
使用NULL
关键字插入NULL
。
您的日期时间列在其定义中进行了设置,以显示插入时该行的当前日期时间。因此,在插入(而不是更新等)时,不需要包括此数据。
出于理智的考虑,也很容易列出要使用INSERT指令添加到哪些列。
直接与MySQL一起使用时,在字符串数据的不双引号('
周围使用单引号"
。
INSERT INTO support_users( `id`, `ticket`, `scope` , `notify`)
VALUES (1, 2,1,4);
如果您尝试插入两次,这将导致错误,因为您将主键(id
)强制为1。为避免这种情况,请跳过“自动增量(id
)”列的值。
或为清晰起见仅;完整的SQL:
INSERT INTO support_users VALUES (1, NULL, 2, 1, 4, NULL, NULL, '2017-05-06 20:24:36');
跳过自动增量(id
)列值(如上所述):
INSERT INTO support_users VALUES (NULL, NULL, 2, 1, 4, NULL, NULL, '2017-05-06 20:24:36');