欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql怎么把自增清楚,mysql的自增

將mysql自增id字段清零,

也就是說不用管每條記錄的id會不會變咯?

創(chuàng)新互聯(lián)建站不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對營銷、技術(shù)、服務(wù)都有自己獨(dú)特見解,公司采取“創(chuàng)意+綜合+營銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的成都做網(wǎng)站、網(wǎng)站制作質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時,也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級,滿足企業(yè)一站式營銷型網(wǎng)站建設(shè)需求,讓再小的品牌網(wǎng)站制作也能產(chǎn)生價值!

方法一:使用select ...into outfile 和 load data infile ...

1.導(dǎo)出除了字段id的所有字段

2.清空表

3.導(dǎo)入數(shù)據(jù)

例子:

#建立測試表 lt1

mysql create table lt1(id int(10) auto_increment,v1 int(10) default 0,v2 int(10

) default 0,primary key(id))engine=innodb,default charset=utf8;

Query OK, 0 rows affected (0.11 sec)

#插入測試數(shù)據(jù)

mysql insert into lt1(v1,v2) values(1,1),(2,2),(3,3),(4,4),(5,5);

Query OK, 5 rows affected (0.06 sec)

Records: 5 Duplicates: 0 Warnings: 0

#刪除id=4的數(shù)據(jù)

mysql delete from lt1 where id=4;

Query OK, 1 row affected (0.08 sec)

#查看測試表的數(shù)據(jù),這時候id不連續(xù)。

mysql select * from lt1;

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

| id | v1 | v2 |

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

| 1 | 1 | 1 |

| 2 | 2 | 2 |

| 3 | 3 | 3 |

| 5 | 5 | 5 |

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

4 rows in set (0.00 sec)

#將表中的v1,v2字段導(dǎo)出到lt1.xls中。

mysql select v1,v2 from lt1 into outfile 'd:/localdmp/data/lt1.xls';

Query OK, 4 rows affected (0.03 sec)

#清空lt1

mysql truncate table lt1;

Query OK, 0 rows affected (0.08 sec)

#從lt1.xls文件中導(dǎo)入數(shù)據(jù)到lt1中,注意指定字段名(v1,v2)。

mysql load data infile 'd:/localdmp/data/lt1.xls' into table lt1(v1,v2);

Query OK, 4 rows affected (0.08 sec)

Records: 4 Deleted: 0 Skipped: 0 Warnings: 0

#現(xiàn)在id連續(xù)了

mysql select * from lt1;

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

| id | v1 | v2 |

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

| 1 | 1 | 1 |

| 2 | 2 | 2 |

| 3 | 3 | 3 |

| 4 | 5 | 5 |

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

4 rows in set (0.00 sec)

方法二:

使用臨時表create table ...select ... 和 insert ...select ...

例子:

#還是lt1表,先清空

mysql truncate table lt1;

Query OK, 0 rows affected (0.08 sec)

#插入測試數(shù)據(jù),id 1-5

mysql insert into lt1(v1,v2) values(1,1),(2,2),(3,3),(4,4),(

Query OK, 5 rows affected (0.06 sec)

Records: 5 Duplicates: 0 Warnings: 0

mysql select * from lt1;

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

| id | v1 | v2 |

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

| 1 | 1 | 1 |

| 2 | 2 | 2 |

| 3 | 3 | 3 |

| 4 | 4 | 4 |

| 5 | 5 | 5 |

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

5 rows in set (0.00 sec)

#把id=4刪除

mysql delete from lt1 where id=4;

Query OK, 1 row affected (0.06 sec)

mysql select * from lt1;

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

| id | v1 | v2 |

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

| 1 | 1 | 1 |

| 2 | 2 | 2 |

| 3 | 3 | 3 |

| 5 | 5 | 5 |

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

4 rows in set (0.00 sec)

#創(chuàng)建臨時表lt11

mysql create table lt11 select v1,v2 from lt1;

Query OK, 4 rows affected (0.11 sec)

Records: 4 Duplicates: 0 Warnings: 0

#臨時表的數(shù)據(jù)

mysql select *from lt11;

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

| v1 | v2 |

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

| 1 | 1 |

| 2 | 2 |

| 3 | 3 |

| 5 | 5 |

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

4 rows in set (0.00 sec)

#清空lt1

mysql truncate table lt1;

Query OK, 0 rows affected (0.06 sec)

#將臨時表lt11的數(shù)據(jù)插入lt1中

mysql insert into lt1 (v1,v2) select v1,v2 from lt11;

Query OK, 4 rows affected (0.06 sec)

Records: 4 Duplicates: 0 Warnings: 0

#查看結(jié)果,id已經(jīng)連續(xù)。

mysql select *from lt1;

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

| id | v1 | v2 |

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

| 1 | 1 | 1 |

| 2 | 2 | 2 |

| 3 | 3 | 3 |

| 4 | 5 | 5 |

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

4 rows in set (0.00 sec)

唔,這么辛苦,給個最佳至少啊...

清空MySQL表,如何使ID重新從1自增???

清空MySQL表,使ID重新從1自增的步驟如下:

我們需要準(zhǔn)備的材料分別是:電腦、Mysql查詢器。

1、首先,打開Mysql查詢器,連接上相應(yīng)的mysql連接。

2、鼠標(biāo)右擊需要清空自增ID的表,選擇“設(shè)計(jì)表”,再將選項(xiàng)卡切換到“設(shè)置”欄,會發(fā)現(xiàn)雖然清空了表,但是自動遞增的數(shù)值仍然沒有變回1。

3、在自動遞增欄,將數(shù)值更改為數(shù)字1,并點(diǎn)擊“保存”按鈕。

4、此時會發(fā)現(xiàn),再新增數(shù)據(jù)時,ID自動從1開始遞增了。

怎么重置mysql的自增列AUTO

重置mysql的自增列AUTO的方法有:

方法一: delete from tb1;

ALTER TABLE tbl AUTO_INCREMENT = 100;

注意:如果表列和數(shù)據(jù)很多, 速度會很慢, 如90多萬條, 會在10分鐘以上.

方法二: truncate tb1;

重置mysql的自增列 的步驟如下:

1. 支持設(shè)置自增列的值 ;

ALTER TABLE table_name AUTO_INCREMENT = 1;

這種方式只能設(shè)置大于當(dāng)前使用的值,不能設(shè)置小于等于當(dāng)前已經(jīng)使用的自增列的值。myisam如果設(shè)置小于等于,則自增列的值會自動設(shè)置為 :

當(dāng)前最大值加1,innodb則不會改變。

2.通過TRUNCATE把自增列設(shè)置為0,從MySQL 5.0.13開始TRUNCATE重置自增列為0.myisam和innode都一樣。

TRUNCATE TABLE table_name;

3.drop和create重建表方式重置自增列為0

DROP TABLE table_name;

CREATE TABLE table_name { ... };

使用兩種方法重置mysql的自增列AUTO的好處有:

方法一:可設(shè)置 AUTO_INCREMENT 為任意值開始;

方法二:簡單, AUTO_INCREMENT 值重新開始計(jì)數(shù);

注意:使用以上方法都會將現(xiàn)有數(shù)據(jù)刪除.

mysql怎么讓自增長的

1、創(chuàng)建表時指定AUTO_INCREMENT自增值的初始值(即起始值):

CREATE TABLE XXX (ID INT(5) PRIMARY KEY AUTO_INCREMENT) AUTO_INCREMENT=100;

2、通過 ALTER TABLE 修改初始值(但是要大于表中的 AUTO_INCREMENT 自增值,否則設(shè)置無效):

ALTER TABLE XXX AUTO_INCREMENT=100;

3、如果自增序列的最大值被刪除了,則在插入新記錄時,該值被重用:

就是說如果表中原本有AUTO_INCREMENT屬性值連續(xù)為78、100的值,但100這個數(shù)據(jù)被刪除了,下此再添加數(shù)據(jù)的時候自增值為101,100被重用了。

即使在你將整個表中的所有數(shù)據(jù)delete清空后,之前的自增序列最大值還是會被重用。

解決辦法是:

使用 ALTER TABLE XXX AUTO_INCREMENT=0; 重新設(shè)置自增初始值。

怎么重置mysql的自增列

1.

支持設(shè)置自增列的值

ALTER

TABLE

table_name

AUTO_INCREMENT

=

1;

不過這種方式只能設(shè)置大于當(dāng)前使用的值,不能設(shè)置小于等于當(dāng)前已經(jīng)使用的自增列的值。myisam如果設(shè)置小于等于,則自增列的值會自動設(shè)置為當(dāng)前最大值加1。innodb則不會改變。

2.通過TRUNCATE把自增列設(shè)置為0,從MySQL

5.0.13開始TRUNCATE就能重置自增列為0.myisam和innode都是如此。

TRUNCATE

TABLE

table_name;

注意:TRUNCATE

會清空表中數(shù)據(jù)

3.drop和create重建表方式重置自增列為0

DROP

TABLE

table_name;

CREATE

TABLE

table_name

{

...

};

一文讓你徹底弄懂MySQL自增列

MYSQL的自增列在實(shí)際生產(chǎn)中應(yīng)用的非常廣泛,相信各位所在的公司or團(tuán)隊(duì),MYSQL開發(fā)規(guī)范中一定會有要求盡量使用自增列去充當(dāng)表的主鍵,為什么DBA會有這樣的要求,各位在使用MYSQL自增列時遇到過哪些問題?這些問題是由什么原因造成的呢?本文由淺入深,帶領(lǐng)大家徹底弄懂MYSQL的自增機(jī)制。

1.? 通過auto_increment關(guān)鍵字來指定自增的列,并指定自增列的初始值為1。

[root@localhost][test1]Create table t(id int auto_increment ,namevarchar(10),primary key(id))auto_increment=1;

QueryOK, 0 rows affected (0.63 sec)

2.? 自增列上必須有索引,將t表的主鍵索引刪除掉,會報(bào)錯

[root@localhost][test1]alter table t drop primary key;

ERROR1075 (42000): Incorrect table definition; there can be only one auto column andit must be defined as a key

3.? 設(shè)定auto_increment_increment參數(shù),可以調(diào)整自增步長,該參數(shù)有session級跟global級,在分庫分表以及雙主or多主的模式下比較有用。

4.? 一個表上只能有一個自增列

5.? Mysql5.7及以下版本,innodb表的自增值保存在內(nèi)存中,重啟后表的自增值會設(shè)為max(id)+1,而myisam引擎的自增值是保存在文件中,重啟不會丟失。Mysql8.0開始,innodb的自增id能持久化了,重啟mysql,自增ID不會丟。

首先:表中自增列的上限是根據(jù)自增列的字段類型來定的。

若設(shè)定了自增id充當(dāng)主鍵,當(dāng)達(dá)到了自增id的上限值時,會發(fā)生什么樣的事情呢?還是以上面創(chuàng)建的 t表為例, 先回顧它的表結(jié)構(gòu):

CREATETABLE `t` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(10) COLLATE utf8mb4_binDEFAULT NULL,

PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

無符號的int類型,上限是2147483647。這里我們將表的自增值設(shè)為2147483647,再插入兩行數(shù)據(jù):

[root@localhost][test1]alter table t auto_increment=2147483647;

QueryOK, 0 rows affected (0.01 sec)

Records:0? Duplicates: 0? Warnings: 0

[root@localhost][test1]insert into t(name) values ('test');??????????

QueryOK, 1 row affected (0.01 sec)

[root@localhost][test1]insert into t(name) values ('test');

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

可以看到,第一個插入沒問題,因?yàn)樽栽隽械闹禐?147483647,這是達(dá)到了上限,還沒有超過,第二行數(shù)據(jù)插入時,則報(bào)出主鍵重復(fù),在達(dá)到上限后,無法再分配新的更大的自增值,也沒有從1開始從頭分配,在這里表的auto_increment值會一直是2147483647。

