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中主键和外键的概念、优势、类型、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云