MySQL主键和外键详细的解释和操作步骤

 更新时间:2025年12月23日 08:42:27   作者:辞暮尔尔-烟火年年  
主键是表中的一列或一组列,用于唯一标识表中的每一行数据,每个表只能有一个主键,并且主键的值不能重复,这篇文章主要介绍了MySQL主键和外键详细的解释和操作步骤,需要的朋友可以参考下

主键(Primary Key)和外键(Foreign Key)是关系数据库中用于定义和维护表之间关系的重要概念。以下是详细的解释、示例代码和操作步骤。

主键(Primary Key)

定义

主键是表中的一个或多个字段,其值唯一地标识表中的每一行。主键的主要作用是确保表中的每一行具有唯一性,并且主键列不能包含 NULL 值。

特性

  1. 唯一性:主键中的值必须唯一。
  2. 非空性:主键列不能包含 NULL 值。
  3. 自动索引:在大多数数据库系统中,主键会自动创建一个索引,以提高查询速度。

示例

我们创建一个名为 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)

定义

外键是一个或多个字段,其值在另一张表的主键或唯一键中存在。外键用于建立和维护两个表之间的关系,确保数据的一致性和完整性。

特性

  1. 引用完整性:外键用于确保引用的行在另一张表中存在。
  2. 级联操作:可以设置级联删除或更新,以确保在父表中修改或删除数据时,子表中的数据同步更新或删除。

示例

假设我们有一个 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

  1. 创建主键

    • 打开 MySQL Workbench 并连接到 MySQL 服务器。
    • 在左侧的导航窗格中,右键点击要修改的表(例如 users),选择 “Alter Table…”。
    • 在弹出的窗口中,选择要设置为主键的列(例如 id),勾选 “PK”(Primary Key)复选框,然后点击 “Apply”。
  2. 创建外键

    • 打开 MySQL Workbench 并连接到 MySQL 服务器。
    • 在左侧的导航窗格中,右键点击要修改的表(例如 orders),选择 “Alter Table…”。
    • 在弹出的窗口中,切换到 “Foreign Keys” 选项卡,点击 “Add Foreign Key” 按钮。
    • 设置外键名称,选择引用的表和列(例如 users(id)),然后点击 “Apply”。

总结

主键和外键是关系型数据库中用于确保数据完整性和一致性的重要机制。通过主键,可以唯一标识表中的每一行;通过外键,可以建立和维护表之间的关系。在实际操作中,可以通过 SQL 语句或图形化工具来管理主键和外键。

到此这篇关于MySQL主键和外键详细的解释和操作步骤的文章就介绍到这了,更多相关MySQL主键和外键内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL判断数据存不存在的正确做法(99%的人还在写错!)

    SQL判断数据存不存在的正确做法(99%的人还在写错!)

    业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录,这篇文章主要介绍了SQL判断数据存不存在的正确做法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • MySQL 数据丢失排查案例

    MySQL 数据丢失排查案例

    这篇文章主要分享了MySQL 数据丢失排查的一个案例,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • MYSQL LAG()与LEAD()的区别

    MYSQL LAG()与LEAD()的区别

    MYSQL LAG()与LEAD()这两个函数是偏移量函数,可以查出一个字段的前面N个值或者后面N个值,本文详细的介绍一下这两个函数的区别,感兴趣的可以了解一下
    2023-05-05
  • MySQL使用Replace操作时造成数据丢失的问题解决

    MySQL使用Replace操作时造成数据丢失的问题解决

    这篇文章主要给大家介绍了关于MySQL使用Replace操作时造成数据丢失问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • CentOS7.5 安装MySql的教程

    CentOS7.5 安装MySql的教程

    这篇文章主要介绍了CentOS7.5 安装MySql的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • MySQL如何使用授权命令grant

    MySQL如何使用授权命令grant

    这篇文章主要介绍了MySQL如何使用授权命令grant,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • MySQL性能优化的一些技巧帮助你的数据库

    MySQL性能优化的一些技巧帮助你的数据库

    你完成了你的品牌新的应用程序,一切工作就像一个魅力;突然间,一个大爆发的用户你的MySQL服务器,您的网站已关闭,是什么问题导致的呢?以下是MySQL性能优化的一些技巧,将帮助你,帮助你的数据库
    2013-01-01
  • 关于mysql create routine 权限的一些说明

    关于mysql create routine 权限的一些说明

    下面小编就为大家带来一篇关于mysql create routine 权限的一些说明。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL数据库闭包Closure Table表实现示例

    MySQL数据库闭包Closure Table表实现示例

    本文主要介绍了MySQL数据库闭包Closure Table表实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • MySQL二进制日志(bin_log)的作用与使用方法

    MySQL二进制日志(bin_log)的作用与使用方法

    BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog,这篇文章主要给大家介绍了关于MySQL二进制日志(bin_log)的作用与使用方法的相关资料,需要的朋友可以参考下
    2024-06-06

最新评论