最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)表設(shè)計(jì)之自動增長的實(shí)現(xiàn)

 更新時間:2025年03月12日 10:41:45   作者:堅(jiān)持就完事了  
本文主要介紹了MySQL數(shù)據(jù)表設(shè)計(jì)之自動增長的實(shí)現(xiàn),包括創(chuàng)建數(shù)據(jù)表時設(shè)置自動增長和修改數(shù)據(jù)表時添加自動增長,具有一定的參考價值,感興趣的可以了解一下

在實(shí)際開發(fā)中,有時需要為數(shù)據(jù)表中添加的新紀(jì)錄自動生成主鍵值。例如在員工數(shù)據(jù)表中添加員工信息時,如果手動填寫員工工號,需要在添加員工前查詢工號是否被其他員工占用,由于先查詢后添加需要一段時間,有可能會出現(xiàn)并發(fā)操作時工號被其他人搶占的問題,此時可以為員工工號字段設(shè)置自動增長。設(shè)置自動增長后,如果往該字段插入值時,MySQL會自動生成唯一的自動增長值。

通過給字段設(shè)置AUTO_INCREMENT即可實(shí)現(xiàn)自動增長。

設(shè)置自動增長的方式有兩種,分別為創(chuàng)建數(shù)據(jù)表時設(shè)置自動增長和修改數(shù)據(jù)表時添加自動增長。

1.創(chuàng)建數(shù)據(jù)表時設(shè)置自動增長

CREATE TABLE 表名 (
字段名 數(shù)據(jù)類型 約束 AUTO_INCREMENT,
...
);

2.修改數(shù)據(jù)表時添加自動增長

# 語法1 MODIFY子句
ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 AUTO_INCREMENT;

# 語法2 CHANGE子句
ALTER TABLE 表名 CHANGE 字段名 字段名 數(shù)據(jù)類型 AUTO_INCREMENT;

3.使用AUTO_INCREMENT時注意事項(xiàng)如下:

  • 一個數(shù)據(jù)表中只能有一個字段設(shè)置AUTO_INCREMENT,設(shè)置AUTO_INCREMENT字段的數(shù)據(jù)類型應(yīng)該是整數(shù)類型,并且該字段必須設(shè)置了唯一約束或主鍵約束
  • 如果為自動增長字段插入NULL、0、DEFAULT,或在插入數(shù)據(jù)時省略了自動增長字段,則該字段會使用自動增長值;如果插入的是一個具體的值,則不會使用自動增長值。
  • 默認(rèn)情況下,設(shè)置AUTO_INCREMENT的字段的值會從1開始自增。如果插入了一個大于自動增長值得具體值,則下次插入的自動增長的值會自動使用最大值加1;如果插入的值小于自動增長值,則不會對自動增長值產(chǎn)生影響
  • 使用DELETE語句刪除數(shù)據(jù)時,自動增長值不會減少或填補(bǔ)空缺
  • 在為字段刪除自動增長并重新添加自動增長后,自動增長的初始值會自動設(shè)置為該列現(xiàn)有的最大值加1
  • 在修改自動增長值時,修改的值若小于該列現(xiàn)有的最大值,則修改不會生效

4.示例

1.創(chuàng)建數(shù)據(jù)表,設(shè)置id字段自動增長

mysql> create table my_auto (
    -> id int primary key auto_increment,
    -> username varchar(20)
    -> );
Query OK, 0 rows affected (0.04 sec)

2.使用DESC語句查看表結(jié)構(gòu),驗(yàn)證id字段是否成功設(shè)置主鍵和自動增長

mysql> desc my_auto;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(20) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

3.添加數(shù)據(jù)進(jìn)行測試,這里省略id字段,并查詢結(jié)果,從結(jié)果可知省略id字段后id字段會使用自動增長值。從1開始

mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
|  1 | a        |
+----+----------+
1 row in set (0.00 sec)

4.添加數(shù)據(jù)進(jìn)行測試,這里在id字段插入NULL值,從結(jié)果得知id字段使用自動增長值

mysql> insert into my_auto values (null,'b');
Query OK, 1 row affected (0.01 sec)

mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
|  1 | a        |
|  2 | b        |
+----+----------+
2 rows in set (0.00 sec)

5.添加數(shù)據(jù)時,在id字段插入具體值5,從結(jié)果可知id字段的值從5開始自增

mysql> insert into my_auto values (5,'c');
Query OK, 1 row affected (0.01 sec)

mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
|  1 | a        |
|  2 | b        |
|  5 | c        |
+----+----------+
3 rows in set (0.00 sec)

6.添加數(shù)據(jù)時,在id字段添加0,使用自動增長,從5開始自增,加一變成6

mysql> insert into my_auto values (0,'d');
Query OK, 1 row affected (0.00 sec)

mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
|  1 | a        |
|  2 | b        |
|  5 | c        |
|  6 | d        |
+----+----------+
4 rows in set (0.00 sec)

7.添加數(shù)據(jù)時,在id字段添加DEFAULT值,使用自動增長

mysql> insert into my_auto values (default,'e');
Query OK, 1 row affected (0.01 sec)

mysql> select * from my_auto;
+----+----------+
| id | username |
+----+----------+
|  1 | a        |
|  2 | b        |
|  5 | c        |
|  6 | d        |
|  7 | e        |
+----+----------+
5 rows in set (0.00 sec)

8.使用SHOW CREATE TABLE語句查看自動增長值,從查詢結(jié)果可知AUTO_INCREMENT=8表明下次插入的自動增長值為8,若下次插入的指定了大于8的值,此處的8會自動更新為下次插入值加1

mysql> show create table my_auto\G
*************************** 1. row ***************************
       Table: my_auto
Create Table: CREATE TABLE `my_auto` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

9.先修改id的自動增長值為10,然后在刪除id字段的自動增長,最后再重新為id字段設(shè)置自動增長

