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

MySQL Trigger để ngăn INSERT trong các điều kiện nhất định

Ví dụ 1, MySQL, Bạn có thể hủy chèn đó trong trình kích hoạt bằng signal sqlstate

  1. Tạo bảng của bạn với một cột varchar:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Tạo trình kích hoạt 'trước khi chèn' của bạn để kiểm tra điều kiện và không cho phép.

    mysql> delimiter $$
    mysql> create trigger foo before insert on yar
        -> for each row
        -> begin
        -> if new.val = '' then
        -> signal sqlstate '45000';
        -> end if;
        -> end;$$
    Query OK, 0 rows affected (0.01 sec)
    
  3. Cố gắng chèn vào nơi điều kiện được đáp ứng:

    mysql> delimiter ;
    
    mysql> insert into yar values("");
    ERROR 1644 (45000): Unhandled user-defined exception condition
    
    mysql> insert into yar values ("abc");
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from yar;
    +-----+
    | val |
    +-----+
    | abc |
    +-----+
    1 row in set (0.00 sec)
    

Bạn đã chèn một chuỗi trống, trình kích hoạt thấy nó trống và tăng tín hiệu để ngăn việc chèn.

Ví dụ 2, MySQL, Hủy chèn trong trình kích hoạt bằng cách làm cho dữ liệu vi phạm một ràng buộc không null.

  1. Tạo bảng của bạn với một cột varchar:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Tạo trình kích hoạt 'trước khi chèn' của bạn để kiểm tra điều kiện và không cho phép.

    mysql> delimiter $$
    mysql> create trigger foo before insert on yar
        -> for each row
        -> begin
        -> if new.val = '' then
        -> set new.val = NULL;
        -> end if;
        -> end;$$
    Query OK, 0 rows affected (0.01 sec)
    
  3. Cố gắng chèn vào nơi điều kiện được đáp ứng:

    mysql> delimiter ;
    
    mysql> insert into yar values("");
    ERROR 1048 (23000): Column 'val' cannot be null
    
    mysql> insert into yar values ("abc");
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from yar;
    +-----+
    | val |
    +-----+
    | abc |
    +-----+
    1 row in set (0.00 sec)
    

Bạn đã chèn một chuỗi trống, trình kích hoạt thấy nó trống và thay đổi giá trị thành null, vì vậy việc chèn bị ngăn chặn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kết nối với MySQL trên Amazon EC2 từ Windows?

  2. Làm thế nào để chuyển đổi một chuỗi thành ngày tháng trong MySQL?

  3. Làm cách nào để tôi có thể Chèn nhiều hàng vào một bảng MySQL và trả về các ID mới?

  4. Mytop - Một công cụ hữu ích để theo dõi hiệu suất MySQL / MariaDB trong Linux

  5. Tìm tổng số kết quả trong truy vấn mySQL với offset + giới hạn