主键用于唯一标识表中的每一行数据,而外键则用于建立和维护表与表之间的关系
正确设置主键和外键,不仅能够提高数据查询的效率,还能有效防止数据冗余和错误
本文将详细介绍如何在MySQL中创建表并设置主键和外键
一、主键(Primary Key) 主键是表中的一列或多列的组合,其值能够唯一标识表中的每一行
主键具有以下几个特性: 1.唯一性:主键列中的值必须是唯一的,不允许有重复值
2.非空性:主键列不能包含NULL值
3.自动索引:在大多数数据库系统中,主键会自动创建一个索引,以提高查询速度
在MySQL中,创建主键的语法主要有两种: 1. 在列定义时直接指定主键: sql CREATE TABLE 表名( 列名 数据类型 PRIMARY KEY, 其他列 数据类型, ... ); 例如,创建一个名为`users`的表,并将`id`列设置为主键: sql 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 ); 2. 在列定义之外指定主键: sql CREATE TABLE 表名( 列名 数据类型, 其他列 数据类型, ..., PRIMARY KEY(列名) ); 例如,创建一个名为`students`的表,并将`id`列设置为主键: sql CREATE TABLE students( id INT, name VARCHAR(50) NOT NULL, age INT, PRIMARY KEY(id) ); 如果表已经创建好,可以通过`ALTER TABLE`语句添加主键: sql ALTER TABLE 表名 ADD PRIMARY KEY(列名); 例如,为`students`表添加主键: sql ALTER TABLE students ADD PRIMARY KEY(id); 二、外键(Foreign Key) 外键是一个或多个字段,其值在另一张表的主键或唯一键中存在
外键用于建立和维护两个表之间的关系,确保数据的一致性和完整性
外键具有以下几个特点: 1.引用完整性:外键用于确保引用的行在另一张表中存在
2.级联操作:可以设置级联删除或更新,以确保在父表中修改或删除数据时,子表中的数据同步更新或删除
在MySQL中,创建外键的语法为: sql CREATE TABLE 表名( 列名 数据类型, 其他列 数据类型, ..., CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES参照表(参照字段) ON DELETE参照操作 ON UPDATE参照操作 ); 其中,参照操作可以是以下几种之一: -`RESTRICT`:拒绝参照表删除或更新参照字段
`RESTRICT`和`NO ACTION`相同,但`RESTRICT`只在MySQL中生效
-`CASCADE`:删除或更新参照表的参照字段时,外键表的记录同步删除或更新
-`SET NULL`:删除或更新参照表的参照字段时,外键表的外键设为NULL
例如,创建一个名为`departments`的表和名为`employees`的表,并将`employees`表中的`department_id`列设置为外键,引用`departments`表中的`id`列: sql CREATE TABLE departments( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); CREATE TABLE employees( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, department_id INT, FOREIGN KEY(department_id) REFERENCES departments(id) ON DELETE SET NULL ON UPDATE CASCADE ); 如果表已经创建好,可以通过`ALTER TABLE`语句添加外键: sql ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES参照表(参照字段) ON DELETE参照操作 ON UPDATE参照操作; 例如,为`employees`表添加外键: sql ALTER TABLE employees ADD CONSTRAINT fk_department FOREIGN KEY(department_id) REFERENCES departments(id) ON DELETE SET NULL ON UPDATE CASCADE; 三、实际应用示例 在实际应用中,主键和外键通常用于建立复杂的表关系
例如,假设我们有两个表:`students`(学生表)和`courses`(课程表),它们之间存在多对多的关系,即一个学生可以选修多门课程,而一门课程也可以被多个学生选修
为了表示这种关系,我们可以创建一个名为`student_courses`的关联表
首先,创建`students`表和`courses`表: sql CREATE TABLE students( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); CREATE TABLE courses( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); 然后,创建`student_courses`关联表,并将`student_id`和`course_id`列设置为复合主键,同时将它们分别设置为外键,引用`students`表和`courses`表中的主键: sql CREATE TABLE student_courses( student_id INT, course_id INT, PRIMARY KEY(student_id, course_id), FOREIGN KEY(student_id) REFERENCES students(id), FOREIGN KEY(course_id) REFERENCES courses(id) ); 通过这种方式,我们可以方便地查询学生和课程之间的关联关系
例如,查找选修了某门课程的所有学生,或者查找某个学生选修的所