mysql> # 刪除自動增長
mysql> alter table my_auto modify id int;
Query OK, 5 rows affected (0.06 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> desc my_auto;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> show create table my_auto\G
*************************** 1. row ***************************
       Table: my_auto
Create Table: CREATE TABLE `my_auto` (
  `id` int NOT NULL,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> # 重新為id字段添加自動增長
mysql> alter table my_auto modify id int auto_increment;
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> desc my_auto;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(20) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> show create table my_auto\G
*************************** 1. row ***************************
       Table: my_auto
Create Table: CREATE TABLE `my_auto` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

5.擴(kuò)展

MySQL中提供了兩個用于維護(hù)自動增長的系統(tǒng)變量,分別是AUTO_INCREMENT_MENT和AUTO_INCREMENT_OFFEST,前者表示自增長自動從哪個數(shù)開始,它的取值范圍是1~65535;后者表示自增長字段每次遞增的量。默認(rèn)為1,取值范圍是1~65535

若要查看這兩個變量的值,可以使用SHOW VARIABLES語句

如:

mysql> show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set, 1 warning (0.00 sec)

若要改變自動增長的計(jì)算方式,可以通過改變這兩個變量的值來實(shí)現(xiàn)。例如,可以使用

SET @@auto_increment_increment = 10;

將auto_increment_increment的值改為10 ,這里僅介紹如何查看自動增長系統(tǒng)變量的值,關(guān)于變量的相關(guān)內(nèi)容將會在數(shù)據(jù)庫編程章節(jié)中的函數(shù)模塊中學(xué)習(xí)

到此這篇關(guān)于MySQL數(shù)據(jù)表設(shè)計(jì)之自動增長的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 自動增長內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL表操作插入數(shù)據(jù)insert語句學(xué)習(xí)(小白入門篇)

    MySQL表操作插入數(shù)據(jù)insert語句學(xué)習(xí)(小白入門篇)

    這篇文章主要為大家介紹了MySQL表操作插入數(shù)據(jù)insert語句學(xué)習(xí)小白入門篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 簡述MySQL 正則表達(dá)式

    簡述MySQL 正則表達(dá)式

    大家都知道MySQL可以通過 LIKE ...% 來進(jìn)行模糊匹配,MySQL 同樣也支持其他正則表達(dá)式的匹配, MySQL中使用 REGEXP 操作符來進(jìn)行正則表達(dá)式匹配。對mysql正則表達(dá)式知識感興趣的朋友一起看看吧
    2016-11-11
  • mysql獲取枚舉的隨機(jī)值實(shí)踐

    mysql獲取枚舉的隨機(jī)值實(shí)踐

    在MySQL中,可以使用EL和FLOOR函數(shù)結(jié)合實(shí)現(xiàn)從ENUM類型中隨機(jī)選擇值值,通過生成隨機(jī)索引并使用ELLTT函數(shù)獲取相應(yīng)位置的值值,此方法適用于少量和大量數(shù)據(jù)場景
    2026-05-05
  • MySQL數(shù)據(jù)庫基礎(chǔ)命令大全(收藏)

    MySQL數(shù)據(jù)庫基礎(chǔ)命令大全(收藏)

    今天小編給大家整理一下mysql數(shù)據(jù)庫的基礎(chǔ)命令,特此分享到腳本之家平臺,供大家參考下
    2016-12-12
  • MySQL中的DDL、DML與DCL的深度探究

    MySQL中的DDL、DML與DCL的深度探究

    本文系統(tǒng)介紹了MySQL數(shù)據(jù)庫中的三大SQL語句類別DDL(數(shù)據(jù)定義語言)、DML(數(shù)據(jù)操縱語言)和DCL(數(shù)據(jù)控制語言),感興趣的朋友跟隨小編一起看看吧
    2025-07-07
  • MySQL慢日志輸出問題及快速解決方法

    MySQL慢日志輸出問題及快速解決方法

    文章介紹了MySQL慢日志輸出問題的原因和解決方法,慢日志記錄了執(zhí)行時間超過設(shè)定閾值的SQL語句,但有時即使查詢時間小于閾值,未使用索引的查詢也會被記錄,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • linux下安裝mysql及mysql.sock問題

    linux下安裝mysql及mysql.sock問題

    最近在linux上裝mysql時遇到一些棘手的問題,百思不得其解,下面小編給大家?guī)砹薼inux下安裝mysql及mysql.sock問題,感興趣的朋友一起看看吧
    2018-03-03
  • MySQL 篩選條件放 ON后 vs 放 WHERE 后的區(qū)別解析

    MySQL 篩選條件放 ON后 vs 放 WHERE 后的區(qū)

    文章解釋了在MySQL中,將篩選條件放在ON和WHERE中的區(qū)別,文章通過幾個場景說明了ON和WHERE的區(qū)別,并總結(jié)了ON用于關(guān)聯(lián),WHERE用于過濾,以及在LEFT JOIN中ON用于保行,在INNER JOIN中用于提效,本文介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • MySQL的使用中實(shí)現(xiàn)讀寫分離的教程

    MySQL的使用中實(shí)現(xiàn)讀寫分離的教程

    這篇文章主要介紹了MySQL的使用中實(shí)現(xiàn)讀寫分離的教程,文中分別介紹了mysql-proxy與mysqlnd_ms的使用,需要的朋友可以參考下
    2015-12-12
  • Mysql虛擬列的使用場景

    Mysql虛擬列的使用場景

    MySQL虛擬列是一種在查詢時動態(tài)生成的特殊列,它不占用存儲空間,可以提高查詢效率和數(shù)據(jù)處理便利性,本文給大家介紹Mysql虛擬列的相關(guān)知識,感興趣的朋友一起看看吧
    2025-01-01

最新評論

宕昌县| 泌阳县| 神木县| 盐城市| 桑植县| 肥东县| 蒲江县| 洛阳市| 临海市| 大同县| 西青区| 综艺| 鸡西市| 贵阳市| 九台市| 化州市| 茂名市| 霍山县| 丰顺县| 瑞安市| 奉贤区| 张家港市| 海南省| 兴义市| 山阳县| 丽江市| 岗巴县| 泰宁县| 出国| 泸溪县| 永州市| 沂南县| 泰安市| 南木林县| 江陵县| 宁都县| 安西县| 淳化县| 左权县| 桂东县| 龙里县|