對于寫入量大,且經(jīng)常刪除數(shù)據(jù)的表,自增id設(shè)為int類型還是偏小的,所以我們?yōu)榱吮苊獬霈F(xiàn)自增id漲滿的情況,這邊統(tǒng)一建議自增id的類型設(shè)為unsigned bingint,這樣基本可以保障表的自增id是永遠(yuǎn)夠用的。

這里內(nèi)容比較多,innodb是索引組織表,所以涉及到索引的知識,但這不是本文的重點(diǎn),我們快速回顧索引知識:

1.? Innodb索引分為主鍵跟輔助索引,主鍵即全表,輔助索引葉子節(jié)點(diǎn)保存主鍵的值,而主鍵的葉子節(jié)點(diǎn)保存數(shù)據(jù)行,中間節(jié)點(diǎn)存著葉子節(jié)點(diǎn)的路由值。

2.? Innodb存儲數(shù)據(jù)(索引)的單位是頁,這里默認(rèn)是16K,這也意味著,數(shù)據(jù)本身越小,一個頁中能存數(shù)據(jù)的量越多,而檢索效率不僅僅由索引的層數(shù)來決定,更是由一次能夠緩存的數(shù)據(jù)量來定,也就是說數(shù)據(jù)本身越小,則一次IO能夠提取到緩沖區(qū)的數(shù)據(jù)越多(OS每次IO的量是固定的4K),查詢的效率越好。

