欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

2.修改數(shù)據(jù)表時(shí)添加自動(dòng)增長(zhǎng)

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

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

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

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

4.示例

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

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

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

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)行測(cè)試,這里省略id字段,并查詢(xún)結(jié)果,從結(jié)果可知省略id字段后id字段會(huì)使用自動(dòng)增長(zhǎng)值。從1開(kāi)始

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

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

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ù)時(shí),在id字段插入具體值5,從結(jié)果可知id字段的值從5開(kāi)始自增

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ù)時(shí),在id字段添加0,使用自動(dòng)增長(zhǎng),從5開(kāi)始自增,加一變成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ù)時(shí),在id字段添加DEFAULT值,使用自動(dòng)增長(zhǎng)

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語(yǔ)句查看自動(dòng)增長(zhǎng)值,從查詢(xún)結(jié)果可知AUTO_INCREMENT=8表明下次插入的自動(dòng)增長(zhǎng)值為8,若下次插入的指定了大于8的值,此處的8會(huì)自動(dòng)更新為下次插入值加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的自動(dòng)增長(zhǎng)值為10,然后在刪除id字段的自動(dòng)增長(zhǎng),最后再重新為id字段設(shè)置自動(dòng)增長(zhǎng)

mysql> # 刪除自動(dòng)增長(zhǎng)
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字段添加自動(dòng)增長(zhǎng)
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中提供了兩個(gè)用于維護(hù)自動(dòng)增長(zhǎng)的系統(tǒng)變量,分別是AUTO_INCREMENT_MENT和AUTO_INCREMENT_OFFEST,前者表示自增長(zhǎng)自動(dòng)從哪個(gè)數(shù)開(kāi)始,它的取值范圍是1~65535;后者表示自增長(zhǎng)字段每次遞增的量。默認(rèn)為1,取值范圍是1~65535

若要查看這兩個(gè)變量的值,可以使用SHOW VARIABLES語(yǔ)句

如:

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)

若要改變自動(dòng)增長(zhǎng)的計(jì)算方式,可以通過(guò)改變這兩個(gè)變量的值來(lái)實(shí)現(xiàn)。例如,可以使用

SET @@auto_increment_increment = 10;

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

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

相關(guān)文章

  • mysql kill process解決死鎖問(wèn)題

    mysql kill process解決死鎖問(wèn)題

    這篇文章主要介紹了使用mysql kill process解決死鎖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL的mysqldump工具用法詳解

    MySQL的mysqldump工具用法詳解

    這篇文章主要介紹了MySQL的mysqldump工具用法詳解,同時(shí)附帶了相關(guān)Source命令的用法,詳解需要的朋友可以參考下
    2015-07-07
  • SQL觸發(fā)器定義與使用

    SQL觸發(fā)器定義與使用

    SQL的觸發(fā)器和存儲(chǔ)過(guò)程一樣,都是嵌入到SQL中的一段程序,是SQL中管理數(shù)據(jù)的有力工具,本文給大家詳細(xì)介紹SQL觸發(fā)器的定義語(yǔ)法知識(shí),感興趣的朋友一起看看吧
    2023-01-01
  • MYSQL 刪除一個(gè)字段前判斷字段是否存在的辦法

    MYSQL 刪除一個(gè)字段前判斷字段是否存在的辦法

    這篇文章主要介紹了MYSQL 刪除一個(gè)字段前判斷字段是否存在的辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • MYSQL輸入密碼后閃退現(xiàn)象的解決方法

    MYSQL輸入密碼后閃退現(xiàn)象的解決方法

    最近在啟動(dòng)MySQL服務(wù)端并輸入密后,出現(xiàn)閃退現(xiàn)象,實(shí)際上這種問(wèn)題很常見(jiàn),下面這篇文章主要給大家介紹了關(guān)于MYSQL輸入密碼后閃退現(xiàn)象的解決方法,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 數(shù)據(jù)結(jié)構(gòu)-樹(shù)(三):多路搜索樹(shù)B樹(shù)、B+樹(shù)

    數(shù)據(jù)結(jié)構(gòu)-樹(shù)(三):多路搜索樹(shù)B樹(shù)、B+樹(shù)

    這篇文章主要介紹了多路搜索樹(shù)B樹(shù)、B+樹(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL中的HBase、ES的特點(diǎn)和區(qū)別解析

    MySQL中的HBase、ES的特點(diǎn)和區(qū)別解析

    本文介紹了MySQL、HBase和ElasticSearch的特點(diǎn)和區(qū)別,MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù),支持事務(wù)和SQL,而HBase和ElasticSearch是NoSQL數(shù)據(jù)庫(kù),HBase基于HDFS,支持大規(guī)模數(shù)據(jù)的讀寫(xiě),而ElasticSearch是一個(gè)分布式的全文搜索引擎,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • mysql日期函數(shù)用法大全

    mysql日期函數(shù)用法大全

    日期函數(shù)在實(shí)際應(yīng)用中可以幫助你輕松處理和操作日期時(shí)間數(shù)據(jù),使得數(shù)據(jù)庫(kù)操作更為靈活和便捷,本文主要介紹了mysql日期函數(shù)用法大全,感興趣的可以了解一下
    2024-05-05
  • 使用navicate連接阿里云服務(wù)器上的mysql

    使用navicate連接阿里云服務(wù)器上的mysql

    這篇文章主要介紹了使用navicate連接阿里云服務(wù)器上的mysql的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • MySQL 5.7安裝中的常見(jiàn)問(wèn)題分析及解決方案

    MySQL 5.7安裝中的常見(jiàn)問(wèn)題分析及解決方案

    在Linux服務(wù)器上安裝MySQL數(shù)據(jù)庫(kù)時(shí),尤其是在CentOS 7等操作系統(tǒng)上,可能會(huì)遇到一些安裝包和依賴(lài)關(guān)系相關(guān)的錯(cuò)誤,這些問(wèn)題的產(chǎn)生原因可以是多個(gè)方面,本文將通過(guò)對(duì)具體錯(cuò)誤的分析和解決方案的闡述,幫助大家快速解決在安裝MySQL 5.7版本過(guò)程中可能遇到的問(wèn)題
    2024-11-11

最新評(píng)論