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

MySQLで2つの自動インクリメント列を作成するにはどうすればよいですか?

    値を自動インクリメントする2つの列が必要な理由はわかりませんが、意味がありません...しかし、主張する場合-
    UDFまたはSPでこれを実現するには、複数の列で値を自動インクリメントします。

    >

    例1:ストアドプロシージャ(SP)


    テーブル

    CREATE TABLE tests (
        test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        test_num INT(10) NULL,
        test_name VARCHAR(10) NOT NULL
    );
    



    ストアドプロシージャ

    DELIMITER $$
    CREATE PROCEDURE autoInc (name VARCHAR(10))
        BEGIN
            DECLARE getCount INT(10);
    
            SET getCount = (
                SELECT COUNT(test_num)
                FROM tests) + 1;
    
            INSERT INTO tests (test_num, test_name)
                VALUES (getCount, name);
        END$$
    DELIMITER ;
    



    SPに電話する

    CALL autoInc('one');
    CALL autoInc('two');
    CALL autoInc('three');
    



    テーブルを調べてください

    SELECT * FROM tests;
    
    +---------+----------+-----------+
    | test_id | test_num | test_name |
    +---------+----------+-----------+
    |       1 |       1  | one       |
    |       2 |       2  | two       |
    |       3 |       3  | three     |
    +---------+----------+-----------+
    



    例2:ユーザー定義関数(UDF)


    テーブル
    CREATE TABLE tests (
        test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        test_num INT(10) NULL,
        test_name VARCHAR(10) NOT NULL
    );
    



    ユーザー定義関数

    DELIMITER $$
    CREATE FUNCTION autoInc ()
        RETURNS INT(10)
        BEGIN
            DECLARE getCount INT(10);
    
            SET getCount = (
                SELECT COUNT(test_num)
                FROM tests) + 1;
    
            RETURN getCount;
        END$$
    DELIMITER ;
    



    UDFを使用して挿入

    INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'one');
    INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'two');
    INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'three');
    



    テーブルを調べてください

    SELECT * FROM tests;
    
    +---------+----------+-----------+
    | test_id | test_num | test_name |
    +---------+----------+-----------+
    |       1 |       1  | one       |
    |       2 |       2  | two       |
    |       3 |       3  | three     |
    +---------+----------+-----------+
    

    これらはテストおよび検証されています。私は個人的にこの機能を使用しますが、より柔軟です。



    1. リモートマシンでダンプを復元する

    2. PHP/MySQLビルドツリーメニュー

    3. MySQLのサブ文字列間のテキストの抽出

    4. CodeIgniterMSSQL接続