【发布时间】:2016-04-20 20:59:43
【问题描述】:
我有一个 MySQL 数据库,其表定义如下:
CREATE TABLE IF NOT EXISTS chug_dedup_instances(
left_chug_name varchar(50) NOT NULL,
FOREIGN KEY fk_left_chug_name(left_chug_name) REFERENCES chugim(name)
ON DELETE CASCADE
ON UPDATE CASCADE,
right_chug_name varchar(50) NOT NULL,
FOREIGN KEY fk_right_chug_name(right_chug_name) REFERENCES chugim(name)
ON DELETE CASCADE
ON UPDATE CASCADE,
chug_dedup_instance_id int NOT NULL AUTO_INCREMENT PRIMARY KEY)
COLLATE utf8_unicode_ci
ENGINE = INNODB;
我试着像这样插入到这个表中:
INSERT INTO chug_dedup_instances VALUES ("Swimming", "Swimming");
这会返回一个错误:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
如果我删除 chug_dedup_instance_id 主键,则插入工作正常。如果我明确给出 ID 值,它也可以工作:
mysql> INSERT INTO chug_dedup_instances VALUES ("Swimming", "Swimming", 0);
Query OK, 1 row affected (0.00 sec)
这对我来说似乎是错误的:数据库不应该提供键值吗?我不认为这是PHP, MySQL error: Column count doesn't match value count at row 1 的重复,因为我在问为什么没有自动添加自动增量字段,因为我相信它应该是。
我尝试删除主键,而是在两个主要值上使用唯一键:
UNIQUE KEY uk_chug_dedup_instances(left_chug_name, right_chug_name))
我发现当我这样做时,我无法从两个外键引用的源表 (chugim) 中删除 - 数据库报告约束已损坏:
Cannot add or update a child row: a foreign key constraint fails (`camprama_chugbot_db`.`chug_dedup_instances`, CONSTRAINT `chug_dedup_instances_ibfk_2` FOREIGN KEY (`right_chug_name`) REFERENCES `chugim` (`name`) ON DELETE CASCADE ON UPDATE CASCADE)
我希望子表字段会更新,因为该表具有“ON UPDATE CASCADE”。
我复制了下面的源表(“chugim”)定义。任何有关这些问题的帮助将不胜感激!
CREATE TABLE IF NOT EXISTS chugim(
name varchar(50) NOT NULL,
group_id int,
FOREIGN KEY fk_group(group_id) REFERENCES groups(group_id)
ON DELETE SET NULL
ON UPDATE CASCADE,
max_size int NULL,
min_size int NULL DEFAULT 0,
description varchar(2048),
UNIQUE KEY uk_chugim(name, group_id),
chug_id int NOT NULL AUTO_INCREMENT PRIMARY KEY)
COLLATE utf8_unicode_ci
ENGINE = INNODB;
【问题讨论】:
-
“列数与值数不匹配”非常简单。您需要为每一列提供一个值。如果是自增列,可以使用
NULL作为值。 -
我在问为什么自动增量列没有自动更新。您不需要提供值或使用 NULL,但事实证明您确实需要列出每个列名。这有效: INSERT INTO chug_dedup_instances (left_chug_name, right_chug_name) VALUES ("Swimming", "Swimming");查询正常,1 行受影响(0.02 秒)
标签: mysql