日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql从零开始自增id_MySQL从零开始 7-表约束之主键,自增长,唯一键

發布時間:2025/3/13 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql从零开始自增id_MySQL从零开始 7-表约束之主键,自增长,唯一键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表約束除了空屬性,默認值,描述符以及零填充外(空屬性,默認值default,列描述comment以及零填充zerofill),還有主鍵,自增長,唯一鍵等對字段的索引和擴展約束。

1. 主鍵

使用 primary key 進行主鍵的定義。

主鍵用于唯一的約束該字段里的數據,主鍵約束的字段不能為空,不能重復,一張表里最多只能有一個主鍵,但是可以定義復合主鍵來突破這個限制。

-- 設置name字段為主鍵

mysql> create table t1(id int primary key, name varchar(32));

Query OK, 0 rows affected (0.28 sec)

mysql> insert into t1 values(1, 'xucc');

Query OK, 1 row affected (0.07 sec)

-- 插入重復主鍵數據

mysql> insert into t1 values(1, 'licc');

ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

-- 插入空的主鍵數據

mysql> insert into t1(name) values('licc');

ERROR 1364 (HY000): Field 'id' doesn't have a default value

除了這種定義主鍵的方式外,還有兩種方式。

--方式二,在字段列表之后定義主鍵

mysql> create table t2(id int, name varchar(32), primary key(id));

Query OK, 0 rows affected (0.24 sec)

mysql> create table t3(id int, name varchar(32));

Query OK, 0 rows affected (0.28 sec)

--方式三,追加主鍵

mysql> alter table t3 add primary key(id);

Query OK, 0 rows affected (0.52 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> desc t2;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(32) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

mysql> desc t3;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(32) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

我們可以看到,定義了主鍵的字段在表結構里Key字段為PRI,表結構Key字段表示的是表的索引,主鍵是索引的一種。

還可以定義復合主鍵,方法如下:

mysql> create table t4(id int, name varchar(32), age int, primary key(name, id));

Query OK, 0 rows affected (0.30 sec)

mysql> desc t4;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(32) | NO | PRI | NULL | |

| age | int(11) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

3 rows in set (0.02 sec)

復合主鍵雖然看起來使多個字段都定義成了主鍵,但實質上是使用這些字段來共同確定行的唯一性。

使用drop可以刪除表中主鍵。

mysql> alter table t4 drop primary key;

Query OK, 0 rows affected (0.79 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> desc t4;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| name | varchar(32) | NO | | NULL | |

| age | int(11) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

3 rows in set (0.01 sec)

2. 自增長

auto_increment用來定義字段的自增長。

自增長的字段不需要插入值,每次修改自增長所在的表,MySQL會自動將自增長字段加1。

定義自增長的字段必須要是一個索引,例如通常與主鍵字段搭配使用,所以自增長又稱為邏輯主鍵。

自增長字段必須是整數,且一張表只能有一個自增長字段,,因為自增長與key搭配,目前key學的是主鍵,主鍵只有一個,所以自增長也只有一個。

mysql> create table t5(id int primary key auto_increment, name varchar(32));

Query OK, 0 rows affected (0.39 sec)mysql> insert into t5(name) values('zhangsan');

Query OK, 1 row affected (0.07 sec)

mysql> insert into t5(name) values('lisi');

Query OK, 1 row affected (0.06 sec)

mysql> insert into t5(name) values('wangwu');

Query OK, 1 row affected (0.05 sec)

mysql> select * from t5;

+----+----------+

| id | name |

+----+----------+

| 1 | zhangsan |

| 2 | lisi |

| 3 | wangwu |

+----+----------+

3 rows in set (0.00 sec)

自增長只會增長,就算刪除了自增長字段的數據,下一次修改表時也會繼續從原有值增長。

--刪除自增長約束的id字段

mysql> alter table t5 drop id;

Query OK, 3 rows affected (0.68 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t5;

+----------+

| name |

+----------+

| zhangsan |

| lisi |

| wangwu |

+----------+

3 rows in set (0.00 sec)

--添加自增長id字段

mysql> alter table t5 add id int primary key auto_increment;

Query OK, 0 rows affected (0.55 sec)

Records: 0 Duplicates: 0 Warnings: 0--插入一個元素

mysql> insert into t5(name) values('xucc');

Query OK, 1 row affected (0.09 sec)

mysql> select * from t5;

+----------+----+

| name | id |

+----------+----+

| zhangsan | 1 |

| lisi | 2 |

| wangwu | 3 |

| xucc | 4 |

+----------+----+

4 rows in set (0.00 sec)

mysql> desc t5;

+-------+-------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+----------------+

| name | varchar(32) | YES | | NULL | |

| id | int(11) | NO | PRI | NULL | auto_increment |

+-------+-------------+------+-----+---------+----------------+

2 rows in set (0.00 sec)

從表結構中我們可以看出,自增長是Extra擴展字段的一種。

3. 唯一鍵

唯一鍵可以解決表中有多個字段需要唯一性約束的問題。

唯一鍵的本質和主鍵差不多,唯一鍵約束的字段允許為空,而且可以多個為空,空字段不做唯一性比較。

唯一鍵定義方式和主鍵一樣,也有對應的三種方式。

--創建一個擁有唯一鍵字段的表

mysql> create table t6(num int unique);

Query OK, 0 rows affected (0.39 sec)

mysql> insert into t6 values(1);

Query OK, 1 row affected (0.06 sec)

--插入重復元素

mysql> insert into t6 values(1);

ERROR 1062 (23000): Duplicate entry '1' for key 'num'

--唯一鍵可以為空

mysql> insert into t6 values(null);

Query OK, 1 row affected (0.08 sec)

mysql> desc t6;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| num | int(11) | YES | UNI | NULL | |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

從表結構中我們可以看出,唯一鍵也是索引的一種。

總結

以上是生活随笔為你收集整理的mysql从零开始自增id_MySQL从零开始 7-表约束之主键,自增长,唯一键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。