設(shè)置自增列
在筠連等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),筠連網(wǎng)站建設(shè)費(fèi)用合理。
MYSQL的自增列一定要是有索引的列,設(shè)置種子值要在表的后面設(shè)置
--mysql
-- 設(shè)置自增ID從N開(kāi)始
CREATE TABLE empautoinc(
ID INT PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT = 100 ; --(設(shè)置自增ID從100開(kāi)始)
insert into empautoinc(id) values(null);
Query OK, 1 row affected (0.00 sec)
mysql select * from empautoinc;
+-----+
| ID |
+-----+
| 100 |
+-----+
1 row in set (0.00 sec)
show table status like 'empautoinc'G;
*************************** 1. row ***************************
Name: empautoinc
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 1
Avg_row_length: 16384
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 101
Create_time: 2016-10-27 01:50:32
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
設(shè)置自增列的步長(zhǎng),可以分為全局級(jí)別和會(huì)話級(jí)別
如果是會(huì)話級(jí)別,那么當(dāng)用戶新建一個(gè)會(huì)話的時(shí)候,那么步長(zhǎng)又回到了全局級(jí)別,所以mysql的步長(zhǎng)跟sqlserver的步長(zhǎng)有很大的不同
mysql不能設(shè)置為 表級(jí)別 的步長(zhǎng)
私信666領(lǐng)取資料
兩種方法修改或者重置mysql中的自增字段的值:autoIncrement;
其中方法二可以修改成任意值。
使用函數(shù)創(chuàng)建自增序列管理表(批量使用自增表,設(shè)置初始值,自增幅度)
create table cdat
(
localt char(20) not null,
cd char(5) not null,
snosat char(2) not null,
rnorec char(3) not null,
id INT(20) not null AUTO_INCREMENT,
primary key (id)
);
MySQL是一個(gè)開(kāi)放源碼的小型關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQL AB公司。目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。
系統(tǒng)特性
1.使用C和C++編寫,并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移植性
2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng)
3.為多種編程語(yǔ)言提供了API。這些編程語(yǔ)言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
4.支持多線程,充分利用CPU資源
5.優(yōu)化的SQL查詢算法,有效地提高查詢速度
6.既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫(kù)而嵌入到其他的軟件中。
7.提供多語(yǔ)言支持,常見(jiàn)的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。
8.提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫(kù)連接途徑。
9.提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫(kù)操作的管理工具。
10.支持大型的數(shù)據(jù)庫(kù)。可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)。
11.支持多種存儲(chǔ)引擎。
索引功能
索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針。索引不是萬(wàn)能的,索引可以加快數(shù)據(jù)檢索操作,但會(huì)使數(shù)據(jù)修改操作變慢。每修改數(shù)據(jù)記錄,索引就必須刷新一次。為了在某種程序上彌補(bǔ)這一缺陷,許多SQL命令都有一個(gè)DELAY_KEY_WRITE項(xiàng)。這個(gè)選項(xiàng)的作用是暫時(shí)制止MySQL在該命令每插入一條新記錄和每修改一條現(xiàn)有之后立刻對(duì)索引進(jìn)行刷新,對(duì)索引的刷新將等到全部記錄插入/修改完畢之后再進(jìn)行。在需要把許多新記錄插入某個(gè)數(shù)據(jù)表的場(chǎng)合,DELAY_KEY_WRITE選項(xiàng)的作用將非常明顯。另外,索引還會(huì)在硬盤上占用相當(dāng)大的空間。因此應(yīng)該只為最經(jīng)常查詢和最經(jīng)常排序的數(shù)據(jù)列建立索引。注意,如果某個(gè)數(shù)據(jù)列包含許多重復(fù)的內(nèi)容,為它建立索引就沒(méi)有太大的實(shí)際效果。從理論上講,完全可以為數(shù)據(jù)表里的每個(gè)字段分別建一個(gè)索引,但MySQL把同一個(gè)數(shù)據(jù)表里的索引總數(shù)限制為16個(gè)。
1.InnoDB數(shù)據(jù)表的索引
與InnoDB數(shù)據(jù)表相比,在InnoDB數(shù)據(jù)表上,索引對(duì)InnoDB數(shù)據(jù)表的重要性要大得多。在InnoDB數(shù)據(jù)表上,索引不僅會(huì)在搜索數(shù)據(jù)記錄時(shí)發(fā)揮作用,還是數(shù)據(jù)行級(jí)鎖定機(jī)制的苊、基礎(chǔ)?!皵?shù)據(jù)行級(jí)鎖定”的意思是指在事務(wù)操作的執(zhí)行過(guò)程中鎖定正在被處理的個(gè)別記錄,不讓其他用戶進(jìn)行訪問(wèn)。這種鎖定將影響到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。出于效率方面的考慮,InnoDB數(shù)據(jù)表的數(shù)據(jù)行級(jí)鎖定實(shí)際發(fā)生在它們的索引上,而不是數(shù)據(jù)表自身上。顯然,數(shù)據(jù)行級(jí)鎖定機(jī)制只有在有關(guān)的數(shù)據(jù)表有一個(gè)合適的索引可供鎖定的時(shí)候才能發(fā)揮效力。
2.限制
如果WHERE子句的查詢條件里有不等號(hào)(WHEREcoloum!=),MySQL將無(wú)法使用索引。類似地,如果WHERE子句的查詢條件里使用了函數(shù)(WHEREDAY(column)=),MySQL也將無(wú)法使用索引。在JOIN操作中(需要從多個(gè)數(shù)據(jù)表提取數(shù)據(jù)時(shí)),MySQL只有在主鍵和外鍵的數(shù)據(jù)類型相同時(shí)才能使用索引。
如果WHERE子句的查詢條件里使用比較操作符LIKE和REGEXP,MySQL只有在搜索模板的第一個(gè)字符不是通配符的情況下才能使用索引。比如說(shuō),如果查詢條件是LIKE'abc%‘,MySQL將使用索引;如果查詢條件是LIKE'%abc’,MySQL將不使用索引。
在ORDERBY操作中,MySQL只有在排序條件不是一個(gè)查詢條件表達(dá)式的情況下才使用索引。(雖然如此,在涉及多個(gè)數(shù)據(jù)表查詢里,即使有索引可用,那些索引在加快ORDERBY方面也沒(méi)什么作用)。如果某個(gè)數(shù)據(jù)列里包含許多重復(fù)的值,就算為它建立了索引也不會(huì)有很好的效果。比如說(shuō),如果某個(gè)數(shù)據(jù)列里包含的凈是些諸如“0/1”或“Y/N”等值,就沒(méi)有必要為它創(chuàng)建一個(gè)索引。
1、創(chuàng)建表時(shí)指定AUTO_INCREMENT自增值的初始值(即起始值):
CREATE TABLE XXX (ID INT(5) PRIMARY KEY AUTO_INCREMENT) AUTO_INCREMENT=100;
2、通過(guò) ALTER TABLE 修改初始值(但是要大于表中的 AUTO_INCREMENT 自增值,否則設(shè)置無(wú)效):
ALTER TABLE XXX AUTO_INCREMENT=100;
3、如果自增序列的最大值被刪除了,則在插入新記錄時(shí),該值被重用:
就是說(shuō)如果表中原本有AUTO_INCREMENT屬性值連續(xù)為78、100的值,但100這個(gè)數(shù)據(jù)被刪除了,下此再添加數(shù)據(jù)的時(shí)候自增值為101,100被重用了。
即使在你將整個(gè)表中的所有數(shù)據(jù)delete清空后,之前的自增序列最大值還是會(huì)被重用。
解決辦法是:
使用 ALTER TABLE XXX AUTO_INCREMENT=0; 重新設(shè)置自增初始值。
alter table questionlib modify id?int(11) auto_increment;
注意事項(xiàng):
修改后從下一條記錄開(kāi)始自動(dòng)增長(zhǎng)。如果想讓原來(lái)的自動(dòng)增長(zhǎng)就得復(fù)制現(xiàn)有表的結(jié)構(gòu)(無(wú)id),添加id并加上AUTO_INCREMENT,然后通過(guò)循環(huán),添加n條空記錄,然后對(duì)應(yīng)先前表的id,依次插入數(shù)據(jù)。
擴(kuò)展資料:
mysql自動(dòng)增長(zhǎng)開(kāi)始值設(shè)置總結(jié)
1、創(chuàng)建表,設(shè)置表主鍵id自動(dòng)增長(zhǎng),默認(rèn)自動(dòng)增長(zhǎng)的起始值為1開(kāi)始。
2、當(dāng)表數(shù)據(jù)不為空的時(shí)候,重新去修改自動(dòng)增長(zhǎng)id開(kāi)始值,mysql會(huì)主動(dòng)去核對(duì)你設(shè)置的起始值是否是當(dāng)前數(shù)據(jù)庫(kù)已有id的最大值+1; 若是則修改成功,若不是則修改不成功 (默認(rèn)還是id最大值+1)
3、要設(shè)置自動(dòng)增長(zhǎng)為1開(kāi)始,需要清空表數(shù)據(jù)才行。alter table table_name AUTO_INCREMENT=1
4、若每次直接在數(shù)據(jù)庫(kù)里面插入數(shù)據(jù),則會(huì)自動(dòng)的去修改當(dāng)前表的自動(dòng)增長(zhǎng)起始值(設(shè)置自動(dòng)增長(zhǎng)起始值為當(dāng)前插入成功的數(shù)據(jù)的id)