我正在开发一个有数据库问题的 Web 应用程序。
我有三个表:如下
表 1:
CREATE TABLE mydb.emp( eID INT NOT NULL, eName VARCHAR(45) NULL, PRIMARY KEY(eID) );
表 2:
CREATE TABLE mydb.empLocation( eLocateID INT NOT NULL, eArea VARCHAR(45) NULL, eCity VARCHAR(45) NULL, eZipcode VARCHAR(45) NULL, eID INT NULL, PRIMARY KEY(eLocateID), CONSTRAINT eID FOREIGN KEY (eID) REFERENCES mydb.emp(eID) ON DELETE CASCADE ON UPDATE CASCADE );
表 3:
CREATE TABLE mydb.empLogin( eLoginID INT NOT NULL, eTimeIn TIMESTAMP NULL, eTimeOut TIMESTAMP NULL, eID INT NULL, PRIMARY KEY(eLoginID), CONSTRAINT eID FOREIGN KEY (eID) REFERENCES mydb.emp(eID) ON DELETE CASCADE ON UPDATE CASCADE );
当我创建表 3 时出现问题,我无法插入表,因为在删除和更新级联时。
我想要级联,因为当我删除 emp 表中的一行时,其他表中的数据也应该被删除。
请给我这个问题的任何解决方案或这个用例的任何替代解决方案,在此先感谢。
最佳答案
请尝试以下操作:
表一
CREATE TABLE emp(
eID INT NOT NULL,
eName VARCHAR(45) NULL,
PRIMARY KEY(eID)
);
表2
CREATE TABLE empLocation(
eLocateID INT NOT NULL,
eArea VARCHAR(45) NULL,
eCity VARCHAR(45) NULL,
eZipcode VARCHAR(45) NULL,
eID INT NULL,
PRIMARY KEY(eLocateID),
CONSTRAINT eID
FOREIGN KEY (eID)
REFERENCES emp(eID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
表3
CREATE TABLE empLogin(
eLoginID INT NOT NULL,
eTimeIn TIMESTAMP NULL,
eTimeOut TIMESTAMP NULL,
eID INT NULL,
PRIMARY KEY(eLoginID)
);
ALTER TABLE empLogin ADD FOREIGN KEY (eID) REFERENCES emp(eID)
ON DELETE CASCADE
ON UPDATE CASCADE;
然后,
INSERT INTO emp VALUES(1, 'John'), (2, 'Paul');
INSERT INTO empLogin VALUES
(1, '2017-01-27 09:00:00', '2017-01-27 18:00:00', 1),
(2, '2017-01-27 09:30:00', '2017-01-27 18:30:00', 2);
这种方式似乎工作正常。
关于mysql - 删除时外键约束一对多表,更新级联规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892422/