sql >> データベース >  >> RDS >> Mysql

ある種の自動インクリメント列をmysqlテーブルに追加する

    MySQLは整数以外は自動インクリメントしません。文字列を自動インクリメントすることはできません。

    トリガーを使用して、自動インクリメント値に基づいて文字列を設定することはできません。その理由は、「前」のトリガーが実行された時点では自動インクリメント値がまだ生成されておらず、「後」のトリガーの列を変更するには遅すぎるためです。

    https://stackoverflow.com/a/26899091/20860 に対する私の回答もご覧ください。

    おそらく同じ理由で、仮想列を使用することはできません。

    mysql> create table t (id int(5) zerofill auto_increment primary key, 
        virtcolumn char(8) as (concat('log-', id)));
    ERROR 3109 (HY000): Generated column 'virtcolumn' cannot refer to auto-increment column.
    

    整数を自動インクリメントし、挿入が完了した後、UPDATEを使用して「log-nnnnnn」文字列を入力する必要があります。

    CREATE TABLE `t` (
      `id` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
      `log` char(9) DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
    
    INSERT INTO `t` () VALUES ();
    
    UPDATE `t` SET `log` = CONCAT('log-', `id`) WHERE `id` = LAST_INSERT_ID();
    
    SELECT * FROM `t`;
    +-------+-----------+
    | id    | log       |
    +-------+-----------+
    | 00001 | log-00001 |
    +-------+-----------+
    



    1. MySQLとのロックと並行性

    2. DATETIMEからDATETIME2への変換で値が変わるように見えるのはなぜですか?

    3. ユーザー定義タイプがPostgreSQLにすでに存在するかどうかを確認します

    4. 検証に別のテーブルの条件がある場合のデータベースでの一意性検証