Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY masukkan ke dalam audit atau tabel log

Jika Anda ingin mempertimbangkan untuk menggunakan prosedur tersimpan, Anda dapat menggunakan DECLARE CONTINUE HANDLER . Ini contohnya:

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 ;

Mari tambahkan beberapa data, coba masukkan kunci duplikat:

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

Hasil:

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)

Jika audit penting pada tingkat basis data, Anda mungkin ingin memberikan EXECUTE hanya izin sehingga pengguna database Anda hanya dapat memanggil prosedur tersimpan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel LeftBergabung di mana

  2. Bagaimana cara menetapkan sql tanggal &waktu penuh menggunakan Java, dan bukan hanya tanggal?

  3. Upaya tidak valid untuk Membaca saat pembaca ditutup

  4. Bagaimana kita bisa membedakan LEFT OUTER JOIN vs Left Join

  5. MySQL:Cara Mendapatkan Panjang Teks Dalam Kolom