如何在MYSQL的INSERT QUERY中的另一列中使用自动递增ID?
我想用代码添加用户。例如,如果插入后的user_id
是1
,则代码将是US1
,类似地,如果插入后的user_id
是954
,则代码是US954
>
这是我目前正在做的
"INSERT INTO `users` (`user_id`, `user`, `code`) VALUES (NULL, 'Alice', NULL);"
,然后在PHP(Codeigniter)中检索最后一个插入ID
$insert_id = $this->db->insert_id();
然后使用自动增量ID更新代码
"UPDATE `users` SET `code` = CONCAT('US', '" . $insert_id . "') WHERE `user_id` = " . $insert_id . ";";
无论如何,您可以在MYSQL的单个INSERT QUERY中完成它吗?
编辑: 这与此Insert/ update at the same time in a MySql table?不同。因为这同时询问两个用户的并发操作,这不是我的问题
答案 0 :(得分:1)
是的,有可能。 您可以使用MySQL中的存储过程(SP)来实现。 您必须为每次注册调用一次SP,而不是两次查询。
这将节省很多执行时间。
https://stackoverflow.com/questions/14957788/insert-and-update-with-stored-procedure
https://www.w3resource.com/mysql/mysql-procedure.php
https://www.sitepoint.com/stored-procedures-mysql-php/
http://php.net/manual/en/mysqli.quickstart.stored-procedures.php
请使用上面的链接以获取更多信息。
我建议使用SP进行登录/注册。它将为您的PHP Web应用程序提供额外的功能。
对于您的基本示例。我已经与您共享了类似的SP代码。
BEGIN
declare autoIncr int;
//insert code
autoIncr = LAST_INSERT_ID();
//update code
END
答案 1 :(得分:0)
使用MAX(user_id)+1获取新的user_id,然后将其与您的字符串连接
INSERT INTO `users` (`user`, `code`) SELECT 'Alice',CONCAT("US",MAX(user_id)+1) from users
答案 2 :(得分:-1)
在创建表和列时,如果您给定了user_id自动增量的值。之后,当您要插入数据时,无需提供user_id的值,因为它会自动递增
用于创建新建表查询
CREATE TABLE `users` (
ID int NOT NULL AUTO_INCREMENT,
user_id varchar(255) NOT NULL AUTO_INCREMENT,
user varchar(255),
code text,
PRIMARY KEY (ID)
);
即插入查询
"INSERT INTO `users` (`user`, `code`) VALUES ('Alice', NULL);"