MySQL中实现插入时可选手动指定或自动生成主键的方法
搞定MySQL手动/自动生成ID的需求
嘿,我来帮你解决这个问题!要实现既能手动指定id插入数据,又能让MySQL自动生成唯一id,你需要调整表结构并修正插入语句的写法,具体步骤如下:
1. 给id字段添加自动生成的默认值
你的id是VARCHAR(10)类型的主键,我们可以给它设置一个默认值——截取UUID的前10位(保证唯一性),这样当你插入时不指定id,MySQL会自动帮你填充这个值。执行这条SQL语句修改表结构:
ALTER TABLE newuser MODIFY COLUMN id VARCHAR(10) PRIMARY KEY DEFAULT SUBSTRING(UUID(), 1, 10);
小贴士:UUID生成的是36位长字符串,截取前10位足够应付大部分场景的唯一性要求;如果你偏爱原来
abc123这种字母加数字的格式,也可以换成自定义生成规则,比如CONCAT(LEFT(MD5(RAND()),5), FLOOR(RAND()*1000)),生成的格式会更贴近你的需求~
2. 修正插入语句的写法
你那条INSERT INTO newuser VALUE('nikita');之所以报错,是因为表有2个字段,但你只传了1个值,MySQL无法匹配字段对应关系。改成下面两种写法就没问题了:
- 手动指定
id的插入(保持你原来的写法完全可行):
INSERT INTO newuser VALUE('abc123','monika');
- 让MySQL自动生成
id的插入(明确指定只插入sname字段):
INSERT INTO newuser(sname) VALUE('nikita');
或者你也可以把所有字段都写出来,id位置用DEFAULT关键字,效果是一样的:
INSERT INTO newuser(id, sname) VALUE(DEFAULT, 'nikita');
备选方案:如果能接受ID格式调整
要是你不介意id变成类似abc1、abc2这种前缀加自增数字的形式,可以试试这个方案:
- 先修改表结构,新增一个自增整数字段,再自动拼接成你想要的字符串ID:
ALTER TABLE newuser DROP PRIMARY KEY, ADD COLUMN id_int INT AUTO_INCREMENT PRIMARY KEY FIRST, ADD COLUMN id VARCHAR(10) GENERATED ALWAYS AS (CONCAT('abc', id_int)) STORED UNIQUE;
- 这样操作后,不管你插数据时指定不指定
id,都会自动生成带前缀的自增ID;要是想手动指定自定义的id,直接插入唯一的字符串就行,完全兼容两种场景。
内容的提问来源于stack exchange,提问作者Monika verma
相关产品推荐
相关产品推荐

