mysql分库键_分库主键设计-Mysql

常见的两种方案,遍布网络:

第一种:

replace方案,mysql解释:REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。

CREATE TABLE `user_id_seq` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`stub` varchar(3) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `stub` (`stub`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

REPLACE INTO user_id_seq(stub) VALUES ('a');

select last_insert_id();

这种方案一般一个表对应一个类型的主键,简单明了,一个表对应一个业务的seq。但是在高并发的情况下很容易导致mysql死锁。

第二种:

CREATE TABLE `sequence` (

`name` varchar(50) NOT NULL,

`id` bigint(20) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

INSERT INTO `sequence` (`name`) VALUES('users');

update sequence set id=last_insert_id(id+1) where name = 'users';

select last_insert_id();

这种方案可以一个表支持多个业务的seq需求,但是太多的业务对这一个表频繁操作,如果某个业务出现锁表,就会导致其他业务无法进行。

第三种:

如果是java的项目,可以使用spring框架的MySQLMaxValueIncrementer解决,在mysql上实现原理同第二种,只是在业务层加了一段本地缓存,对于seq请求很高的业务可以较好的保障。

以上三种方案的都关系到mysql的last_insert_id()这个功能,其实关键点也就是这个last_insert_id()使我们可以通过mysql实现唯一seq的设计。

mysql中对它的解释:【对于LAST_INSERT_ID(),最近生成的ID是在服务器上按连接维护的。它不会被另一个客户端改变。即使用non-magic值(即非Null非0值)更新了另一个AUTO_INCREMENT列,也不会更改它。】

mysql如何获得上次插入行的唯一ID

http://dev.mysql.com/doc/refman/5.1/zh/apis.html#getting-unique-id

这样不管我们如何设计,只要保证select last_insert_id();之前的操作是一个连接完成的原子操作,我们就能从返回值中得到唯一的last_insert_id。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mycat关特性 关特性 支持SQL92标准 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster 基于Nio实现,有效管理线程,解决高并发问题。 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。 支持多租户方案。 支持分布式事务(弱xa)。 支持XA分布式事务(1.6.5)。 支持全局序列号,解决分布式下的主键生成问题。 分片规则丰富,插件化开发,易于扩展。 强大的web,命令行监控。 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。 支持密码加密 支持服务降级 支持IP白名单 支持SQL黑名单、sql注入攻击拦截 支持prepare预编译指令(1.6) 支持非堆内存(Direct Memory)聚合计算(1.6) 支持PostgreSQL的native协议(1.6) 支持mysql和oracle存储过程,out参数、多结果集返回(1.6) 支持zookeeper协调主从切换、zk序列、配置zk化(1.6) 支持库内分表(1.6) 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值