php mysql 唯一值_MYSQL教程mysql唯一值创建代码

《MYSQL教程mysql唯一值创建代码》要点:

本文介绍了MYSQL教程mysql唯一值创建代码,希望对您有用。如果有疑问,可以联系我们。

导读:介绍几种唯一值的获取或者生产办法:先建一个测试用的表tbl_user,有三个字段:Id、Name、Age,其中Id为主键.1: drop table if exists...

介绍几种唯一值的获取或者生产办法:MYSQL实例

先建一个测试用的表tbl_user,有三个字段:Id、Name、Age,此中Id为主键.

MYSQL实例

1:  drop table if exists `tbl_user`;

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实例

1:  insert into tbl_user values (1000,"小猫",22);

2:  insert into tbl_user values (1001,"小狗",22);

3:  insert into tbl_user values (1002,"小刺猬",22);

4:

5:  select * from tbl_user;

查询结果:

2017102023112554956.png 

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:

此时表中数据为

2017102023112512616.pngMYSQL实例

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实例

insert tbl_user set Name='小猴',Age=23;

3.查询刚才的自增Id值

MYSQL实例

select @@IDENTITY;

值是1004,

验证:select * from tbl_user;得到的当前表记录为

2017102023112574537.png

过刚插入的数据“小猴”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;获得的所有记录为

2017102023112643104.pngMYSQL实例

维易PHP培训学院每天发布《MYSQL教程mysql唯一值创建代码》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值