Mysql 如何使两个外键唯一?
我有两张桌子Mysql 如何使两个外键唯一?,mysql,unique,one-to-one,Mysql,Unique,One To One,我有两张桌子 MY_ENTITY ---------------------------------------------------- ID BIGINT (PK) YOUR_ENTITY_ID_1 BIGINT NOT NULL (FK) OneToOne ||--| YOUR_ENTITY_ID_2 BIGINT NULL (FK) OneToOne ||--|
MY_ENTITY
----------------------------------------------------
ID BIGINT (PK)
YOUR_ENTITY_ID_1 BIGINT NOT NULL (FK) OneToOne ||--|
YOUR_ENTITY_ID_2 BIGINT NULL (FK) OneToOne ||--|
|
YOUR_ENTITY |
---------------------------------------------------- |
ID BIGINT (PK) -------------|
我想我可以使每个您的\u实体\u ID\u X
列都是唯一的
我怎样才能在所有
您的\u实体ID\u X
列中确保只有一个您的\u实体
表结构:
CREATE TABLE MY_ENTITY (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
ENTITY_ID_1 INT UNSIGNED UNIQUE,
ENTITY_ID_2 INT UNSIGNED UNIQUE,
UNIQUE(ENTITY_ID_1, ENTITY_ID_2)
);
触发器,它将阻止插入:
DROP TRIGGER IF EXISTS ONLY_UNIQUE_ENTITIES;
DELIMITER //
CREATE TRIGGER ONLY_UNIQUE_ENTITIES BEFORE INSERT ON `MY_ENTITY`
FOR EACH ROW
BEGIN
DECLARE entity_exists INT DEFAULT 0;
SELECT
COUNT(*) INTO entity_exists
FROM
`MY_ENTITY`
WHERE
(`ENTITY_ID_1` IN (NEW.ENTITY_ID_1, NEW.ENTITY_ID_2))
OR
(`ENTITY_ID_2` IN (NEW.ENTITY_ID_1, NEW.ENTITY_ID_2));
IF entity_exists THEN
SET NEW.ENTITY_ID_1 = NEW.ENTITY_ID_2;
END IF;
END;
这是一种有点粗俗的方法,使用触发器 表结构:
CREATE TABLE MY_ENTITY (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
ENTITY_ID_1 INT UNSIGNED UNIQUE,
ENTITY_ID_2 INT UNSIGNED UNIQUE,
UNIQUE(ENTITY_ID_1, ENTITY_ID_2)
);
触发器,它将阻止插入:
DROP TRIGGER IF EXISTS ONLY_UNIQUE_ENTITIES;
DELIMITER //
CREATE TRIGGER ONLY_UNIQUE_ENTITIES BEFORE INSERT ON `MY_ENTITY`
FOR EACH ROW
BEGIN
DECLARE entity_exists INT DEFAULT 0;
SELECT
COUNT(*) INTO entity_exists
FROM
`MY_ENTITY`
WHERE
(`ENTITY_ID_1` IN (NEW.ENTITY_ID_1, NEW.ENTITY_ID_2))
OR
(`ENTITY_ID_2` IN (NEW.ENTITY_ID_1, NEW.ENTITY_ID_2));
IF entity_exists THEN
SET NEW.ENTITY_ID_1 = NEW.ENTITY_ID_2;
END IF;
END;