1

有两个这样的表:

CREATE TABLE rooms (rid CHAR PRIMARY KEY);
CREATE TABLE users (uid INT PRIMARY KEY, rid CHAR FOREIGN KEY REFERENCES rooms(rid))

目标是重命名 rid 的键(值,而不是表或列),如下所示:

BEGIN TRANSACTION;
UPDATE rooms
SET rid = "9"||SUBSTRING(rid, 2)
WHERE TEXT(rid) LIKE "5%";
UPDATE users
SET rid = "9"||SUBSTRING(rid, 2)
WHERE TEXT(rid) LIKE "5%";
END TRANSACTION;

当然,这会导致外键约束错误。

在重命名的上下文中,经常调用“sp_rename”。但我是这样理解的,它只适用于表和列,而不适用于值。

如何重命名外键约束的值?

.

解决了:

BEGIN TRANSACTION;

ALTER TABLE users
DROP CONSTRAINT users_rid_fkey,
ADD FOREIGN KEY (rid) REFERENCES rooms(rid) ON UPDATE CASCADE ON DELETE RESTRICT;

UPDATE rooms
SET rid = '9'||SUBSTRING(rid, 2)
WHERE rid LIKE '5%';

END TRANSACTION;
4

1 回答 1

2

你有几种方法......即:

  1. 删除约束,更新数据,然后重新添加约束。

  2. 更改约束,使其成为on update cascade

  3. 更改约束以使其成为deferrable initially deferred

  4. 将适当的 id 列添加到房间并引用它,以完全避免该问题。

于 2013-11-09T09:53:33.600 回答