2013-02-03 53 views
0

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

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”没有被更新

+0

每个表都需要是'InnoDB'。 – Kermit

+0

@njk所以什么是制作表innodb的语法 – tiger

+0

http://dev.mysql.com/doc/refman/5.0/en/using-innodb-tables.html –

回答

0

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

0
  1. 您的数据库引擎必须是InnoDB。您可以通过改变发动机:

    ALTER TABLE database_name.table_name ENGINE = InnoDB;

  2. 如果没有指定参考动作,默认的动作是限制。您必须指定ON DELETEON UPDATE操作。 Documentation

0

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

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