我正在处理一个我遇到数据库问题的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表中的一行时,也应删除其他表中的数据。
请提前解决此问题或此用例的任何替代解决方案,谢谢。
答案 0 :(得分:1)
请尝试以下方法:
表1
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);
似乎这样工作正常。