Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY вмъкнете в таблица за одит или журнал

Ако искате да обмислите използването на съхранена процедура, можете да използвате 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете от същата таблица като Вмъкване или Актуализация

  2. Как да експортирате и импортирате съществуващ потребител (с неговите привилегии!)

  3. Как да архивирате съхранените процедури в MySQL

  4. MySQL:Пребройте записи от една таблица и след това актуализирайте друга

  5. Изключение на mySQL:Не може да се свърже с нито един от посочените хостове на MySQL. чрез C#