php - MySQL - 更新记录并保持参照完整性

标签 php mysql sql

我在 MySQL 5.5 中工作。

我有一个这样的联系人表

创建联系人表 ( ID INTEGER NOT NULL 唯一主键 AUTO_INCREMENT, 名称 VARCHAR(255) NOT NULL, 机构 VARCHAR(255), 地址 VARCHAR(255), 电子邮件 VARCHAR(255) NOT NULL UNIQUE, 电话 VARCHAR(10) ); 和这样的库存表

创建表库存 ( ID INTEGER NOT NULL 唯一主键 AUTO_INCREMENT, InventoryParametersID INTEGER NOT NULL UNIQUE, ContactID 整数不为空, LocationID INTEGER NOT NULL, 年整数, DateUploaded TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 注释 VARCHAR(255), 外键(ContactID)引用联系人(ID) ); 在我的网络表单中,联系人上传库存。这是我想要的行为: - 当新联系人上传库存时,使用他们的新信息进行插入 - 当现有联系人(由电子邮件地址确定)上传另一个库存时,更新他们的信息并保留库存表的引用完整性

我该怎么做?

这是我尝试过的:

案例

FOREIGN KEY (ContactID) REFERENCES Contacts(ID)

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

结果

No change

案例

FOREIGN KEY (ContactID) REFERENCES Contacts(ID)

    ON UPDATE CASCADE

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

结果

No change

最佳答案

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

关于php - MySQL - 更新记录并保持参照完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373744/

相关文章:

php - 如何在 127.0.0.1 :9000 上重新启动已编译的 php-fpm

php - 为我的属性表创建照片模型

java - 等效于 LinkedHashMap 在 php 中?

php - 将行中的所有数字相加

python - 使用 Python dbapi 转义 MySQL 保留字

mysql - CASE 语句中的 COUNT?

php - Libreoffice headless Process 结果不返回,而是等待超时

mysql - 使用 insert into 使用 mysql

如果使用声明参数,则像 sql 一样查询速度慢,如果不使用则查询速度快

SQL Server Procedure 返回多个表 - 将结果插入表中