在 MySQL Insert 中使用自动递增主键连接字符串
将数据插入 MySQL 数据库时,连接一个字符串会很有用带有自动递增主键 ID 的字符串来创建唯一标识符。
考虑以下用户表:
CREATE TABLE users ( user_id INT NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, PRIMARY KEY (user_id) );
假设您要将用户名列设置为字符串前缀(例如, 'user') 后跟自动递增的 user_id。但是,直到插入操作之后才会生成 user_id 值。
尝试使用 BEFORE INSERT 触发器通过单个语句来完成此操作是不可行的,因为 user_id 值尚不可用。同样,不允许使用 AFTER INSERT 触发器更新用户名字段。
解决方案 1:插入和更新
一种方法是先执行插入操作,然后立即执行 UPDATE 语句以连接字符串和 user_id。这可以在 PHP 中完成,如下所示:
// Insert user data $stmt = $mysqli->prepare(...); $stmt->bind_param(...); $stmt->execute(); // Get the auto-incremented user ID $user_id = $mysqli->insert_id; // Update username $update_stmt = $mysqli->prepare("UPDATE users SET username = 'user$user_id' WHERE user_id = ?"); $update_stmt->bind_param("i", $user_id); $update_stmt->execute();
解决方案 2:自定义 INSERT 查询
如果 user_id 不是自动递增值,则可以插入原始 INSERT 语句中连接的用户名。这需要修改 SQL 查询以包含串联:
INSERT INTO users (username, ...) VALUES ('user' || ?, ...);
在此查询中,替换占位符 ?包含您在插入期间指定的 user_id 的 PHP 变量。
生成列(MySQL 5.7 及更高版本)
MySQL 5.7 引入了生成列,它允许您创建基于表达式的列。但是,无法定义引用自动递增列的生成列。
以上是MySQL插入中如何连接字符串和自增主键?的详细内容。更多信息请关注PHP中文网其他相关文章!