3

2列のテーブルがあります。ID 列は自動的に増加します。列と同じIDでユーザー列を自動インクリメントしようとしていidますが、基本的にstackoverflowで行われるのと同じように、「ユーザー」プレフィックス(例:IDも100であるuser100)を使用します。

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

1つのクエリでこれを行う方法はありますか? DB に挿入する代わりに、クエリを実行して 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それを文字列に追加する必要があります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 に答える