无论行如何,都是唯一的列
P粉378264633
P粉378264633 2023-09-03 17:26:33
0
2
463
<p>无论列中的值是什么,是否有办法使整行都是唯一的?</p> <p>所以,如果列 <code>a</code> 中有 <code>1</code>,列 <code>b</code> 中有 <code>2</code>,那么如果你将 <code>2</code> 插入到列 <code>a</code> 中,将 <code>1</code> 插入到列 <code>b</code> 中,将会抛出错误。</p> <pre class="brush:none;toolbar:false;">+---+---+ | a | b | +---+---+ | 1 | 2 | | 2 | 1 | <- 由于上面已经存在,插入时会抛出错误 +---+---+ </pre></p>
P粉378264633
P粉378264633

全部回复(2)
P粉146080556

你可以使用触发器来强制执行。但是我想不出一种好的方法来使用UNIQUE KEY约束来实现这一点。

如果你改变存储值的方式,使它们位于单个列中,位于附加表的多行中,那么使用UNIQUE KEY来强制唯一性将更容易。


如果你想表示相关的项目:

CREATE TABLE item_group (
  group_id INT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE item_group_members (
  group_id INT NOT NULL,
  member_id INT NOT NULL,
  PRIMARY KEY (group_id, member_id)
);

INSERT INTO item_group_members VALUES (1, 1), (1, 2);

如果你需要每个成员只出现在一个组中:

ALTER TABLE item_group_members ADD UNIQUE KEY (member_id);
P粉186017651

定义2个虚拟生成列,分别为最小值和最大值,并在它们上设置唯一约束:

CREATE TABLE tablename (
  a INT NOT NULL, 
  b INT NOT NULL,
  x INT GENERATED ALWAYS AS (LEAST(a, b)),
  y INT GENERATED ALWAYS AS (GREATEST(a, b)),
  UNIQUE (x, y)
);

查看演示

或者,对于MySql 8.0+:

CREATE TABLE tablename (
  a INT NOT NULL, 
  b INT NOT NULL,
  UNIQUE ((LEAST(a, b)), (GREATEST(a, b))) -- 不要忘记括号 
);

查看演示

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!