mysql 約束條件 unique key 唯一的鍵


 

 

如果不設置unique

 

會出現兩條相同的記錄

mysql> create table department1(id int,name varchar(16));
Query OK, 0 rows affected (0.01 sec)


mysql> insert into department1 values(1 ,'mike'),(2,'mike');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from department1;
+------+------+
| id   | name |
+------+------+
|    1 | mike |
|    2 | mike |
+------+------+
2 rows in set (0.00 sec)

 

 

mysql> desc department1 ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(16) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 

 

============設置唯一約束 UNIQUE===============


不能插入相同記錄

方式一:
mysql> create table department1(id int,name varchar(16) unique);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into department1 values(1 ,'mike'),(2,'mike');
ERROR 1062 (23000): Duplicate entry 'mike' for key 'name'

 

方式二:

mysql> create table department1(id int,name varchar(16),unique(id),unique(name));
Query OK, 0 rows affected (0.02 sec)

mysql> desc department1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(16) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 

這兩種方法都叫單列唯一 針對一個字段設置唯一性


還有一種 聯合唯一
幾個字段合到一起不重復就可以


聯合唯一
unique(ip,port)
desc 看到有 MUL 就是聯合唯一
mysql> create table services(id int,ip char(16),port int,unique(id),unique(ip,port));
Query OK, 0 rows affected (0.01 sec)

mysql> desc services;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  | UNI | NULL    |       |
| ip    | char(16) | YES  | MUL | NULL    |       |
| port  | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
 
        

 

驗證 插入記錄

 

mysql> insert into services values 
    -> (1,'192.168.10.11',80),
    -> (2,'192.168.10.11',81),
    -> (3,'192.168.10.10',80);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from services;
+------+---------------+------+
| id   | ip            | port |
+------+---------------+------+
|    1 | 192.168.10.11 |   80 |
|    2 | 192.168.10.11 |   81 |
|    3 | 192.168.10.10 |   80 |
+------+---------------+------+
3 rows in set (0.00 sec)

 

再插入一條原本有的記錄 報錯了

mysql> insert into services values(4,'192.168.10.10',80);
ERROR 1062 (23000): Duplicate entry '192.168.10.10-80' for key 'ip'

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM