Sam*_*ick 3 mysql group-by unique-constraint
我想知道是否可以让一个列对于 MySQL 中另一列的每个值都是唯一的。我想要拥有与 a 相同的功能GROUP BY。
这是表格:
CREATE TABLE Example (
id INT,
name VARCHAR(100) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
数据将与此类似:
INSERT INTO Example (id, name) VALUES(1, 'Peter Parker');
Run Code Online (Sandbox Code Playgroud)
以下内容将起作用:
INSERT INTO Example (id, name) VALUES(1, 'Bruce Wayne');
INSERT INTO Example (id, name) VALUES(2, 'Peter Parker');
Run Code Online (Sandbox Code Playgroud)
以下内容不起作用(因为该 id 具有相同的名称):
INSERT INTO Example (id, name) VALUES(1, 'Peter Parker');
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助澄清我想要的事情:
如果我理解正确的话,你想要的是这样的:
CREATE TABLE Example (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
UNIQUE KEY uix_name_example (name)
);
Run Code Online (Sandbox Code Playgroud)
该id字段是PRIMARY KEY,其值由服务器处理。on确保不允许重复 - 并确保(希望)有意义UNIQUE KEY的值。nameNOT NULL
INSERT INTO Example (name) VALUES ('Peter Parker'); -- specify name, but not id - it's automatic
INSERT INTO Example (name) VALUES ('Billy Joe McAlister');
INSERT INTO Example (name) VALUES ('Bill Clinton');
Run Code Online (Sandbox Code Playgroud)
检查你的桌子:
mysql> SELECT * FROM Example;
+----+---------------------+
| id | name |
+----+---------------------+
| 3 | Bill Clinton |
| 2 | Billy Joe McAlister |
| 1 | Peter Parker |
+----+---------------------+
3 rows in set (0.03 sec)
Run Code Online (Sandbox Code Playgroud)
随后对INSERT同名(彼得·帕克)的尝试失败了。
mysql> INSERT INTO Example (name) VALUES('Peter Parker');
ERROR 1062 (23000): Duplicate entry 'Peter Parker' for key 'uix_name_example'
mysql>
Run Code Online (Sandbox Code Playgroud)
如果您想允许具有相同名称但不同 ID 的人,那么您只需UNIQUE KEY uix_name_example (name)在表定义中省略该行即可。
mysql> INSERT INTO Example VALUES(1, 'Peter Parker');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql>
Run Code Online (Sandbox Code Playgroud)
如果这不是令人满意的解释,请扩展您的问题。
(编辑回应OP的评论和澄清)
您想要的是组合 id 和 name 字段上的UNIQUE KEY(或INDEX) - 也称为复合索引(或键)。其语法如下:
CREATE TABLE Example2 (
id INT NOT NULL,
name VARCHAR(100) NOT NULL,
UNIQUE KEY uix_example (id, name)
);
Run Code Online (Sandbox Code Playgroud)
允许插入具有不同名称的重复 ID。
mysql> INSERT INTO Example2 VALUES(1, 'Peter Parker');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO Example2 VALUES(1, 'Billy Power');
Query OK, 1 row affected (0.08 sec)
Run Code Online (Sandbox Code Playgroud)
允许使用不同的 id 插入相同的名称
mysql> INSERT INTO Example2 VALUES(1, 'Mary Hanlon');
Query OK, 1 row affected (0.06 sec)
mysql> INSERT INTO Example2 VALUES(2, 'Mary Hanlon');
Query OK, 1 row affected (0.06 sec)
Run Code Online (Sandbox Code Playgroud)
但是,不允许插入相同的 id和相同的名称。
mysql> INSERT INTO Example2 VALUES(1, 'Peter Parker');
ERROR 1062 (23000): Duplicate entry '1-Peter Parker' for key 'uix_example'
mysql>
Run Code Online (Sandbox Code Playgroud)
希望这能解决您的问题。
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |