【mysql、sql server】分布式全局唯一ID生成方案

参考:分布式全局唯一ID生成方案:https://blog.csdn.net/linzhiqiang0316/article/details/80425437

 分表生成唯一ID方案

 sql server:

-- 构造中间表,SYS_USERS_GOODS_IDENTITY(itemId bigint identity(1,1),now_date datetime) 
1.@@identity
2.SCOPE_IDENTITY()
案例代码:

INSERT
INTO SYS_USERS_GOODS_IDENTITY SELECT GETDATE() SELECT @ItemID=@@identity
当运行完插入语句后,执行select
@@identity就可得到自动生成的id
如果是sql server 最好用:
select SCOPE_IDENTITY() as id 因为@@identity全局的 同类还有IDENT_CURRENT(‘table’) IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值 SCOPE_IDENTITY@@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

mysql:

1. select @@identity;
2. select last_insert_id();

多人同时写的话,不会相互影响。LAST_INSERT_ID();  是 connection 级的变量,各个不同连接相互之间不影响

其实不加事务也可以。
案例:
start transaction;
insert into login_log_tb(server_name) values ('服务器');
select LAST_INSERT_ID(); 
commit;

猜你喜欢

转载自www.cnblogs.com/gered/p/10899143.html