Mysql 5.6不希望将列设置为NULL

时间:2013-05-06 22:26:35

标签: php mysql sql mysql-5.5

我大约98%确定此查询已在mysql 5.1上正常运行。我们已经将我们的一台机器升级到mysql 5.6并且我正在运行更新,并且使用此查询时出现数据库错误:

 UPDATE diagnostic 
    LEFT JOIN contact ON diagnosticdata_suppliercontact = contact_id
    SET diagnosticdata_suppliercontact = NULL
    WHERE (!contactdata_issupplier) OR (contact.contact_id IS NULL);

但是表模式允许它为NULL。有谁知道mysql 5.6中发生的任何可能导致我们悲伤的问题或变化?

以下是对表格的描述:

mysql> describe diagnostic;
+--------------------------------+-------------+------+-----+---------+----------------+
| Field                          | Type        | Null | Key | Default | Extra          |
+--------------------------------+-------------+------+-----+---------+----------------+
| diagnostic_id                  | int(11)     | NO   | PRI | NULL    | auto_increment |
| diagnostic_time                | int(15)     | NO   |     | NULL    |                |
| diagnostic_user                | int(15)     | NO   |     | NULL    |                |
| diagnosticdata_time            | int(15)     | NO   |     | NULL    |                |
| diagnosticdata_user            | int(15)     | NO   |     | NULL    |                |
| diagnosticdata_name            | varchar(50) | NO   |     | NULL    |                |
| diagnosticdata_suppliercontact | int(11)     | YES  | MUL | NULL    |                |
+--------------------------------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

ERROR 1048 (23000): Column 'diagnosticdata_suppliercontact' cannot be null

创建声明就在这里有触发器:

delimiter $$

CREATE TABLE `diagnostic` (
  `diagnostic_id` int(11) NOT NULL AUTO_INCREMENT,
  `diagnostic_time` int(15) NOT NULL,
  `diagnostic_user` int(15) NOT NULL,
  `diagnosticdata_time` int(15) NOT NULL,
  `diagnosticdata_user` int(15) NOT NULL,
  `diagnosticdata_name` varchar(50) NOT NULL,
  `diagnosticdata_suppliercontact` int(11) DEFAULT NULL,
  PRIMARY KEY (`diagnostic_id`),
  KEY `diagnostic_suppliercontact` (`diagnosticdata_suppliercontact`) USING BTREE,
  CONSTRAINT `fk_diagnosticdata_suppliercontact_contact` FOREIGN KEY (`diagnosticdata_suppliercontact`) REFERENCES `contact` (`contact_id`)
) ENGINE=InnoDB AUTO_INCREMENT=188 DEFAULT CHARSET=utf8$$

CREATE
DEFINER=`dotuser`@`localhost`
TRIGGER `ezymerged`.`diagnostic_insert`
AFTER INSERT ON `ezymerged`.`diagnostic`
FOR EACH ROW
BEGIN
    REPLACE INTO  ezymerged_history.diagnostic 
     SELECT diagnostic.* FROM ezymerged.diagnostic 
      WHERE diagnostic_id=NEW.diagnostic_id;                    
END
$$

CREATE
DEFINER=`dotuser`@`localhost`
TRIGGER `ezymerged`.`diagnostic_update`
AFTER UPDATE ON `ezymerged`.`diagnostic`
FOR EACH ROW
BEGIN
    REPLACE INTO  ezymerged_history.diagnostic 
     SELECT diagnostic.* FROM ezymerged.diagnostic 
      WHERE diagnostic_id=NEW.diagnostic_id;                    
END
$$

1 个答案:

答案 0 :(得分:0)

虽然diagnosticdata_suppliercontact允许NULL约束:

CONSTRAINT `fk_diagnosticdata_suppliercontact_contact`
FOREIGN KEY (`diagnosticdata_suppliercontact`)
REFERENCES `contact` (`contact_id`)

将优先,并要求diagnosticdata_suppliercontact中的值在contact_id表的contact字段中具有匹配值。