3

我有一个有 2 列的表。ID 列自动递增。我正在尝试使用与列相同的 ID 自动递增用户列id,但使用“用户”前缀(例如:user100,其中 ID 也是 100),基本上就像在 stackoverflow 上所做的一样。

CREATE TABLE test_table (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     user CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) ENGINE=MyISAM;

有没有办法在 1 个查询中做到这一点?而不是插入数据库,然后查询以获取 ID,并将 ID 插入用户列?

4

3 回答 3

2

使用 BEFORE 触发器:

DELIMITER $$
CREATE TRIGGER test_table_trigger
BEFORE INSERT ON test_table
FOR EACH ROW BEGIN
    SET NEW.`user` = CONCAT(NEW.`user`, NEW.id);
END $$
DELIMITER ;

文档:MySQL 触发器

于 2013-03-13T14:46:13.523 回答
1

你可以做一个触发器

触发前:

mysql> truncate table test_table;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter $$
mysql> CREATE TRIGGER test_table_trigger
    -> BEFORE insert ON test_table
    -> FOR EACH ROW
    -> BEGIN
    ->    SET new.user = CONCAT('user', (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='test_table'));
    -> END $$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> INSERT INTO test_table values ();
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO test_table values ();
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO test_table values ();
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * FROM test_table;
+----+-------+
| id | user  |
+----+-------+
|  1 | user1 |
|  2 | user2 |
|  3 | user3 |
+----+-------+
3 rows in set (0.00 sec)

上面的内容应该在指定给列后使用自动增量id并将其附加到 string user。自动增量 ID 是从 中提取的Information_Schema,好像这是在一个事务或许多查询中,它可能设置错误。

于 2013-03-13T14:33:06.223 回答
0

也许你可以试试这个,拿起最后插入的 id 并将字符串与转换后的值连接起来:

INSERT INTO test_table (user) VALUES ('user')

UPDATE test_table
SET user = user + CAST(LAST_INSERT_ID() AS VARCHAR)
WHERE id = LAST_INSERT_ID()
于 2013-03-13T14:45:40.500 回答