当前位置: 首页 > news >正文

MySQL(8)什么是主键和外键?

主键(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 语句或图形化工具来管理主键和外键。

http://www.xdnf.cn/news/394561.html

相关文章:

  • Ubuntu 22虚拟机【网络故障】快速解决指南
  • Linux:44线程互斥lesson32
  • 【言语】刷题1
  • 手机当电脑播放器 soundwire
  • Python异常处理全解析:从基础到高级应用实战
  • 《大模型微调实战:Llama 3.0全参数优化指南》
  • js前端分片传输大文件+mongoose后端解析
  • 大数据基础——Ubuntu 安装
  • 洛谷题目:P1673 [USACO05FEB] Part Acquisition S 题解(本题简)
  • 基于zernike 拟合生成包裹训练数据-可自定义拟合的项数
  • Vue Router全局拦截
  • 《Vuejs 设计与实现》第 4 章(响应式系统)( 下 )
  • ES 面试题系列「二」
  • C++ asio网络编程(4)异步读写操作及注意事项
  • (十二)Java枚举类深度解析:从基础到高级应用
  • C++八股——函数对象
  • 工具篇-扣子空间MCP,一键做游戏,一键成曲
  • C/C++实践(五)C++内存管理:从基础到高阶的系统性实现指南
  • 《从零构建一个简易的IOC容器,理解Spring的核心思想》
  • 命令行解释器中shell、bash和zsh的区别
  • LangChain对话链:打造智能多轮对话机器人
  • C 语言报错 xxx incomplete type xxx
  • CTFd CSRF 校验模块解读
  • 表加字段如何不停机
  • NCCL N卡通信机制
  • 《Effective Python》第1章 Pythonic 思维详解——始终用括号包裹单元素元组
  • 用一张网记住局域网核心概念:从拓扑结构到传输介质的具象化理解
  • 懒人美食帮SpringBoot订餐系统开发实现
  • Linux网络编程day9 libevent库
  • 代码随想录算法训练营第60期第三十二天打卡