【发布时间】:2015-10-18 05:48:46
【问题描述】:
假设我有这 3 张桌子。
CREATE TABLE IF NOT EXISTS GROUP (
ID_GROUP INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
GROUP VARCHAR(50) NOT NULL,
INDEX(GROUP)
) ENGINE=INNODB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;)
CREATE TABLE IF NOT EXISTS USERZ (
ID CHAR(8) NOT NULL,
GROUP VARCHAR(50) NOT NULL,
FIRST_NAME VARCHAR(100) NULL DEFAULT NULL ,
LAST_NAME VARCHAR(100) NULL DEFAULT NULL,
DATE_CREATED TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PASSWORD VARCHAR(8) NULL DEFAULT 'HELLOWORLD',
PRIMARY KEY (ID),
INDEX (ID),
INDEX (GROUP),
FOREIGN KEY (GROUP) REFERENCES GROUP (GROUP)
) ENGINE=INNODB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;)
CREATE TABLE IF NOT EXISTS WORKERS (
ID CHAR(8) NOT NULL PRIMARY KEY,
DATE_START TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
DATE_END TIMESTAMP NULL,
FOREIGN KEY (ID) REFERENCES USERZ (ID)
) ENGINE=INNODB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;)
我在表 USERZ 中插入数据没有问题。但是在向表 WORKERS 添加记录时,我收到错误消息:
mysql.connector.errors.IntegrityError: 1452 (23000): 无法添加或更新子行:外键约束失败 (DATABASENAME.WORKERS, CONSTRAINT WORKERS_ibfk_1 FOREIGN KEY (ID) 参考USERZ (ID))
我确定这是 WORKERS 主键 (ID) 指的是 USERZ (ID)。即使我知道 USERZ id 存在于 USERZ 中,它也不会让我向 WORKERS 添加数据。通过下面的例子,我知道 USERZ 表中存在“XXXXXXX1”,所以我想能够在 WORKERS 表中添加这个用户。
例如:
"INSERT INTO WORKERS (ID) VALUES ('XXXXXXX1') "
谢谢!
【问题讨论】:
-
您也不应该将主键 ID 设为外键。向工人添加另一列 user_id 并且是您的外键
标签: python mysql sql python-3.x