草庐IT

auto-increment

全部标签

mysql - 即使抛出异常 DUPLICATE KEY 或事务被回滚,auto_increment 值也会递增

我有一个表-id是auto_increment和一个email列被定义为UNIQUE.考虑将auto_increment设置为1。在我的存储过程中,当我INSERT具有唯一电子邮件ID的新行时,auto_increment列会递增。正确的行为。现在,当我尝试再次INSERT同一封电子邮件时,UNIQUEKEY被违反了。我检查它并执行ROLLBACK。但是auto_increment现在设置为2。为什么?在INSERT的第三次尝试中,这次使用唯一的电子邮件插入行,但是id字段的值为3。不好。有什么方法可以将值减回到2。 最佳答案 检查

php - MySQL INSERT --- 获取 ID (auto_increment) 如果一个值是唯一的

是否有更好或更快的返回ID的方法?列customer是唯一的$inserted_id=null;if(!$mysqli->query("INSERTINTOusers(id,customer)VALUES(null,'foo')"){//Isitpossibletoavoidthis2ndquery?$result=$mysqli->query("SELECTidFROMusersWHEREcustomer='foo'");$inserted_id=$result->fetch_assoc()['id'];}else{$inserted_id=$mysqli->insert_id;}

MySQL 在没有 WHERE 的情况下删除后自动增加值

跑完后发现DELETEFROMtablename我的ID(自动递增)值变得很奇怪7,8,9,0,1,12,3,4,15当我做a时按这个顺序,SELECT*FROMtablename我知道认证指南说用DELETEwithoutWHERE清空表时ID可能会重置也可能不会重置,但是是什么导致ID序列如此奇怪?我很确定这是插入行的顺序。最初在删除之前,我在表中有6行,所以7、8、9似乎是可以理解的。 最佳答案 如果没有orderby子句,数据库中绝对没有顺序或顺序保证。这与记录的存储方式有关——它们不按任何顺序存储。数据库通常会根据聚簇索引

php - 重新索引 MySQL INT 主键并重置 AUTO_INCREMENT

所以我有一个用于PHP站点的MySQL数据库。在数周的开发过程中,我得到了类似的东西:Table:usersid|name-----------12|Bob34|Jen155|John154|Kyle除此之外还有数百条记录并且ID数以千计。我正在寻找一个我可以运行的脚本来将键重命名为它们的最小值(保留它们各自的行),然后将AUTO_INCREMENT重置为下一个id期望的输出是:Table:usersid|name-----------1|Bob2|Jen3|Kyle4|JohnALTERTABLEusersAUTO_INCREMENT=5;(注意Kyle和John)我意识到我必须修复

mysql - 在自增字段前自动添加字母

MySQL中自增的前面可以加一个字母吗?我的数据库中有几个表,其中一些表具有通过自动递增创建的唯一ID。我希望能够通过前面的字母区分自动生成的数字。这不是绝对必需的功能,但它只会帮助简化小任务。 最佳答案 您可以为需要在ID值前面加上不同字母的表创建View,并通过View读取表:CREATEVIEWVTableAASSELECTCONCAT('A',ID)ASID,othercolumnsFROMTableA其他表同理。 关于mysql-在自增字段前自动添加字母,我们在StackOve

php - 如何插入auto_increment

如果我有以下数据库CREATETABLE`my_table`(`year`text,`event`text)ENGINE=MyISAMDEFAULTCHARSET=utf8;INSERTINTO`my_table`VALUES('2011','john');INSERTINTO`my_table`VALUES('2011','dave');INSERTINTO`my_table`VALUES('2010','hany');我的问题是如何添加idauto_increment这样就可以了INSERTINTO`my_table`VALUES(1,'2011','john');INSERTIN

保存后的 MySQL + Django : No obj. id()

使用Django和MySQL。我保存了模型,但没有出现id。在PostgreSQL和bigintegerfields中看到了一些类似的问题,但这些问题似乎都不适用于此处。有任何想法吗?客户端确实通过MySQL自动增量在数据库的id字段中接收主键。谢谢!classClient(models.Model):id=models.IntegerField(primary_key=True)first_name=models.TextField(null=True,blank=True)last_name=models.TextField(blank=True)>>>client=models.

mysql - 创建表 : You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 时出错

这个问题在这里已经有了答案:SyntaxerrorduetousingareservedwordasatableorcolumnnameinMySQL(1个回答)关闭8年前。我正在尝试使用PHP脚本在同一个MySQL数据库中创建2个表:主键为“user_id”的表“user”和来自“user”表的主键为“order_id”和外键“user_id”的表“order”(一对多关系)。用户表创建成功,没有问题:$sql="CREATETABLEuser(user_idINTUNSIGNEDNOTNULLAUTO_INCREMENT,typeENUM('member','admin')NOTN

mysql - 如何为 InnoDB 引擎数据库重新播种 "Auto increment"列?

我正在为表使用人工主键。该表有两列,一列是主键,另一列是日期(数据类型:日期)列。当我尝试从文件(仅包含第二列的值)加载批量数据时,日期的YYYY部分被添加到主键列(这是表中的第一列)并且日期的其余部分被截断。所以我需要重置表格。我尝试使用Truncatetable语句进行操作,但由于错误而失败,因为此表在另一个表的外键约束中被引用。所以我必须使用delete*fromtable;语句来完成它。我确实删除了所有记录,但是当我再次插入记录时(这次使用insertinto语句),它从我之前插入的那一年的最后一年的后一年开始递增ID(即它没有刷新它)。注意:-我使用的是MySQL5.5和In

即使由于错误导致插入失败,MySQL 自动增量值也会增加

当我从用户那里收到数据时,我每次都会验证输入的格式(PHP)。我唯一无法验证(或者我不想)的是违反约束(例如外键)。我让DML引发错误,让数据库驱动程序抛出异常。捕获它后,我只是通过MySQL的错误代码打印出一些错误消息。问题是,即使插入失败,我看到autoincrement序列仍然增长,增加。我怎样才能防止这种情况发生? 最佳答案 这就是自动增量值和序列的工作原理。当一个值被使用时,如果事务失败不回收,事务回滚。由于您使用的是自动增量值,实际值无关紧要,因此除了缺少数字的美学之外,空格应该不是问题。