9159金沙游艺场-奥门金沙游艺场-[欢迎您]

9159金沙游艺场为您呈现最新的面貌!,目前注册送体验金,欢迎您将成为影视娱乐行业新的风向标,是亚洲的优质娱乐先锋。

据书上说MySql的扩乌索能生成全局ID

日期:2020-04-04编辑作者:办公软件

正文利用 MySQL的扩大功效 REPLACE INTO 来变化全局id,REPLACE INTO和INSERT的功效相似,可是当使用REPLACE INTO插入新数据行时,假诺新插入的行的主键或独一键(UNIQUE Key卡塔尔本来就有个别行重复时,已有个别行会先被剔除,然后再将新数据行插入。

树立相仿下边包车型地铁表:

CREATE TABLE `tickets64` ( `id` bigint(20) unsigned NOT NULL auto_increment, `stub` char(1) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `stub` (`stub`) ) ENGINE=MyISAM; 

当需求取得全局独一ID时,试行上面包车型客车SQL语句:

REPLACE INTO `tickets64` (`stub`) VALUES ('a'); SELECT LAST_INSERT_ID(); 

率先次奉行这些讲话后,ticket64表将包罗以下数据:

+--------+------+ | id | stub | +--------+------+ | 1 | a | +--------+------+

日后重新履行后边的话语,stub字段值为'a'的行已经存在,所以MySQL会先删除这一行,再插入。因而,第叁次施行后,ticket64表依然独有一行数据,只是id字段的值为2。那几个表将平昔独有一行数据。

更棒的法子:

比方,只须求一张ticket表就足认为富有的业务表提供个别三番若干次的ID。上面,来看一下我们的措施。首先来看一下表构造:

CREATE TABLE `sequence` ( `name` varchar(50) NOT NULL, `id` bigint(20) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`name`) ) ENGINE=InnoDB; 

在乎区分,id字段不是自增的,亦非主键。在利用前,大家供给先插入一些初叶化数据:

INSERT INTO `sequence` (`name`) VALUES ('users'), ('photos'), ('albums'), ('comments'); 

接下去,我们得以因此推行上边包车型地铁SQL语句来获得新的肖像ID:

UPDATE `sequence` SET `id` = LAST_INSERT_ID(`id` + 1) WHERE `name` = 'photos'; SELECT LAST_INSERT_ID(); 

咱俩施行了三个立异操作,将id字段扩充1,并将加多后的值传递到LAST_INSERT_ID函数,进而钦命了LAST_INSERT_ID的再次来到值。

实际上,大家不料定须要预先钦赐类别的名字。假若大家前些天亟待一种新的队列,大家能够一向实行上面的SQL语句:

INSERT INTO `sequence` (`name`) VALUES('new_business') ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id` + 1); SELECT LAST_INSERT_ID();

此处,大家运用了INSERT … ON DUPLICATE KEY UPDATE那么些MySQL扩大,这几个增添的法力也和INSERT同样插入一行新的记录,不过当新插入的行的主键或独一键(UNIQUE KeyState of Qatar和本来就有的行重复时,会对本来就有行举行UPDATE操作。

当大家率先次实践下边包车型地铁说话时,因为还尚无name为'new_business'的字段,所以平常的进行了插入操作,需求专心的是由此这种格局获得的系列伊始值为0,并不是1。因为第一回实践时,未有实施UPDATE,所以也不曾为LAST_INSERT_ID传递值,大家也尚未自增字段,所以SELECT LAST_INSERT_ID(卡塔尔国将重回0。然而那几个相应不是什么样大难题。

UPDATE: 那个办法更易于解决单点难题,也不囿于于多个服务器,只要对两样的服务器设置差异的上马值,然后将增量变为服务器数就能够了。

如上内容是依附MySql的扩展作用生成全局ID的相干材质,希望大家开心。

本文由9159金沙游艺场-奥门金沙游艺场-[欢迎您]发布于办公软件,转载请注明出处:据书上说MySql的扩乌索能生成全局ID

关键词:

简单谈谈MySQL的loose9159金沙游艺场

引人注目,InnoDB选取IOT即所谓的目录协会表,而叶子节点也就存放了颇负的数额,这就表示,数据连接依据某种顺序...

详细>>

Join算法小结

不知不觉的玩了两年多的MySQL,发现很多人都说MySQL对比Oracle来说,优化器做的比较差,其实某种程度上来说确实是这...

详细>>

Windows7下如何在命令行使用MySQL

我在Win7下安装的MySQL版本是mysql-5.0.22-win32 1、在Win7环境下安装MySQL,关于安装方法可以参考文章:Win7系统安装MySQL5....

详细>>

Mysql全局ID生成方法【9159金沙游艺场】

生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在...

详细>>