Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY chèn vào bảng kiểm tra hoặc nhật ký

Nếu bạn muốn xem xét sử dụng quy trình đã lưu trữ, bạn có thể sử dụng DECLARE CONTINUE HANDLER . Đây là một ví dụ:

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 ;

Hãy thêm một số dữ liệu, cố gắng chèn một khóa trùng lặp:

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

Kết quả:

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)

Nếu việc kiểm tra là quan trọng ở cấp cơ sở dữ liệu, bạn có thể muốn cấp EXECUTE chỉ quyền để người dùng cơ sở dữ liệu của bạn chỉ có thể gọi các thủ tục được lưu trữ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chọn từ tên bảng động

  2. JDBC, MySQL:nhận các bit vào cột BIT (M! =1)

  3. Tìm kiếm / tìm kiếm các giá trị bị thiếu trong MySQL

  4. Mục nhập trùng lặp cho khóa 'CHÍNH'. Bỏ qua khoảng trắng cho chuỗi

  5. Thay đổi định dạng ngày (trong DB hoặc đầu ra) thành dd / mm / yyyy - PHP MySQL