其實(shí)能夠理解索引的結(jié)構(gòu)及索引寫入插入、更新的原理,則自然就明白為何建議使用自增id。這里我直接列出使用自增id 當(dāng)主鍵的好處吧:

1.? 順序?qū)懭耄苊饬巳~的分裂,數(shù)據(jù)寫入效率好

2.? 縮小了表的體積,特別是相比于UUID當(dāng)主鍵,甚至組合字段當(dāng)主鍵時,效果更明顯

3.? 查詢效率好,原因就是我上面說到索引知識的第二點(diǎn)。

4.? 某些情況下,我們可以利用自增id來統(tǒng)計(jì)大表的大致行數(shù)。

5.? 在數(shù)據(jù)歸檔or垃圾數(shù)據(jù)清理時,也可方便的利用這個id去操作,效率高。

容易出現(xiàn)不連續(xù)的id

有的同志會發(fā)現(xiàn),自己的表中id值存在空洞,如類似于1、2、3、8、9、10這樣,有的適合有想依賴于自增id的連續(xù)性來實(shí)現(xiàn)業(yè)務(wù)邏輯,所以會想方設(shè)法去修改id讓其變的連續(xù),其實(shí),這是沒有必要的,這一塊的業(yè)務(wù)邏輯交由MySQL實(shí)現(xiàn)是很不理智的,表的記錄小還好,要是表的數(shù)據(jù)量很大,修改起來就糟糕了。那么,為什么自增id會容易出現(xiàn)空洞呢?

自增id的修改機(jī)制如下:

在MySQL里面,如果字段id被定義為AUTO_INCREMENT,在插入一行數(shù)據(jù)的時候,自增值的行為如下:

1. 如果插入數(shù)據(jù)時id字段指定為0、null 或未指定值,那么就把這個表當(dāng)前的

AUTO_INCREMENT值填到自增字段;

2. 如果插入數(shù)據(jù)時id字段指定了具體的值,就直接使用語句里指定的值。

根據(jù)要插入的值和當(dāng)前自增值的大小關(guān)系,自增值的變更結(jié)果也會有所不同。假設(shè),某次要插入的值是X,當(dāng)前的自增值是Y。

1. 如果XY,那么這個表的自增值不變;

2. 如果X≥Y,就需要把當(dāng)前自增值修改為 新的自增值 。

新的自增值生成算法是:從auto_increment_offset開始,以auto_increment_increment為步長,持續(xù)疊加,直到找到第一個大于X的值,作為新的自增值。

Insert、update、delete操作會讓id不連續(xù)。

Delete、update:刪除中間數(shù)據(jù),會造成空動,而修改自增id值,也會造成空洞(這個很少)。

Insert:插入報(bào)錯(唯一鍵沖突與事務(wù)回滾),會造成空洞,因?yàn)檫@時候自增id已經(jīng)分配出去了,新的自增值已經(jīng)生成,如下面例子:

[root@localhost][test1] select * fromt;

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

| id | name |

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

|? 1| aaa? |

|? 2| aaa? |

|? 3| aaa? |

|? 4| aaa? |

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

4 rows in set (0.00 sec)

[root@localhost][test1] selectAuto_increment from information_schema.tables where table_name='t';

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

| Auto_increment |

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

|????????????? 5 |

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

1 row in set (0.00 sec)

[root@localhost][test1] begin;

Query OK, 0 rows affected (0.00 sec)

[root@localhost][test1] insert intot(name) values('aaa');

Query OK, 1 row affected (0.00 sec)

[root@localhost][test1] select * fromt;

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

| id | name |

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

|? 1| aaa? |

|? 2| aaa? |

|? 3| aaa? |

|? 4| aaa? |

|? 5| aaa? |

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

5 rows in set (0.00 sec)

[root@localhost][test1] selectAuto_increment from information_schema.tables where table_name='t';

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

| Auto_increment |

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

|????????????? 6 |

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

1 row in set (0.00 sec)

[root@localhost][test1] rollback;

