工作记录-mysql数据库表增加字段(从000001开始递增)

本文介绍如何在MySQL中为现有表添加新字段并按规则填充数据,具体演示了使用SQL语句更新student表,新增no字段并实现从000001开始递增的六位数字填充的方法。

mysql数据库的student表结构如下:

idnameage
1zhangsan16
2alice20
3lanlan30
4haha25

如果新增一个字段no,规则是:六位数,从000001开始依次递增。
idnameageno
1zhangsan16000001
2alice20000002
3lanlan30000003
4haha25000004


分两步
步骤一:首先将id字段赋值给no字段。
update student set no = id;

步骤二:将id左补位0赋值给字段pad和id字段组成表b,与原表做内连接,两个表id相等作为判断条件,将表b的pad字段赋值给a表的no字段。
update student a
inner JOIN (select id, LPAD(id,6,'0') as pad from student) as b on a.id = b.id
set a.no= b.pad

参考文章地址:https://www.cnblogs.com/azhqiang/p/6972947.html
右补0:select RPAD(id,8,'0') as pad from tmp; 
左补0:select LPAD(id,8,'0') as pad from tmp;




<think>嗯,用户想在MySQL中创建一个带有自增ID和唯一字段。我需要详细说明步骤,同时确保正确使用语法和注意事项。首先,自增ID通常用AUTO_INCREMENT属性,而且通常作为主键。主键本身就是唯一的,所以不需要额外指定UNIQUE。然后,用户可能还需要其他唯一字段,比如用户名或邮箱,这时候需要在那些字段上加UNIQUE约束。 接下来,我得考虑建语句的结构。比如,创建的时候,指定id列为主键且自增,然后其他字段如username或email设置为UNIQUE。需要举一个例子,这样用户能更清楚。例如: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE, email VARCHAR(100) UNIQUE ); 这样id会自动递增,并且username和email都是唯一的,防止重复。 然后,用户可能会遇到自增字段的问题,比如插入重复值。比如如果手动插入一个id值,而该值已经存在,会导致主键冲突。这时候需要提醒用户避免手动指定自增字段,或者确保插入的值不存在。例如引用中的错误1062就是因为主键重复了。 另外,如果用户使用CREATE TABLE ... SELECT语句,在启用GTID时可能会报错,这时候应该改用CREATE TABLE后单独插入数据。比如引用3提到的问题,需要改用其他方法。 还要注意名不能使用关键字,比如DROP、ALTER等,如引用4所述。所以名和字段名要避开这些保留字,或者用反引号括起来。 可能用户还想知道如何修改现有来添加自增或唯一约束。这时候可以用ALTER TABLE语句,比如添加自增主键或唯一索引。例如: ALTER TABLE users ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY; ALTER TABLE users ADD UNIQUE (username); 最后,需要总结注意事项,比如自增字段的类型通常是整数,复合唯一约束的使用,以及性能方面的考虑,比如唯一索引对插入速度的影响。 相关问题部分,用户可能对自增ID的起始值调整、复合唯一约束、主键与唯一键的区别,以及处理插入冲突的方法感兴趣。这些问题可以作为后续的扩展,帮助用户更深入理解。</think>### 创建包含自增ID和唯一字段MySQL #### 1. 基础语法与示例 使用 `AUTO_INCREMENT` 定义自增主键,`UNIQUE` 约束定义唯一字段: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键 username VARCHAR(50) UNIQUE, -- 唯一字段 email VARCHAR(100) UNIQUE, -- 第二个唯一字段 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` - **自增特性**: 插入数据时无需指定 `id`,系统自动生成连续整数值[^1] - **唯一性约束**: 若插入重复的 `username` 或 `email` 会触发 `ERROR 1062 (23000)`[^1] #### 2. 关键参数说明 | 参数 | 作用 | 注意事项 | |-----------------|--------------------------------|---------------------------------| | `AUTO_INCREMENT` | 自动生成连续唯一ID | 仅限整数类型字段(INT/BIGINT等) | | `UNIQUE` | 保证字段值唯一性 | 可定义多个,支持复合唯一约束 | | `PRIMARY KEY` | 主键默认包含唯一和非空约束 | 每只能有一个主键 | #### 3. 进阶用法 **复合唯一约束**: ```sql CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, product_code VARCHAR(20), UNIQUE KEY (user_id, product_code) -- 组合唯一约束 ); ``` **修改已有**: ```sql -- 添加自增主键 ALTER TABLE employees ADD COLUMN emp_id INT AUTO_INCREMENT PRIMARY KEY FIRST; -- 添加唯一约束 ALTER TABLE products ADD UNIQUE (sku_number); ``` #### 4. 常见错误处理 - **自增值冲突**: 手动插入超过当前自增计数器的值会导致后续插入失败,可通过重置解决: ```sql ALTER TABLE users AUTO_INCREMENT = 1000; ``` - **GTID限制**: 使用 `CREATE TABLE ... SELECT` 时若报错 `ERROR 1786`,改用两步操作[^3]: ```sql CREATE TABLE new_table LIKE old_table; INSERT INTO new_table SELECT * FROM old_table; ``` #### 5. 性能建议 - 自增主键建议使用 `BIGINT UNSIGNED` 应对大数据量 - 唯一索引会增加写入时的校验开销,高频写入场景需评估影响[^2] - 避免在超长文本字段(VARCHAR(255)+)上建立唯一约束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值