MySQL中的主键(Primary Key)和外键(Foreign Key)是关系型数据库中用于建立表之间关联的重要概念。
主键和外键广泛应用于各种需要建立表之间关联的场景,例如:
假设我们有两个表:customers 和 orders,其中 orders 表通过外键关联 customers 表。
customers 表CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);orders 表并添加外键CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);原因:插入或更新数据时,外键引用的值在主键表中不存在。
解决方法:
-- 插入主键表数据
INSERT INTO customers (customer_name, email) VALUES ('John Doe', 'john.doe@example.com');
-- 插入外键表数据
INSERT INTO orders (order_date, customer_id) VALUES ('2023-10-01', 1);原因:默认情况下,删除主键表数据时,外键表中引用的数据会被阻止删除。
解决方法:
ON DELETE CASCADE 选项,删除主键表数据时,自动删除外键表中引用的数据。CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);ON DELETE SET NULL 选项,删除主键表数据时,将外键表中引用的字段设置为 NULL。CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE SET NULL
);通过以上内容,您可以全面了解MySQL中主键和外键的概念、优势、类型、应用场景以及常见问题的解决方法。