《MysqL教程MysqL唯一值创建代码》要点:
本文介绍了MysqL教程MysqL唯一值创建代码,希望对您有用。如果有疑问,可以联系我们。
介绍几种唯一值的获取或者生产办法:MysqL实例
先建一个测试用的表tbl_user,此中ID为主键.
MysqL实例
2: create table
3: `tbl_user` (
4: `ID` int(10),
5: `name` varchar(20),
6: `Age` int(10),
7: PRIMARY KEY (`ID`)
8: )DEFAulT CHARSET=utf8 ColLATE=utf8_unicode_ci;
插入几条数据
MysqL实例
2: insert into tbl_user values (1001,"小狗",22);
3: insert into tbl_user values (1002,"小刺猬",22);
4:
5: select * from tbl_user;
查询结果:
1.由应用程序根据一定算法生成唯一值:一般采用”MD5(时间戳+随机数)“或者其他的UUID算法,基本也比较好实现.
如果遇到多机器上分布的程序拜访统一数据库的表,可以把Ip、网卡号等信息考进来就可以解决了(当然可以不是简单的拼接,可以根据需要去合适的位数经过一定的算法去获取).
2.先查询表中最大的值select max(ID),再加1后作为新的值.
MysqL实例 1: select max(ID) from tbl_user;
2: 查询到的最年夜ID为 1002
3:
4: 之后插入 1003
5:
6: insert into tbl_user values (1003,"小熊",22);
7:
此时表中数据为
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实例
值是1004,
验证: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;获得的所有记录为
内存溢出PHP培训学院每天发布《MysqL教程MysqL唯一值创建代码》等实战技能,PHP、MysqL、liNUX、APP、Js,CSS全面培养人才。
总结以上是内存溢出为你收集整理的MYSQL教程mysql唯一值创建代码全部内容,希望文章能够帮你解决MYSQL教程mysql唯一值创建代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)