MySQL - 更新记录并维护参照完整性

时间:2014-06-23 19:23:53

标签: php mysql sql

我在MySQL 5.5工作。

我有一个像这样的联系人表

CREATE TABLE Contacts ( ID INTEGER NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(255) NOT NULL, Institution VARCHAR(255), Address VARCHAR(255), Email VARCHAR(255) NOT NULL UNIQUE, Phone VARCHAR(10) ); 和像这样的库存表

CREATE TABLE Inventories ( ID INTEGER NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, InventoryParametersID INTEGER NOT NULL UNIQUE, ContactID INTEGER NOT NULL, LocationID INTEGER NOT NULL, Year INTEGER, DateUploaded TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, Comments VARCHAR(255), FOREIGN KEY (ContactID) REFERENCES Contacts(ID) ); 在我的网络表单中,联系人上传库存。这就是我想要的行为: - 当新联系人上传广告资源时,请使用新信息进行插入 - 当现有联系人(由电子邮件地址确定)上传其他广告资源时,使用“库存”表更新其信息并保留参照完整性

我该怎么做?

以下是我尝试的内容:

CASE

FOREIGN KEY (ContactID) REFERENCES Contacts(ID)

REPLACE INTO Contacts (`Name`, `Institution`, `Address`, `Email`, `Phone`) VALUES (?, ?, ?, ?, ?);

RESULT

No change

CASE

FOREIGN KEY (ContactID) REFERENCES Contacts(ID)

    ON UPDATE CASCADE

REPLACE INTO Contacts (`Name`, `Institution`, `Address`, `Email`, `Phone`) VALUES (?, ?, ?, ?, ?);

RESULT

No change

1 个答案:

答案 0 :(得分:2)

REPLACE删除查找行并添加新行。所以你的ON UPDATE CASCADE不起作用。为什么不使用INSERT ... ON DUPLICATE KEY UPDATE?

INSERT INTO Contacts (Name, Institution, Address, Email, Phone) 
VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE 
Name = VALUES(NAME), 
Institution = VALUES(Institution) ...

MySQL DOC