MySql约束,每行两列具有不同的值

时间:2019-06-02 22:35:06

标签: mysql

如何声明一个约束,以使两列在任何行中的值都不相同。

例如给定

create table `presents` (
    `from` varchar(255) NOT NULL,
    `to` varchar(255) NOT NULL
)

我要确保没有人给自己礼物。

'alice', 'bob'     # OK
'bob',   'charlie' # OK
'bob',   'alice'   # OK
'bob',   'alice'   # OK again
'bob',   'bob'     # Fails

2 个答案:

答案 0 :(得分:2)

create table `presents` (
    `from` varchar(255) NOT NULL,
    `to` varchar(255) NOT NULL,
    CHECK(from<>to)
)

答案 1 :(得分:1)

这是一个主意:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (id SERIAL PRIMARY KEY, `from` INT NOT NULL, `to` INT NOT NULL);

INSERT INTO my_table (`from`,`to`) SELECT 1,2 FROM (SELECT 1) x WHERE 1 <> 2;
INSERT INTO my_table (`from`,`to`) SELECT 1,1 FROM (SELECT 1) x WHERE 1 <> 1;


SELECT * FROM my_table;
+----+------+----+
| id | from | to |
+----+------+----+
|  1 |    1 |  2 |
+----+------+----+