MySQL拒绝在'default NULL'列中插入'NULL'值

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

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,
  `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 COLUMN
tid
INT(11)NULL默认值NULL@我不明白。我已经添加了allIt的大表的一个例子,这可能是一个问题:行#587702?那么Bernd,你能复制OP描述的行为吗?Glade我可以帮助:)