《MYSQL教程mysql唯一值創(chuàng)建代碼》要點(diǎn):
本文介紹了MYSQL教程mysql唯一值創(chuàng)建代碼,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
介紹幾種唯一值的獲取或者生產(chǎn)辦法:MYSQL實(shí)例
先建一個(gè)測試用的表tbl_user,有三個(gè)字段:Id、Name、Age,此中Id為主鍵.
??MYSQL實(shí)例
?
插入幾條數(shù)據(jù)
?MYSQL實(shí)例
查詢結(jié)果:
?
1.由應(yīng)用程序根據(jù)一定算法生成唯一值:一般采用”MD5(時(shí)間戳+隨機(jī)數(shù))“或者其他的UUID算法,基本也比較好實(shí)現(xiàn).
如果遇到多機(jī)器上分布的程序拜訪統(tǒng)一數(shù)據(jù)庫的表,可以把Ip、網(wǎng)卡號(hào)等信息考進(jìn)來就可以解決了(當(dāng)然可以不是簡單的拼接,可以根據(jù)需要去合適的位數(shù)經(jīng)過一定的算法去獲取).
?
2.先查詢表中最大的值select max(id),再加1后作為新的值.
?MYSQL實(shí)例
此時(shí)表中數(shù)據(jù)為MYSQL實(shí)例
3.如果是表級(jí)別的唯一,即在同一個(gè)表中某個(gè)字段唯一,可以把該字段設(shè)置為“自增(AUTO_INCREMENT)”的.這樣你不必費(fèi)心思去生成這個(gè)不能重復(fù)的唯一值了.但是一般應(yīng)用程序是需要這個(gè)唯一值的,這個(gè)時(shí)候你就得在查詢一次去獲取剛才數(shù)據(jù)庫自增生成的Id.好比在用戶登錄的時(shí)候,你要生成一個(gè)登錄會(huì)話Id或者Token,這些程序一般是需要得到這個(gè)值而不是僅僅存在數(shù)據(jù)庫中.生成的值,1.可以一般的select條件查詢,根據(jù)條件查詢剛才插入的數(shù)據(jù).2.直接調(diào)用select @@IDENTITY 就可以得到上一次插入記錄時(shí)自動(dòng)產(chǎn)生的ID(注意是在數(shù)據(jù)庫同一個(gè)連接(會(huì)話)中),用在插入后立即select @@IDENTITY .MYSQL實(shí)例
例子,先將表中的Id字段設(shè)置為自增,再插入一條數(shù)據(jù)(不要插入Id值,讓數(shù)據(jù)庫自增獲得值),select @@IDENTITY查詢,最后驗(yàn)證看看.
?MYSQL實(shí)例
1.#將Id改為自增(auto_increment)
ALTER TABLE tbl_user CHANGE Id Id int not null auto_increment;MYSQL實(shí)例
#或者 先刪除Id字段再添加一個(gè)Id字段
alter table tbl_user auto_increment=1000;
alter table tbl_user drop column Id;
alter table tbl_user add Id int not null auto_increment primary key first;MYSQL實(shí)例
2.插入一條記錄
?MYSQL實(shí)例
3.查詢剛才的自增Id值
?MYSQL實(shí)例
驗(yàn)證:select * from tbl_user;得到的當(dāng)前表記錄為
過剛插入的數(shù)據(jù)“小猴”id為1004,和select @@IDENTITY;成果一樣.MYSQL實(shí)例
4.使用mysql的 UUID()函數(shù).前面的自增字段(auto_increment)只能生成”表內(nèi)”的唯一值,且必要搭配使其為”唯一的主鍵或唯一索引”,它的值是逐步增長的.這里的UUID產(chǎn)生的是字符串類型值,固定長度為:36個(gè)字符.UUID生成的是在時(shí)間、空間上都獨(dú)一無二的值,是“隨機(jī)+規(guī)則”組合而成.MYSQL實(shí)例
select uuid();
select uuid();MYSQL實(shí)例
執(zhí)行兩次,結(jié)果:
69ad8b74-6d47-11e3-ba6e-7446a08ee8ec
69b03c16-6d47-11e3-ba6e-7446a08ee8ec
可以看到,多次調(diào)用UUID()函數(shù)得到的值不相同,它由五部分組成,并且有連字符(-)隔開,一共36個(gè)字符.其中:
前3組值是時(shí)間戳換算過來的,辦理“時(shí)間上唯一”;
第4組值是暫時(shí)性保持時(shí)間戳的唯一性,重啟mysql才會(huì)變動(dòng);
第5組是mac值轉(zhuǎn)過來的,有助于辦理“空間上的唯一”,同一個(gè)機(jī)器多實(shí)例的一般相同.如果mac值獲取不到,則是一個(gè)隨機(jī)值.MYSQL實(shí)例
這些已經(jīng)可以保證獲得的值在時(shí)間和空間上的唯一.當(dāng)然你也可以去掉連字符: select replace(uuid(),'-','').MYSQL實(shí)例
在MySQL 5.1.*及更高版本有一個(gè)變種的UUID()函數(shù),UUID_SHORT(),可以生成一個(gè)17-64位無符號(hào)的整數(shù),注意是生成的一個(gè)整數(shù),而前面UUID()生成的是字符串.MySQL啟動(dòng)后第一次執(zhí)行的值是通過時(shí)間戳等初始化這個(gè)值,在本次運(yùn)行中再次調(diào)用的時(shí)候都加1.這個(gè)值一般比擬大,可以調(diào)用right(UUID_SHORT(),9)取后面的若干位.或者,你還可以寫成自定義函數(shù),來按需生成這個(gè)值.MYSQL實(shí)例
例子:
?MYSQL實(shí)例
#1.調(diào)用uuid_short()函數(shù)
SELECT UUID_SHORT();
SELECT UUID_SHORT();MYSQL實(shí)例
#執(zhí)行兩次獲得的值遞增的:
23285634974089216
23285634974089217MYSQL實(shí)例
#2.創(chuàng)立一個(gè)自定義函數(shù),按需獲取唯一值:
CREATE DEFINER=`root`@`%` FUNCTION `GetUuidTest`(SysId???? int) RETURNS int(10)
begin
??? declare tmpID? int;???????????
??? set tmpID = 0;?????????
??? #SELECT UUID_SHORT() into? tmpID;? #直接取值
???? SELECT concat(SysId,right(UUID_SHORT(),8)) into? tmpID;#SysId和UUID_SHORT()后8位數(shù)拼接得到
???? return? tmpID;
endMYSQL實(shí)例
#3.調(diào)用自定義的函數(shù)GetUuidTest(int)函數(shù):
select GetUuidTest(1);
select GetUuidTest(1);
select GetUuidTest(2);
select GetUuidTest(2);
#得到結(jié)果:
174089233 #1+uuid_short()后8位(74089233)組成
174089234 #1+uuid_short()后8位(74089234)組成
274089235 #2+uuid_short()后8位(74089235)組成
274089236 #3+uuid_short()后8位(74089236)組成
#uuid_short()值遞增,前面在加一個(gè)Id,分歧的服務(wù)器IdSysId分歧.MYSQL實(shí)例
#4.在例子中調(diào)用自定義函數(shù)GetUuidTest(int)? 來插入記錄:這時(shí)不必要把Id設(shè)置為自增了.
insert tbl_user set Id=GetUuidTest(1),Name='小熊貓',Age=22;
insert tbl_user set Id=GetUuidTest(2),Name='小鴨子',Age=21;MYSQL實(shí)例
例子中,select * from tbl_user;獲得的所有記錄為MYSQL實(shí)例
維易PHP培訓(xùn)學(xué)院每天發(fā)布《MYSQL教程mysql唯一值創(chuàng)建代碼》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/11606.html