主键(Primary Key)和外键(Foreign Key)是关系数据库中用于定义和维护表之间关系的重要概念。以下是详细的解释、示例代码和操作步骤。
主键(Primary Key)
定义
主键是表中的一个或多个字段,其值唯一地标识表中的每一行。主键的主要作用是确保表中的每一行具有唯一性,并且主键列不能包含 NULL 值。
特性
- 唯一性:主键中的值必须唯一。
- 非空性:主键列不能包含 NULL 值。
- 自动索引:在大多数数据库系统中,主键会自动创建一个索引,以提高查询速度。
示例
我们创建一个名为 users
的表,并将 id
列设置为主键:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
执行示例:
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.02 sec)
外键(Foreign Key)
定义
外键是一个或多个字段,其值在另一张表的主键或唯一键中存在。外键用于建立和维护两个表之间的关系,确保数据的一致性和完整性。
特性
- 引用完整性:外键用于确保引用的行在另一张表中存在。
- 级联操作:可以设置级联删除或更新,以确保在父表中修改或删除数据时,子表中的数据同步更新或删除。
示例
假设我们有一个 orders
表,其中 user_id
列是外键,引用 users
表中的 id
列。这表示每个订单都与一个用户相关联。
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
执行示例:
mysql> CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Query OK, 0 rows affected (0.02 sec)
操作示例
以下是一个完整的示例,包括创建数据库、添加主键和外键以及插入数据的过程:
-- 连接到 MySQL 服务器
mysql -u root -p
-- 创建数据库
CREATE DATABASE mydatabase;
-- 选择数据库
USE mydatabase;
-- 创建 users 表并设置主键
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建 orders 表并设置外键
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 插入数据到 users 表
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');
-- 插入数据到 orders 表
INSERT INTO orders (user_id) VALUES (1);
INSERT INTO orders (user_id) VALUES (2);
使用图形化工具管理主键和外键
使用 MySQL Workbench
-
创建主键:
- 打开 MySQL Workbench 并连接到 MySQL 服务器。
- 在左侧的导航窗格中,右键点击要修改的表(例如
users
),选择 “Alter Table…”。 - 在弹出的窗口中,选择要设置为主键的列(例如
id
),勾选 “PK”(Primary Key)复选框,然后点击 “Apply”。
-
创建外键:
- 打开 MySQL Workbench 并连接到 MySQL 服务器。
- 在左侧的导航窗格中,右键点击要修改的表(例如
orders
),选择 “Alter Table…”。 - 在弹出的窗口中,切换到 “Foreign Keys” 选项卡,点击 “Add Foreign Key” 按钮。
- 设置外键名称,选择引用的表和列(例如
users(id)
),然后点击 “Apply”。
总结
主键和外键是关系型数据库中用于确保数据完整性和一致性的重要机制。通过主键,可以唯一标识表中的每一行;通过外键,可以建立和维护表之间的关系。在实际操作中,可以通过 SQL 语句或图形化工具来管理主键和外键。