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

MySQL ONDUPLICATEKEYを監査またはログテーブルに挿入します

    ストアドプロシージャの使用を検討する場合は、 DECLARE CONTINUE HANDLER 。次に例を示します:

    CREATE TABLE users (
        username    VARCHAR(30), 
        first_name  VARCHAR(30), 
        last_name   VARCHAR(30),
        PRIMARY KEY (username)
    );
    
    CREATE TABLE audit_table (timestamp datetime, description varchar(255));
    
    DELIMITER $$
    CREATE PROCEDURE add_user 
           (in_username    VARCHAR(30),
            in_first_name  VARCHAR(30),
            in_last_name   VARCHAR(30))
        MODIFIES SQL DATA
    BEGIN
        DECLARE duplicate_key INT DEFAULT 0;
        BEGIN
            DECLARE EXIT HANDLER FOR 1062 SET duplicate_key = 1;
    
            INSERT INTO users (username, first_name, last_name)
                   VALUES (in_username, in_first_name, in_last_name);
        END;
    
        IF duplicate_key = 1 THEN
            INSERT INTO audit_table VALUES(NOW(), 'Duplicate key ignored');
        END IF;
    END$$
    DELIMITER ;
    

    重複するキーを挿入して、データを追加してみましょう:

    CALL add_user('userA', 'Bob', 'Smith');
    CALL add_user('userB', 'Paul', 'Green');
    CALL add_user('userA', 'Jack', 'Brown');
    

    結果:

    SELECT * FROM users;
    +----------+------------+-----------+
    | username | first_name | last_name |
    +----------+------------+-----------+
    | userA    | Bob        | Smith     |
    | userB    | Paul       | Green     |
    +----------+------------+-----------+
    2 rows in set (0.00 sec)
    
    SELECT * FROM audit_table;
    +---------------------+-----------------------+
    | timestamp           | description           |
    +---------------------+-----------------------+
    | 2010-10-07 20:17:35 | Duplicate key ignored |
    +---------------------+-----------------------+
    1 row in set (0.00 sec)
    

    データベースレベルで監査が重要な場合は、EXECUTEを付与することをお勧めします。 データベースユーザーがストアドプロシージャのみを呼び出すことができるようにするための権限のみ。



    1. CronjobまたはMySQLイベント?

    2. 別の選択クエリの結果を含むデータをテーブルに挿入します

    3. SQL Serverの日時LIKEselect?

    4. SQLServerの新しいドライバー…知っておくべきこと