- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有非自动递增主键的现有模式。该键在十几个其他表中用作外键。
我继承了一个存在重大性能问题的程序。目前,当一个新行被添加到这个表时,这是一个新的唯一 ID 是如何创建的:
1) a query for all existing primary key values is retrieved
2) a random number is generated
3) if the number does not exist in the retrieved values, use it, otherwise goto (2)
该应用程序是多线程和多服务器的,因此在启动时简单地获取现有 ID 不是一种选择。我没有来自发起请求的唯一信息来获取并转换为伪唯一值(如成员(member) ID)。
我知道理论上可以对内部结构进行手术以向现有主键添加自动增量。我知道也可以系统地删除指向该表的所有外键,然后创建-重命名-插入该表的新版本,然后添加回外键,但是这种表格式是由第三方应用程序决定的,如果我把事情搞砸了,那么坏事就会发生。
有没有办法利用 sql/mysql 来提供唯一的行值?
我想到的最接近的方法是从一个大空间中随机选择一个数字,并希望它在数据库中是唯一的,然后在发生奇怪的冲突时重试。
想法?
最佳答案
如果表有一个主键未被用于外键引用,则删除该主键。目标是使您的列成为自动递增的主键。
所以,寻找最大值,然后下面的代码应该做你想做的:
alter table t modify id int not null auto_increment primary key;
alter table t auto_increment = <maximum value> + 1;
我认为没有必要显式设置 auto_increment 值,但我想确定一下。
关于mysql - 没有 auto_increment 的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25902626/
我们有一张 table : id int(11) auto_increment name varchar(255) 自动增量等于 1。插入行: INSERT INTO `projects` ( `id
我有一个大表,其 ID 列设置为 bigint auto_increment。在历史上的某个时候,我们决定在客户端生成一些伪随机数的 ID。 我的问题很简单:鉴于表列仍设置为 auto_increme
我有一个 MySQL 数据库,包含一个带有 auto_increment 主键的表。 考虑以下定义足以满足此示例: create table test(id integer not null auto
我只是想知道如果两个用户同时注册帐户会发生什么。AUTO_INCRMENT id 号是相同还是不同? 最佳答案 自增锁定 自动增量主键的便利性需要与并发进行一些权衡。在最简单的情况下,如果一个事务正在
用于与 MySQL++(C++ 库)一起工作 数据库有一些字段,您可以对其进行 AUTO_INCREMENT。如何知道向表中插入新行时这些字段的值是多少? 最佳答案 虽然 stacker 的答案会起作
我有一个sqlite表: 例如 CREATE TABLE TEST (id integer primary key, number integer unique, name text); 但是,我需要
是否有一种标准化的方法可以在 SQL 中创建一个带有自动增量列(我们称之为 ID)的表,以便我基本上可以在所有数据库中使用它? (例如在 SQL-92 中标准化) 如果是这样 - 如何?如果不是,为什
在 MySQL 表中,id 列设置为 auto_increment,下一个 auto_increment 在 phpmyadmin 中设置为 128,但添加的任何新行都将 127 作为 id 行中的值
我的问题是:我有一个包含 auto_increment 列的表。当我插入一些值时,一切正常。插入第一行:ID 1插入第二行:ID 2 现在我想在 ID 10 处插入一行。 我的问题是,在此之后只有 I
您好,我知道这个问题以前有人问过,但我问的不同,我想要的是在删除表中的一行后重置 auto_increment 列。如果我有 51 行的表并且我删除了第 48 行,我希望第 49 行重置为 48,50
我正在尝试将 AUTO_INCREMENT 设置为某个值,但我遇到了语法错误。我不确定它是什么,因为我查看了文档并且看起来没问题。但是肯定有错误。 编辑 - 抱歉,我正在使用 mysql phpmya
在我的程序中,我将记录插入表tbl_name。但是我收到了“主键重复条目”错误,这让我很困惑,这是我的代码和错误。 表: CREATE TABLE `tbl_name` ( `id` int(20)
我使用 MySQL 的 AUTO_INCRMENT 字段和 InnoDB 来支持事务。我注意到当我回滚事务时,AUTO_INCRMENT 字段没有回滚?我发现它是这样设计的,但是有什么解决方法吗? 最
我使用 MySQL 的 AUTO_INCRMENT 字段和 InnoDB 来支持事务。我注意到当我回滚事务时,AUTO_INCRMENT 字段没有回滚?我发现它是这样设计的,但是有什么解决方法吗? 最
我需要一些有关 MySQL 的帮助。我的 news 表上有 id 列,并且通常为第一个新闻分配 id=1,id= 2 第二个等等。但我希望它以 001 而不是 1 开头,然后是 002, 003 等等
我需要创建一个带有自动递增主键的表,所以我这样做: String sql = "CREATE TABLE Home" + "(id INTEGER not
user 表在 user_id 上定义时未使用 AUTO_INCRMENT。我想将其更改为 AUTO_INCRMENT 字段。但问题是 user_id 被外键约束中的许多表引用。 我们可以在不删除所有
我正在使用 MySQL 进行数据库项目,并且我的一个表使用组合键作为 PK,entry_ID+user_ID(FK)。 这是表结构: | address_list | CREATE TABLE `ad
我有一些使用带有自动增量功能的主键的MySQL表,这一切似乎都是在第一次插入记录时发生的,但是当我删除中间的任何记录时,它不会重置自动增量计数器,而是继续使用最后一个ID . 例如,我已插入具有以下
我有如下表格 个人信息 CREATE TABLE personalInfo(userid BIGINT AUTO_INCREMENT PRIMARY KEY) 专利信息 CREATE TABLE pa
我是一名优秀的程序员,十分优秀!