`
- 浏览:
786815 次
- 性别:
- 来自:
上海
-
MySQL AUTO_INCREMENT及一些注意事项
MySQL的中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,可在一定程度上代替Oracle,PostgreSQL等数据库中的sequence。一个表只能有一个AUTO_INCREMENT属性,且该属性必须为主键的一部分。AUTO_INCREMENT属性可以是任何整数类型(tinyint,smallint,int,bigint等)。
在插入记录时让系统为AUTO_INCREMENT属性自动生成值的通常方法在VALUES列表中不指定该属性的值,如若有表t定义如下:
CREATE TABLE t (a INT AUTO_INCREMENT PRIMARY KEY, b INT);
则一般使用如下插入语句:
INSERT INTO t(b) VALUES(1);
即在插入时不指定a的值。
第二种方法是插入时为AUTO_INCREMENT属性指定值为0 ,即:
INSERT INTO t VALUES(0, 1);
与
INSERT INTO t(b) VALUES(1);
的效果是一样的。但这种方法没有第一种方法通用,并且在5.0及其后续版本中只有在SQL MODE中不包含NO_AUTO_VALUE_ON_ZERO时才生效(如果在SQL MODE指定了NO_AUTO_VALUE_ON_ZERO,则真的是插入了0),不推荐使用。还有其它的方法,如指定AUTO_INCREMENT属性的值为DEFAULT等,也不推荐使用。
获得新生成的AUTO_INCREMENT属性的值也有多种方法。推荐的方法是使用LAST_INSERT_ID()函数,即在INSERT之后马上使用:
SELECT LAST_INSERT_ID();
来获得新生成的AUTO_INCREMENT属性值。
另外还可以用"WHERE auto_col IS NULL"条件选择出新插入的行,即在INSERT后马上用:
SELECT * FROM t WHERE a IS NULL;
选择出来的将是新插入的行,而非真正的满足"a IS NULL"条件的行。但你要是再执行一次上述查询,则返回的又变成了真正的满足"a IS NULL"条件的行,由于a是主键,因此肯定会返回空集。这看上去很诡异是吗,不过MySQL也不想这么干,但ODBC标准里曾有这种用法,为了支持 ODBC,MySQL也是没办法啊。不过可以将SQL_AUTO_IS_NULL设为0来禁止这一用法。
此外AUTO_INCREMENT属性也给复制带来了麻烦。一般情况下复制AUTO_INCREMENT属性能正确工作,但以下情况还是有问题:
1. INSERT DELAYED ... VALUES(LAST_INSERT_ID())不能被正确复制
2. 存储过程插入的使用AUTO_INCREMENT属性的记录不能被正确复制
3. 通过"ALTER TABLE"命令增加AUTO_INCREMENT属性时在主从节点上产生的值可能是不一样的,因为这个各行AUTO_INCREMENT属性的值取决于物理上的存储顺序。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### MySQL AUTO_INCREMENT 主键详解 在数据库设计与应用中,主键是确保数据表每一行记录唯一性的关键机制之一。而`AUTO_INCREMENT`属性则是在MySQL数据库系统中为某些整数类型的主键自动分配唯一值的功能。下面我们...
**注意事项** 1. 修改`auto_increment`值时要谨慎,因为这可能会导致主键冲突。如果你已经有一些行并且设置了较低的`auto_increment`值,新插入的行可能会与现有的ID重复。 2. 如果`auto_increment`值设置得过高,...
5. **注意事项** - 自增字段通常用于主键,确保每个记录的唯一性。 - 在设置自增属性时,应谨慎操作,避免产生ID冲突或不连续的情况。 - 如果在生产环境中更改自增设置,可能会影响到业务逻辑,需提前评估风险。 ...
Oracle 到 MySQL 的迁移步骤及各种注意事项 数据库迁移是一个复杂的过程,需要了解源数据库和目标数据库的结构、数据类型、存储过程等方面的差异。从 Oracle 到 MySQL 的迁移尤其需要注意以下几个方面: 1. 数据...
四、主键自增的注意事项 1. 数据库性能:自增主键有利于B树索引的构建,提高查询效率,但过大的自增步长可能会影响索引的性能。 2. 并发插入:在多线程环境下,需要注意并发插入时可能导致的自增值冲突。 3. 主键...
由于文档的标签为“安全”,这里特别强调一些安全方面的注意事项: 1. **避免SQL注入**: - 使用参数化的查询或预处理语句来减少SQL注入的风险。 - 对用户输入进行验证和过滤。 2. **保护敏感信息**: - 不要在...
#### 四、注意事项及常见问题 1. **服务器ID唯一性**:确保每台服务器的`server-id`值不同,这是区分各个服务器的基础。 2. **数据一致性**:在部署过程中,建议先停止所有写入操作,以避免在配置过程中数据发生...
**注意事项:** - `log-bin` 参数必须开启,用于主备之间的数据同步; - `relay-log` 的名称更改并不是必须的,但推荐这样做以保持日志的一致性; - 两个实例的 `server-id` 必须不同; - `skip-slave-start` 用于...
在MySQL中,`AUTO_INCREMENT`字段自动分配数值。但在Oracle中,没有直接对应的自动增长类型。我们需要创建一个序列(SEQUENCE)来模拟这一功能。例如: ```sql CREATE SEQUENCE sequence_name INCREMENT BY 1 ...
* 2 MySQL 邮件列表及如何提问或报告错误 o 2.1 MySQL邮件列表 o 2.2 提问或报告错误 o 2.3 怎样报告错误或问题 o 2.4 在邮件列表上回答问题的指南 * 3 MySQL的许可证和技术支持 o 3.1 MySQL的许可证政策 o ...
- auto_increment_offset和auto_increment_increment:这两个参数用于控制自动增长字段的初始值和增量,对于双向复制来说,两台服务器的auto_increment_offset应设置不同值,避免数据冲突。 - replicate-do-db和...
整型的使用注意事项 * 如果不指定是无符号还是有符号,则默认是有符号。 * 可以手动添加 UNSIGNED 指定为无符号整型,限制负数。 * 如果超出类型范围的操作,会发生 out of range 错误提示。 * MySQL 支持在类型...
#### 四、注意事项与优化建议 - **监控与调整**:定期检查主从服务器的日志文件和性能指标,根据实际情况调整配置参数,以达到最优性能。 - **数据一致性保障**:采用适当的同步策略,确保数据的一致性和完整性。 -...
16.3 已知可用 MyODBC一起工作的程序 16.4 怎样填写 ODBC 管理程序的各种域 16.5 怎样在ODBC中获得一个AUTO_INCREMENT列的值 16.6 报告 MyODBC 的问题 17 与一些常用程序一起使用MySQL 17.1...
注意事项: 1、按照以下语法建立数据库(ProjectName为你的数据库名,可以改你自己想要的名字,改完请记得把项目中的数据库连接配置也改好) CREATE DATABASE ProjectName; CREATE TABLE Employees ( id BIGINT NOT ...
- **描述**:在 MySQL 中,当使用了 AUTO_INCREMENT 属性创建了一个自增列后,可能因为各种原因(如数据删除等)导致自增编号不连续。此时,可以使用 ALTER TABLE 语句来重置 AUTO_INCREMENT 的起始值。 - **示例...
##### 3、注意事项 - **业务场景**:虽然存储过程能够提高效率和简化操作,但在实际开发中并不总是被广泛应用。通常情况下,复杂的业务逻辑更适合在应用层实现,这样更有利于管理和维护。 - **执行速度**:对于简单...