- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一家为我的 MySql 数据库提供服务的托管公司的用户。由于它们的复制问题,自动增量值增加了 10,这似乎是一个常见问题。
我的问题是如何模拟(安全地)自动增量功能以便该列具有连续的 ID?
我的想法是实现一些序列机制来解决我的问题,但我不知道这是否是最佳选择。我在网上找到了这样的代码片段:
DELIMITER ;;
DROP TABLE IF EXISTS `sequence`;;
CREATE TABLE `sequence` (
`name` CHAR(16) NOT NULL,
`value` BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;;
DROP FUNCTION IF EXISTS `nextval`;
CREATE FUNCTION `nextval`(thename CHAR(16) CHARSET latin1)
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
INSERT INTO `sequence`
SET `name`=thename,
`value`=(@val:=@@auto_increment_offset)+@@auto_increment_increment
ON DUPLICATE KEY
UPDATE `value`=(@val:=`value`)+@@auto_increment_increment;
RETURN @val;
END ;;
DELIMITER ;
这似乎完全正确。我的第二个问题是这个解决方案是否是并发安全的? INSERT语句当然是,但是ON DUPLICATE KEY更新呢?
谢谢!
最佳答案
为什么首先需要它?
即使 auto_increment_increment
== 1 也不能保证表中的自动增量字段将具有连续值(如果行被删除怎么办,嗯?)。
使用自动增量,数据库引擎可以简单地保证该字段是唯一的,没有别的,真的。
编辑:我想重申:在我看来,假设自动增量列的并发值之类的东西不是是个好主意,因为它是以后咬你。
EDIT2:无论如何,这可以通过“插入”触发器“解决”
create trigger "sequence_b_ins" before insert on `sequence`
for each row
begin
NEW.id = select max(id)+1 from `sequence`;
end
或者类似的东西(抱歉,没有测试过)
关于MySql自增列增加10的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716515/
1、修改数据 复制代码代码如下: DataRow dr =
数据库操纵基本流程为: 1、连接数据库服务器 2、选择数据库 3、执行SQL语句 4、处理结果集 5、打印操作信息 其中用到的相关函数有 •resource m
CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影。如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了
项目结构: 添加页面: &
本文实例讲述了android操作sqlite数据库(增、删、改、查、分页等)及listview显示数据的方法。分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识
我是一名优秀的程序员,十分优秀!