天道酬勤,学无止境

Alfresco 中的自动递增(唯一)ID(Auto-Incrementing (Unique) ID in Alfresco)

问题

我正在尝试通过运行脚本来扩展 alfresco 的文档管理。 到目前为止,我已经设法创建了一个具有自定义类型和属性的自定义模型,如下所示:

所述自定义类型在此自定义模型下(暂不考虑自定义方面)

到目前为止,自定义类型正在工作,我设法将其应用于某个文档,如下所示(注意控制代码字段)

现在我想要做的是添加一个自动递增函数,该函数将被设置为控制代码属性的值(即:[FILE0012])

我尝试使用来自 alfresco 的脚本规则,但这些命令似乎仅限于 alfresco 的功能。 甚至alert()console.log函数都不起作用。 我想,如果我可以制作一个脚本来调用 ajax 到我的 php 服务器,我可以提取文档的属性,并将其插入我的数据库并获取 rowid,然后将其附加到单词“FILE”上,使其成为控件代码属性(即:一个文档被插入到我的数据库的第 1996 行,然后控制代码是 [FILE1996],这是因为我加入了 '[FILE' and 1996 and ']'

但就像我说的,发生的事情是,javascript 命令仅限于 alfresco 的需求。

我试图进行研究,但我只遇到了 2 个过时的(我的意思是过时的)线程,这些线程可以追溯到 2006-2010 年。 这对 Alfresco 当前的构建结构并不能很好地帮助我。

我希望有人能在这里帮助我。 连接到数据库不是强制性的,但如果我能做到这一点,那么它会给我一个相当惊人的结果。

回答1

看看“cm:countable”方面。 您没有唯一性保证 OOTB,因此请考虑到这一点。

示例:http://www.avantec.se/howto-create-an-auto-increment-field-on-an-object-in-alfresco/

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 将 SQLAlchemy ORM 用于非主键、唯一、自动递增的 id(Using SQLAlchemy ORM for a non-primary key, unique, auto-incrementing id)
    问题 当我运行以下代码时,我希望 first_name 和 last_name 是一个复合主键,而 id 是该行的自动递增索引,但不充当主键,因为其余的信息表是我需要定义它的唯一性,而不是给定的 ID。 Base = declarative_base() Session = sessionmaker(bind=db) session = Session() class Person(Base): __tablename__ = "people" id = Column(Integer, index=True, unique=True, autoincrement=True, primary_key=False) first_name = Column(String(30), primary_key=True) last_name = Column(String(30), primary_key=True) if __name__ == "__main__": Base.metadata.create_all(db) session.add_all([ Person(first_name="Winston", last_name="Moy"), Person(first_name="Bill", last_name="Gates"), Person(first_name="Steve
  • 当其他唯一字段存在时,为什么要使用自动递增的主键?(Why use an auto-incrementing primary key when other unique fields exist?)
    问题 我正在学习一门名为“数据库系统”的课程,对于我们的班级项目,我必须设计一个网站。 这是我创建的表的示例: CREATE TABLE users ( uid INT NOT NULL AUTO_INCREMENT, username VARCHAR(60), passhash VARCHAR(255), email VARCHAR(60), rdate DATE, PRIMARY KEY(uid) ); 教授告诉我“uid”(用户 ID)完全没有用和不必要,我应该使用用户名作为主键,因为没有两个用户可以使用相同的用户名。 我告诉他使用用户 ID 对我来说很方便,因为当我调用 domain.com/viewuser?id=5 之类的东西时,我只是检查参数: is_numeric($_GET['id']) ...不用说他不相信。 由于我在大量教程中看到了 user_id 和其他类似属性(thread_id、comment_id 等),并且查看了流行软件(例如 vbulletin)的数据库架构,因此肯定有很多其他(更强大的)原因。 所以我的问题是:你如何证明需要一个非空的自动递增 id 作为主键与使用另一个属性(如用户名)? 回答1 由于以下几个原因,自动递增主键很有用: 它们允许在 Stack Overflow 上使用重复的用户名它们允许更改用户名(或电子邮件地址,如果用于登录)
  • Auto-Incrementing (Unique) ID in Alfresco
    i am trying to extend alfresco's document management by running a script. So far, i have managed to create a Custom Model with a Custom Type and Property as seen below: the said Custom Type is under this Custom Model (never mind the Custom Aspect for now) the custom type is working so far, i managed to apply it to a certain document as you can see below (Notice the Control Code Field) now what i want to do is to add an auto incrementing function that will be set as the value of the Control Code Property (ie: [FILE0012]) i tried utilizing the scripts rule from alfresco but it seems like the
  • 不为主键使用自动递增数字的原因(Reasons not to use an auto-incrementing number for a primary key)
    问题 我目前正在处理其他人的数据库,其中主键是通过查找表生成的,该表包含表名列表和最后使用的主键。 存储过程会增加此值并在将其返回给调用“插入”SP 之前检查它是否唯一。 使用这样的方法(或仅生成 GUID)而不是仅使用身份/自动编号有什么好处? 我不是在谈论实际上“意味着”诸如 ISBN 或产品代码之类的主键,只是唯一标识符。 谢谢。 回答1 在您使用复制的情况下,自动生成的 ID 可能会导致问题(因为我确信您发现的技术可以!)。 在这些情况下,我通常选择 GUID。 如果您不太可能使用复制,那么自动递增的 PK 很可能会很好地工作。 回答2 使用 AutoNumber 本身并没有什么问题,但有几个理由不这样做。 尽管如此,正如 dacracot 提到的那样,推出自己的解决方案并不是最好的主意。 让我解释。 不在每个表上使用 AutoNumber 的第一个原因是您最终可能会合并多个表中的记录。 假设您有一个 Sales Order 表和一些其他类型的订单表,并且您决定提取一些公共数据并使用多表继承。 拥有全局唯一的主键很好。 这类似于 bobwienholt 所说的合并数据库,但它可以发生在数据库中。 其次,其他数据库不使用这种范式,其他范式如 Oracle 的序列要好得多。 幸运的是,可以使用 SQL Server 模拟 Oracle 序列。
  • 如何在重复密钥更新时禁用自动递增 ID?(How can I disable an auto-incrementing ID from updating on duplicate key update?)
    问题 我认为这很容易解决,但我遇到了麻烦。 我正在将记录插入具有自动递增 ID 的表中。 在重复密钥更新时,我希望自动递增的 ID 保持不变(不更新)。 例如,假设我有下表: +-------------+-----------+------+ | ID | Fruit | Color| +-------------+-----------+------+ | 1 | Apple | Red | | 2 | Apple | Green| +-------------+-----------+------+ 然后我运行: INSERT INTO table (Fruit, Color) VALUES( Apple, Red) 由于我的唯一键是 (Fruit, Color)(ID 也是一个单独的键),我希望 ID 列在我的表更新时保持原样(ID=1); 但是,当我插入上面的值时,ID 会自动增加到 3。 有人可以提供一个 ON DUPLICATE KEY UPDATE 语句来防止 ID 值在更新时增加吗? INSERT INTO table (Fruit, Color) VALUES( Apple, Red) ON DUPLICATE KEY UPDATE ( {statement here}) 回答1 必须将主键设为 ID 列,然后将 (Fruit, Color) 设置为唯一键。
  • 如何在R中生成自动递增ID(How to generate auto-incrementing ID in R)
    问题 我正在寻找一种有效的方法来为正在生成的某些合成数据创建唯一的数字ID。 现在,我只是有一个函数,该函数从全局变量发出并递增一个值(请参见下面的演示代码)。 但是,这很麻烦,因为我必须初始化idCounter变量,并且如果可能的话,我宁愿不使用全局变量。 # Emit SSN idCounter = 0 emitID = function(){ # Turn into a formatted string id = formatC(idCounter,width=9,flag=0,format="d") # Increment id counter idCounter <<- idCounter+1 return(id) } record$id = emitID() uuid软件包提供的功能接近我想要的功能,但是我需要ID仅是整数。 有什么建议么? 也许是一种将UUID值转换为某种数字值的方法吗? 显然会发生一些冲突,但这可能没问题。 我认为,至多,我需要10亿个值。 感谢您的任何建议! -抢 回答1 非全局版本的计数器使用词法作用域来通过增量函数封装idCounter emitID <- local({ idCounter <- -1L function(){ idCounter <<- idCounter + 1L # increment formatC(idCounter
  • 如何在PostgreSQL中向现有表添加自动递增的主键?(How to add an auto-incrementing primary key to an existing table, in PostgreSQL?)
    问题 我有一个包含现有数据的表。 有没有一种方法可以添加主键而不删除并重新创建表? 回答1 (已更新-感谢发表评论的人) PostgreSQL的现代版本 假设您有一个名为test1的表,您想在该表中添加一个自动递增的主键id (代理)列。 在最新版本的PostgreSQL中,以下命令应该足够了: ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY; 旧版本的PostgreSQL 在旧版本的PostgreSQL(8.x之前的版本?)中,您必须完成所有肮脏的工作。 以下命令序列可以解决问题: ALTER TABLE test1 ADD COLUMN id INTEGER; CREATE SEQUENCE test_id_seq OWNED BY test1.id; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'); UPDATE test1 SET id = nextval('test_id_seq'); 同样,在最新版本的Postgres中,这大致等同于上面的单个命令。 回答2 ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY; 这就是您需要做的所有事情: 添加id列用从1到count(*
  • Mysql自动递增类似数据的int(Mysql Auto-incrementing int of similar data)
    问题 所以这更像是一个关于如何去做这件事的查询,当涉及到更多基础知识时,我是 MySQL/PHP 编码的新手,所以我只是想知道如何设置一个自动递增的 int 在哪里如果两个姓氏是相同的,它会计算它们。 我在网上搜索时找不到任何东西,但一个例子是: 在数据库中我们有 5 个用户 1. james smith 1 2. terry smith 2 3. john smith 3 4. jerry fields 1 5. tom straus 1 当这些用户注册时,我需要创建一个 int,即 john smith 是第 3 个拥有相同姓氏 smith 的人,而 jerry fields 是第一个拥有姓氏字段等的人。如何做到这一点? 我制作的表格是使用 jquery/php ajax 方法注册用户的表格,但我想添加与此类似的内容,以便将该数字与他们的姓名结合起来以制作特定的用户 ID。 回答1 如使用 AUTO_INCREMENT 下所述: 对于MyISAM和BDB表,您可以在多列索引中的辅助列上指定AUTO_INCREMENT 。 在这种情况下,为AUTO_INCREMENT列生成的值计算为MAX( auto_increment_column ) + 1 WHERE prefix= given-prefix 。 当您想将数据放入有序组中时,这很有用。 因此,你可以这样做: CREATE
  • 如何为多个表中的行实现唯一的自动递增 ID?(How to achieve unique auto-incremented id for rows across multiple tables?)
    问题 我在数据库中有几个表,假设它们被称为 table1、table 2 等。所有表都有一个带有自动增量的主键列“id”。 在我当前的配置中,当插入 table1 时,生成的 id 为 1。之后插入 table2 时,生成的 id 恰好也是 1。 如何在数据库中的所有表中强制使用绝对唯一的 ID? 我想插入table1时,生成的id为1,如果之后插入table2,生成的id为2? 我在某台机器上用过mysql服务器,没有出现这个问题,但是当我在本地机器上安装mysql时,就开始出现了。 所以我想它一定是某种应用于 mysql 配置的设置? 谢谢 回答1 你可以使用 UUID。 INSERT INTO mytable(id, name) VALUES(SELECT UUID(), 'some data'); 阅读有关 UUID 的更多信息:http://mysqlbackupnet.codeplex.com/wikipage?title=Using%20MySQL%20With%20GUID%20or%20UUID 回答2 您可以创建可以全局使用的 SEQUENCE。 CREATE SEQUENCE serial INCREMENT 1 MINVALUE 0 MAXVALUE 200 START 364 CACHE 1; 编辑:Postgres 支持序列,但这可以通过设置 AUTO
  • EF5 递增唯一 ID 而不调用 savechanges,直到用户请求保存(EF5 incrementing Unique ID without calling savechanges until user request to save)
    问题 如何根据子表中父表的唯一ID向表和子表添加多个项目,而无需每次添加行时都调用保存更改,只有当用户单击保存按钮时才必须提交更改 回答1 这取决于您定义实体的方式。 如果您使用独立的关联,它将简单地工作。 如果您使用外键关联,则必须为主体实体使用临时键,并将它们设置为从属实体中的外键属性。 parent 中的这些临时键必须是唯一的(例如使用负值),EF 将在保存更改时自动用实际值替换它们。 回答2 实体框架首先插入父记录并使用其自动递增的标识值来设置子项的任何外键值。 EF 可以这样做,因为 SQL Server 在事务范围内递增标识列,因此在事务尚未提交时分配新值。 (回滚后的新插入表明标识列丢失了在回滚事务中分配的值)。 所以做类似的事情没有问题 var cust = new Customer { ... }; context.Customers.AddObject(cust); // (or Add() with DbContext). var ord = new Order { ... }; ord.OrderLines.Add(new OrderLine { ... }); cust.Orders.Add(ord); context.SaveChanges(); 其中...是用于设置属性的占位符(无父 ID)。
  • 在Laravel 4中如何使用BIGINT作为自动增量主键(How do you use a BIGINT as an Auto-Incrementing Primary Key in Laravel 4)
    问题 我试图模仿wordpress的主键大小,即BIGINT(20),但是laravel似乎没有本机功能。 $table->bigInteger('id')->primary(); 但是,当我在artisan migrate期间尝试将外键附加到该ID时,会抛出MYSQL错误: [Exception] SQLSTATE [HY000]:常规错误:1005无法创建表'db。#sql-1730_15'(errno:150)(SQL:alter table users添加约束users_role_id_foreign外键( role_id )引用roles ( id )) (绑定:数组()) 正确的方法是什么?在哪里我会弄错呢? 谢谢! 回答1 您很可能忘记了也将role_id外键的类型也设置为BIGINT(20)。 这实际上不是Laravel问题,而是MySQL的问题。 顺便说一句,Laravel确实具有执行此操作的本机功能: $this->bigIncrements('id'); 这需要使它成为无符号的,自动递增的和主键。 回答2 使用bigInteger()并将其应用于某些表中的外键时,请确保将其与unsignedBigInteger()正确连接, public function up() { Schema::create('create_this_table_after_users
  • PostgreSQL:唯一违规:7 错误:重复键值违反唯一约束“users_pkey”(PostgreSQL: Unique violation: 7 ERROR: duplicate key value violates unique constraint “users_pkey”)
    问题 我在我的 Laravel 应用程序中使用 psql。 我正在尝试创建我的用户,但我不断收到此错误 唯一违规:7 错误:重复键值违反唯一约束“users_pkey” 这是我为存储用户所做的 $user = User::where('account_id','=',$id)->first(); $user->email = $account->email_address; $user->fb_email = ''; $user->tw_email = ''; $user->fb_access_token = ''; $user->fb_profile_id = ''; $user->fb_page_id = ''; $user->fb_username = ''; $user->save(); 这是我创建用户表的方式 CREATE TABLE "users" ( "id" serial NOT NULL , "account_id" varchar(255) NOT NULL , "email" varchar(255) NOT NULL , "fb_email" varchar(255) NOT NULL , "tw_email" varchar(255) NOT NULL , "created_at" timestamp(0) without time zone,
  • Laravel - 违反完整性约束:1062 重复条目(Laravel - Integrity constraint violation: 1062 Duplicate entry)
    问题 当我尝试在我的数据库中创建一个新用户时遇到问题,如果我在 phpmyadmin 中添加用户我没有问题,但是当我尝试在我的 laravel web 中创建用户时,用户创建了这个错误:SQLSTATE[23000 ]:违反完整性约束:1062 键“PRIMARY”的重复条目“15.236.964-5”我不知道这是问题所在,因为在数据库中不存在相同的主键。 有问题的表是: CREATE TABLE IF NOT EXISTS `users` ( `rut` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `password` char(60) COLLATE utf8_unicode_ci NOT NULL, `edad` int(11) NOT NULL, `pais` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `comuna` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `sector` varchar(255)
  • 如何在Elasticsearch数据库中创建唯一约束?(How to create unique constraint in Elasticsearch database?)
    问题 我将Elasticsearch用作文档数据库,并且我创建的每个记录都有一个GUID ID,系统将其用作记录ID。 商界人士希望提供一种功能,使用户可以基于日期和迄今为止每天/每月创建的记录数来拥有自己的自动文件名约定。 我需要防止重复的用户文件名。 有没有一种方法可以将索引字段设置为唯一? 像sql唯一约束一样? 回答1 您需要使用应该唯一的字段作为文档的ID。 默认情况下,具有现有ID的新文档将覆盖具有相同ID的现有文档,但是如果已经存在具有相同ID的文档,则可以切换到op_type=create以获取错误。 但是,没有办法对任意字段具有相同的行为,只有_id字段可以这样工作。 我可能会考虑在应用程序层而不是在Elasticsearch中处理此逻辑。 回答2 一种解决方案是使用uniqueId字段值指定文档ID,并在将文档存储在ES中时使用op_type=create 。 这样,您可以确保您的uniqueId字段将具有唯一值,并且不会被另一个相同值的文档所覆盖。 为此,elasticsearch文件说: 索引操作还接受可用于强制执行创建操作的op_type,从而允许“不存在则放置”行为。 使用create时,如果索引中已经存在具有该ID的文档,则索引操作将失败。 这是使用op_type参数的示例: $ curl -XPUT 'http://localhost:9200/es
  • 在MySQL表中插入值时,如何覆盖自动递增主键的属性?(How to override the attribution of an auto incrementing primary key when inserting a value in a MySQL table?)
    问题 我有一个MySQL用户表,其主键是一个自动递增的integer 。 该表已经填充了键在0到30.000之间的记录。 但是,并非所有记录都在那里。 一些用户已被删除,因此我有“漏洞”。 现在,客户已经意识到他们错误地删除了许多用户,现在他们希望我重新插入那些拥有相同ID的用户,以便与完全在另一台计算机上运行的电子商务后端兼容,但对客户使用相同的ID。 目前,我是: 通过从ID中删除auto_increment属性来更改表的结构添加我需要的记录,并指定其ID 将更改恢复为表格的结构。 有没有更好的方法来实现这一目标? 是否有任何SQL override函数可以让我强制MySQL接受一个唯一的值,但不一定是“行中的下一个数字”? 回答1 您不必禁用auto_increment功能。 当您在表中插入一行并在行中指定主键值时,所需的ID将存储在数据库中。 仅当省略主键字段时,才使用auto_increment 。 编辑:我想我可以为此提供示例: mysql> describe test; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------
  • 生成唯一(可能是自动递增)ID 的算法(Algorithm to generate unique (possibly auto incremented) ids)
    问题 我需要为我的应用程序生成唯一的 ID,我正在寻找合适的算法。 我更喜欢这样的东西—— YYYY + MM + DD + HH + MM + SS + <random salt> + <something derived from the preceding values> 例如 —— 20100128184544ewbhk4h3b45fdg544 我正在考虑使用SHA-256或其他东西,但结果字符串不应太长。 我可以使用UUID但同样,它们太长了,而且它们只能在一台机器上是唯一的。 我欢迎建议,想法。 我的编程语言是 Java。 编辑: ID 不需要加密安全。 我正在研究更简单的散列算法,例如 Dan Bernstein 等的算法。 回答1 您可以使用该 SHA-256,然后仅从结果中获取前 10 个字节(或者无论您喜欢多少,都可以根据您的喜好平衡长度和唯一性)。 回答2 所以我终于解决了这个 - d = YYYYMMDDHHMMSS hash = d + sha256(d + random_salt)[:10] 谢谢大家的回应。 回答3 试试这个: java.security.messageDigest() 回答4 我想如果你使用 SHA1(MD5(YYYYMMDDHHMMSS + YourSystemName + ClientName)) 你会用 40 个字符没问题..
  • 如何实现自增版本号列?(How to implement auto-incrementing version number column?)
    问题 在 SQL Server 中实现基于同一表中另一个字段自动递增的字段的好方法是什么? 想象一下,对于DocumentID列的每个值,一个VersionNumber字段自动递增1到n 。 要求: VersionNumber 必须从 1 开始,并且不能跳过任何数字必须保留 VersionNumber 列。 它不能在视图中动态创建,例如通过ROW_NUMBER 。 这样做的目的是创建审计跟踪。 理想情况下,将防止直接插入和更新 VersionNumber 详细地 我正在设计一个需要版本化数据的数据库。 这种事情的基本结构是有一个带有不变字段的标题表和一个版本详细信息表,其中包含: 头表的外键一个版本号可以随版本更改的字段 诸如 SQL Strategies for 'Versioned' Data 和 Yet Another SQL Strategy for Versioned Data 等文章讨论了有效查询此类结构的策略,但并未讨论VersionNumber字段的实际实现(第二篇文章提供了部分示例,但留下了更完整的内容)实施“高级练习”)。 示例 DDL: CREATE TABLE Invoice ( InvoiceID bigint identity(1,1) not null primary key, CreateDate date not null ); CREATE
  • 建议的解决方案:在分布式环境中生成唯一 ID(Proposed solution: Generate unique IDs in a distributed environment)
    问题 我一直在浏览网络,试图找到一种解决方案,使我们能够在区域分布式环境中生成唯一 ID。 我查看了以下选项(以及其他选项): 雪花(来自推特) 这似乎是一个很好的解决方案,但我只是不喜欢为了创建 ID 而不得不管理另一个软件而增加的复杂性; 在这个阶段它缺乏文档,所以我认为这不是一个好的投资; 节点需要能够使用 Zookeeper 相互通信(延迟/通信失败呢?) 用户名 看看吧: 550e8400-e29b-41d4-a716-446655440000 ; 它是一个 128 位的 ID; 有一些已知的冲突(取决于我猜的版本),请参阅这篇文章。 像 MYSQL 这样的关系数据库中的自动增量 这看起来很安全,但不幸的是,我们没有使用关系数据库(可扩展性偏好); 我们可以像 Flickr 那样为此部署一个 MySQL 服务器,但同样,这会引入另一个故障点/瓶颈。 也增加了复杂性。 非关系型数据库(如 COUCHBASE)中的自动增量 这可以工作,因为我们使用 Couchbase 作为我们的数据库服务器,但是; 当我们在不同区域有多个集群、延迟问题、网络故障时,这将不起作用:在某些时候,ID 会根据流量发生冲突; 我提出的解决方案(这是我需要帮助的) 假设我们的集群由 5 个不同地区(非洲、欧洲、亚洲、美洲和大洋洲)的 10 个 Couchbase 节点和 10 个应用程序节点组成。
  • 自动递增跳过数字?(Auto Increment skipping numbers?)
    问题 注意:我是数据库和PHP的新手 我有一个order列设置为auto increment和unique 。 在我的PHP脚本中,我正在使用AJAX来获取新数据,但是问题是,该order跳过了数字,并且order更高,因此迫使我在插入数据时手动更新数字。 在这种情况下,我最终将782更改为38 。 $SQL = "INSERT IGNORE INTO `read`(`title`,`url`) VALUES\n ".implode( "\n,",array_reverse( $sql_values ) ); 我怎样才能使它递增+1? 回答1 如果INSERT失败,MySQL 5.1及更高版本中的默认auto_increment行为将“丢失”自动增量值。 也就是说,它每次都会增加1,但是如果INSERT失败,它不会撤消增加。 丢失约750个值并不罕见,但并非没有(我咨询的站点在每次成功插入后都会跳过1500)。 您可以更改innodb_autoinc_lock_mode=0以使用MySQL 5.0行为,并在某些情况下避免丢失值。 有关更多详细信息,请参见http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html。 要检查的另一件事是auto_increment_increment配置变量的值。
  • InnoDB中的auto_increment值?(Auto_increment values in InnoDB?)
    问题 我一直在将InnoDB用于一个项目,并依赖于auto_increment。 对于大多数表来说,这不是问题,但是对于具有删除功能的表,这可能是一个问题: InnoDB中的AUTO_INCREMENT处理 特别是这部分: 名为ai_col的AUTO_INCREMENT列:服务器启动后,对于首次插入到表t中,InnoDB执行以下语句的等效项:SELECT MAX(ai_col)FROM t FOR UPDATE; InnoDB将语句检索的值加1,并将其分配给表的列和自动递增计数器。 这是一个问题,因为尽管它确保表中的键是唯一的,但是此表中有外键,而这些键不再是唯一的。 mysql服务器不会/不应该经常重启,但这已经中断了。 有没有简单的方法可以解决此问题? 回答1 如果您有外键约束,那么当表B引用该行时,如何从表A中删除该行? 对我来说,这似乎是一个错误。 无论如何,通过在应用程序启动时重置偏移量,可以避免重用自动增量值。 查询所有引用表A的表中的最大值,然后更改大于该最大值的表,例如,如果最大值为989,请使用以下命令: alter table TableA auto_increment=999; 还要注意,不同的MySQL引擎具有不同的自动递增行为。 此技巧适用于InnoDB。 回答2 因此,您有两个表: 表A A_ID [PK] 和 表B B_ID [PK] A_ID [FK