2013-02-03 167 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