Query OK, 0 rows affected (0.00 sec)

[root@localhost][test1] selectAuto_increment from information_schema.tables where table_name='t';

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

| Auto_increment |

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

|????????????? 6 |

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

1 row in set (0.01 sec)

[root@localhost][test1] select * fromt;

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

| id | name |

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

|? 1| aaa? |

|? 2| aaa? |

|? 3| aaa? |

|? 4| aaa? |

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

4 rows in set (0.00 sec)

可以看到,雖然事務(wù)回滾了,但自增id已經(jīng)回不到從前啦,唯一鍵沖突也是這樣的,這里就不做測試了。

在批量插入時(insert select等),也存在空洞的問題。看下面實(shí)驗(yàn):

[root@localhost][test1] select * fromt;

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

| id | name |

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

|? 1| aaa? |

|? 2| aaa? |

|? 3| aaa? |

|? 4| aaa? |

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

4 rows in set (0.00 sec)

[root@localhost][test1] selectAuto_increment from information_schema.tables where table_name='t';

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

| Auto_increment |

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

|????????????? 5 |

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

1 row in set (0.00 sec)

[root@localhost][test1] insert intot(name) select name from t;??????????????????????

Query OK, 4 rows affected (0.04 sec)

Records: 4?Duplicates: 0? Warnings: 0

[root@localhost][test1] select * fromt;

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

| id | name |

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

|? 1| aaa? |

|? 2| aaa? |

|? 3| aaa? |

|? 4| aaa? |

|? 5| aaa? |

|? 6| aaa? |

|? 7| aaa? |

|? 8| aaa? |

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

8 rows in set (0.00 sec)

[root@localhost][test1] selectAuto_increment from information_schema.tables where table_name='t';

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

| Auto_increment |

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

|???????????? 12 |

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

1 row in set (0.00 sec)

可以看到,批量插入,導(dǎo)致下一個id值不為9了,再插入數(shù)據(jù),即產(chǎn)生了空洞,這里是由mysql申請自增值的機(jī)制所造成的,MySQL在批量插入時,若一個值申請一個id,效率太慢,影響了批量插入的速度,故mysql采用下面的策略批量申請id。

1.? 語句執(zhí)行過程中,第一次申請自增id,會分配1個;

2.? 1個用完以后,這個語句第二次申請自增id,會分配2個;

3.? 2個用完以后,還是這個語句,第三次申請自增id,會分配4個;

4.? 依此類推,同一個語句去申請自增id,每次申請到的自增id個數(shù)都是上一次的兩倍。

在對自增列進(jìn)行操作時,存在著自增鎖,mysql的innodb_autoinc_lock_mode參數(shù)控制著自增鎖的上鎖機(jī)制。該參數(shù)有0、1、2三種模式:

0:語句執(zhí)行結(jié)束后釋放自增鎖,MySQL5.0時采用這種模式,并發(fā)度較低。

1:mysql的默認(rèn)設(shè)置。普通的insert語句申請后立馬釋放,insert select、replace insert、load data等批量插入語句要等語句執(zhí)行結(jié)束后才釋放,并發(fā)讀得到提升

2:所有的語句都是申請后立馬釋放,并發(fā)度大大提升!但是在binlog為statement格式時,主從數(shù)據(jù)會發(fā)生不一致。這一塊網(wǎng)上有很多介紹,我不做介紹了。

在徹底了解了MYSQL的自增機(jī)制以后,在實(shí)際生產(chǎn)中就能靈活避坑,這里建議不要用自增id值去當(dāng)表的行數(shù),當(dāng)需要對大表準(zhǔn)確統(tǒng)計(jì)行數(shù)時,可以去count(*)從庫,如果業(yè)務(wù)很依賴大表的準(zhǔn)確行數(shù),直接弄個中間表來統(tǒng)計(jì),或者考慮要不要用mysql的innodb來存儲數(shù)據(jù),這個是需要自己去權(quán)衡。另外對于要求很高的寫入性能,但寫入量又比較大的業(yè)務(wù),自增id的使用依然存在熱點(diǎn)寫入的問題,存在性能瓶頸,這時候可通過分庫分表來解決。

文章名稱:mysql怎么把自增清楚,mysql的自增
本文來源:http://chinadenli.net/article22/hedpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站網(wǎng)站策劃營銷型網(wǎng)站建設(shè)網(wǎng)站改版電子商務(wù)微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)