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

Thực thi các giá trị duy nhất trên hai bảng

Bạn không thể khai báo ràng buộc DUY NHẤT trên nhiều bảng và MySQL hoàn toàn không hỗ trợ ràng buộc CHECK. Nhưng bạn có thể thiết kế một trình kích hoạt để tìm kiếm giá trị phù hợp trong bảng khác. Đây là một tập lệnh SQL thử nghiệm:

DROP TABLE IF EXISTS foo;
CREATE TABLE FOO (username VARCHAR(10) NOT NULL);

DROP TABLE IF EXISTS bar;
CREATE TABLE BAR (username VARCHAR(10) NOT NULL);

DROP TRIGGER IF EXISTS unique_foo;
DROP TRIGGER IF EXISTS unique_bar;

DELIMITER //

CREATE TRIGGER unique_foo BEFORE INSERT ON foo
FOR EACH ROW BEGIN
  DECLARE c INT;
  SELECT COUNT(*) INTO c FROM bar WHERE username = NEW.username;
  IF (c > 0) THEN
    -- abort insert, because foo.username should be NOT NULL
    SET NEW.username = NULL;
  END IF;
END//

CREATE TRIGGER unique_bar BEFORE INSERT ON bar
FOR EACH ROW BEGIN
  DECLARE c INT;
  SELECT COUNT(*) INTO c FROM foo WHERE username = NEW.username;
  IF (c > 0) THEN
    -- abort insert, because bar.username should be NOT NULL
    SET NEW.username = NULL;
  END IF;
END//

DELIMITER ;

INSERT INTO foo VALUES ('bill');  -- OK

INSERT INTO bar VALUES ('bill');  -- Column 'username' cannot be null

Bạn cũng cần các trình kích hoạt BẬT CẬP NHẬT tương tự cho mỗi bảng, nhưng bạn không cần bất kỳ trình kích hoạt nào BẬT XÓA.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chèn vào thủ tục được lưu trữ với các tham số MYSQL không hoạt động

  2. mysql TẢI THÔNG TIN DỮ LIỆU với khóa chính tự động tăng

  3. Chuyển đổi bảng từ MyISAM sang INNODB

  4. Docker Không thể liên kết đến một vùng chứa không chạy

  5. Chức năng xếp hạng trong MySQL