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

Các cột trong bảng có Khóa ngoại có thể là NULL không?

Có, bạn chỉ có thể thực thi ràng buộc khi giá trị không phải là NULL. Có thể dễ dàng kiểm tra điều này với ví dụ sau:

CREATE DATABASE t;
USE t;

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT NULL, 
                    parent_id INT NULL,
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;


INSERT INTO child (id, parent_id) VALUES (1, NULL);
-- Query OK, 1 row affected (0.01 sec)


INSERT INTO child (id, parent_id) VALUES (2, 1);

-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key 
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))

Lần chèn đầu tiên sẽ vượt qua vì chúng tôi chèn NULL trong parent_id . Lần chèn thứ hai không thành công do ràng buộc khóa ngoại, vì chúng tôi đã cố gắng chèn một giá trị không tồn tại trong parent bảng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quản lý tài khoản người dùng, vai trò, quyền, xác thực PHP và MySQL

  2. Các bước cài đặt MySQL8 trên CentOS

  3. Điền JFreechart TimeSeriesCollection từ Mysql DB?

  4. Truy vấn chèn MySQL không hoạt động với mệnh đề WHERE

  5. MySQL INSERT IF (câu lệnh if tùy chỉnh)