使用外键约束更新

时间:2013-02-03 16:06:30

标签: mysql foreign-keys

如何更新与外键约束链接的多个元组 这是我的表定义

CREATE TABLE person
(
    driverId VARCHAR(10) PRIMARY KEY,
    driverName VARCHAR(30),
    address VARCHAR(50)
);

CREATE TABLE car
(
    regNo VARCHAR(10),
    model VARCHAR(25),
    YEAR INT,
    PRIMARY KEY(regNo)
);


CREATE TABLE accident 
(
    reportNo INT,
    accidentDate DATE,
    location VARCHAR(30),
    PRIMARY KEY(reportNo)
);

CREATE TABLE participated
(
    driverId VARCHAR(10),
    regNo VARCHAR(10) ,
    reportNo INT,
    damageAmount INT,
    FOREIGN KEY(driverId) REFERENCES person(driverId),
    FOREIGN KEY(regNo) REFERENCES car(regNo),
    FOREIGN KEY(reportNo) REFERENCES accident(reportNo),
    PRIMARY KEY(driverId, regNo,reportNo)
);

CREATE TABLE owns
(
    driverId VARCHAR(10),
    regNo VARCHAR(10),
    FOREIGN KEY(driverId) REFERENCES person(driverId),
    FOREIGN KEY(regNo) REFERENCES car(regNo),
    PRIMARY KEY(driverId, regNo)
);

当我执行此命令时

UPDATE accident
SET reportNo=5555
WHERE reportNo=2222;

“PARTICIPATED”表中具有相同“reportNo”的元组未更新

3 个答案:

答案 0 :(得分:0)

尝试将ON UPDATE CASCADE添加到参与表中的外键约束

答案 1 :(得分:0)

  1. 您的数据库引擎必须是InnoDB。您可以使用以下方式更改引擎:

    ALTER TABLE database_name.table_name ENGINE = InnoDB;

  2. 如果未指定参照操作,则默认操作为限制。您必须指定ON DELETEON UPDATE个操作。 Documentation

答案 2 :(得分:0)

使用以下查询。
         ALTER TABLE table_name ADD FOREIGN KEY(keyname)在删除级联上更新级联时引用parent_table_name.column名称。

级联允许父表中的更改反映在子表中。 但请确保您的存储引擎必须是InnoDB