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

1つのステートメント内でMySQLの自動インクリメント値にアクセスできますか?

    別のテーブルを作成する必要はありません。max()では、テーブルのauto_increment値に応じて問題が発生します。これを行うには、次のようにします。

    CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
    BEGIN
       DECLARE next_id;
       SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
       SET NEW.field = next_id;
    END
    

    next_id変数を宣言するのは、通常は他の方法で使用されるためです(*)が、直接new.field =(select ...)

    を実行できます。
    CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
    BEGIN
       SET NEW.field=(SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
    END
    

    (SELECT文字列フィールド)の場合も、CAST値を使用できます;

    CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
    BEGIN
       SET NEW.field=CAST((SELECT aStringField FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl') AS UNSIGNED);
    END
    

    (*)画像に自動名前を付けるには:

    SET NEW.field = CONCAT('image_', next_id, '.gif');
    

    (*)ハッシュを作成するには:

    SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );
    


    1. CentOS7にMySQLをインストールする方法

    2. SQL更新クエリの集計関数?

    3. JSON列の配列の要素をクエリします

    4. ADO.NETがT-SQLストアドプロシージャを呼び出すと、SqlTimeoutExceptionが発生します