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