如何在MYSQL的同一INSERT QUERY中的另一列中使用自动递增ID?

时间:2018-11-14 11:22:54

标签: php mysql

如何在MYSQL的INSERT QUERY中的另一列中使用自动递增ID?

我想用代码添加用户。例如,如果插入后的user_id1,则代码将是US1,类似地,如果插入后的user_id954,则代码是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?不同。因为这同时询问两个用户的并发操作,这不是我的问题

3 个答案:

答案 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);"