mysql - 删除时外键约束一对多表,更新级联规则

标签 mysql foreign-key-relationship cascading

我正在开发一个有数据库问题的 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/

相关文章:

mysql - 有没有办法在 SELECT 语句中存储变量?

php - 如何检查mysql中的参数是否为null或为空?

php - 引用多个外键php mysql

python - 在psql中使用将相关数据插入到两个表中

hadoop - 工作流工具比较 : Oozie Vs Cascading

debugging - 如何使用 Cascading 获取 Hadoop 以显示调试日志输出?

php - 关于关系的 laravel 订单查询

MYSQL如何在一条语句中选择总和列值和特定行条目?

database-design - 添加(或不添加)FK 以使 SELECT 更简单

hadoop - 从 hdfs 读取数据时级联的实现问题