MySQL拒绝在'default NULL'列中插入'NULL'值
MySQL拒绝在MySQL拒绝在'default NULL'列中插入'NULL'值,mysql,sql,Mysql,Sql,MySQL拒绝在default NULL列中插入NULL值:(列:tid) 表结构: CREATE TABLE `ww_uid_tid_qid_aid` ( `id` int(11) NOT NULL, `qzid` int(11) NOT NULL, `uid` int(32) NOT NULL, `tid` int(11) DEFAULT NULL, `qid` int(11) NOT NULL, `aid` int(11) DEFAULT NULL, `stat
default NULL
列中插入NULL
值:(列:tid)
表结构:
CREATE TABLE `ww_uid_tid_qid_aid` (
`id` int(11) NOT NULL,
`qzid` int(11) NOT NULL,
`uid` int(32) NOT NULL,
`tid` int(11) DEFAULT NULL,
`qid` int(11) NOT NULL,
`aid` int(11) DEFAULT NULL,
`status` tinyint(1) DEFAULT NULL,
`time` decimal(11,2) NOT NULL,
`wokbits` int(11) NOT NULL,
`create_date` datetime NOT NULL,
`update_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `ww_uid_tid_qid_aid`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `qzid_2` (`qzid`,`uid`,`qid`) USING BTREE,
ADD KEY `ww_uid_tid_qid_aid.tid` (`tid`),
ADD KEY `qid` (`qid`),
ADD KEY `aid` (`aid`),
ADD KEY `uid` (`uid`),
ADD KEY `qzid` (`qzid`),
ADD KEY `qid_2` (`qid`,`aid`),
ADD KEY `status` (`status`),
ADD KEY `status_2` (`status`,`aid`),
ADD KEY `qzid_3` (`qzid`,`qid`),
ADD KEY `wokbits` (`wokbits`),
ADD KEY `tid` (`tid`,`status`);
SQL查询:
insert ignore into ww_uid_tid_qid_aid
(id,qzid,uid,tid,qid,aid,status,time,wokbits,create_date,update_date)
values
(142598981,1000110,10006849,NULL,10237838,10237840,1,3.4032369852066,44,now(),now())
错误消息:
#1048 - Column 'tid' cannot be null
还尝试了:DEFAULT
insert ignore into ww_uid_tid_qid_aid
(id,qzid,uid,tid,qid,aid,status,time,wokbits,create_date,update_date)
values
(142598981,1000110,10006849,DEFAULT,10237838,10237840,1,3.4032369852066,44,now(),now())
返回相同的错误消息
编辑:
表较大,包含587702行
外键:
ALTER TABLE `ww_uid_tid_qid_aid`
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `tag` (`id`),
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_2` FOREIGN KEY (`uid`) REFERENCES `user` (`id`),
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_3` FOREIGN KEY (`qid`) REFERENCES `question` (`id`),
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_4` FOREIGN KEY (`qzid`) REFERENCES `ww_quiz` (`id`),
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_5` FOREIGN KEY (`qid`,`aid`) REFERENCES `answer_choice` (`question_id`, `id`),
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_6` FOREIGN KEY (`status`,`aid`) REFERENCES `answer_choice` (`is_correct`, `id`),
ADD CONSTRAINT `ww_uid_tid_qid_aid_ibfk_7` FOREIGN KEY (`qzid`,`qid`) REFERENCES `ww_question` (`qzid`, `qid`);
您尚未定义tid可以为空。将“创建表”更改为:
CREATE TABLE `ww_uid_tid_qid_aid` (
`id` int(11) NOT NULL,
`qzid` int(11) NOT NULL,
`uid` int(32) NOT NULL,
`tid` int(11) NULL DEFAULT NULL,
`qid` int(11) NOT NULL,
`aid` int(11) DEFAULT NULL,
`status` tinyint(1) DEFAULT NULL,
`time` decimal(11,2) NOT NULL,
`wokbits` int(11) NOT NULL,
`create_date` datetime NOT NULL,
`update_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT IGNORE INTO ww_uid_tid_qid_aid
(id,qzid,uid,tid,qid,aid,STATUS,TIME,wokbits,create_date,update_date)
VALUES
(142598981,1000110,10006849,NULL,10237838,10237840,1,3.4032369852066,44,now(),now());
更改表格的样本
ALTER TABLE `ww_uid_tid_qid_aid`
MODIFY COLUMN `tid` INT(11) NULL DEFAULT NULL;
带有ALTER TABLE和INSERT的示例
MariaDB [yourschema]> CREATE TABLE `ww_uid_tid_qid_aid` (
-> `id` int(11) NOT NULL,
-> `qzid` int(11) NOT NULL,
-> `uid` int(32) NOT NULL,
-> `tid` int(11) DEFAULT NULL,
-> `qid` int(11) NOT NULL,
-> `aid` int(11) DEFAULT NULL,
-> `status` tinyint(1) DEFAULT NULL,
-> `time` decimal(11,2) NOT NULL,
-> `wokbits` int(11) NOT NULL,
-> `create_date` datetime NOT NULL,
-> `update_date` datetime NOT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.47 sec)
MariaDB [yourschema]>
MariaDB [yourschema]> ALTER TABLE `ww_uid_tid_qid_aid`
-> MODIFY COLUMN `tid` INT(11) NULL DEFAULT NULL;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [yourschema]>
MariaDB [yourschema]> INSERT IGNORE INTO ww_uid_tid_qid_aid
-> (id,qzid,uid,tid,qid,aid,STATUS,TIME,wokbits,create_date,update_date)
-> VALUES
-> (142598981,1000110,10006849,NULL,10237838,10237840,1,3.4032369852066,44,now(),now())
-> ;
Query OK, 1 row affected, 1 warning (0.00 sec)
MariaDB [yourschema]> SELECT * FROM ww_uid_tid_qid_aid;
+-----------+---------+----------+------+----------+----------+--------+------+---------+---------------------+---------------------+
| id | qzid | uid | tid | qid | aid | status | time | wokbits | create_date | update_date |
+-----------+---------+----------+------+----------+----------+--------+------+---------+---------------------+---------------------+
| 142598981 | 1000110 | 10006849 | NULL | 10237838 | 10237840 | 1 | 3.40 | 44 | 2016-07-03 10:40:38 | 2016-07-03 10:40:38 |
+-----------+---------+----------+------+----------+----------+--------+------+---------+---------------------+---------------------+
1 row in set (0.00 sec)
MariaDB [yourschema]>
这两种说法有所不同: 允许空值: 列将存储您尝试执行的
NULL
默认空值:
如果要存储NULL,只需不传递该列的值即可
现在只需更改您的表格:
ALTER TABLE tablename MODIFY tid int(11);
当您不传递该值时,它将为NULL。因为默认情况下所有列都可以为空。在应用“Msfvtp”解决方案后解决:
CREATE TABLE ww_uid_tid_qid_aid_tmp LIKE ww_uid_tid_qid_aid;
INSERT INTO ww_uid_tid_qid_aid_tmp SELECT * FROM ww_uid_tid_qid_aid;
RENAME TABLE ww_uid_tid_qid_aid TO ww_uid_tid_qid_aid_tmp2, ww_uid_tid_qid_aid_tmp To ww_uid_tid_qid_aid;
SQL查询:
insert ignore into ww_uid_tid_qid_aid
(id,qzid,uid,tid,qid,aid,status,time,wokbits,create_date,update_date)
values
(142598981,1000110,10006849,DEFAULT,10237838,10237840,1,3.4032369852066,44,now(),now())
工作正常,您使用的mysql版本是什么?innodb_version:5.5.41@Malinga作为旁白,请注意,您没有主键,这可能会进一步导致问题。请尝试不要在create query中设置默认值,因为它的默认值为Null。原因之一可能是数据文件已损坏。要测试它,请创建另一个类似的表,并将所有行插入该表。(可以使用“像t1一样创建t2”语法)。然后将这一行插入该表。@mwafi-我已经在我的回答中添加了它运行后的相同问题:ALTER table
ww\u uid\u tid\u qid\u aid
MODIFY COLUMNtid
INT(11)NULL默认值NULL@我不明白。我已经添加了allIt的大表的一个例子,这可能是一个问题:行#587702?那么Bernd,你能复制OP描述的行为吗?Glade我可以帮助:)