今天跟大家聊聊我瞎折腾的“fkxd”项目,这名字是我随便起的,大家别多想,没啥特殊含义,就是四个拼音首字母。
事情是这样的,前段时间不是有点空嘛就寻思着搞点事情做做,不能让自己闲着。正好之前一直对数据库的外键(Foreign Key,没错,就是那个FK)有点一知半解的,想彻底搞明白,所以就有了这个“fkxd”项目,就是“外键学习与实践”的首字母缩写。
我就是疯狂查资料,把各种关于外键的概念、作用、优缺点啥的,都翻了个底朝天。书本、博客、论坛,只要能找到的,都看了个遍。 感觉理论知识储备得差不多了,就开始上手实践。
我选了个自己比较熟悉的数据库——MySQL,准备用它来练手。
- 第一步,当然是建表。我建了两个表,一个是“用户表(users)”,一个是“订单表(orders)”。
- 用户表里面有用户ID(user_id)、用户名(username)等字段;订单表里面有订单ID(order_id)、用户ID(user_id)、订单金额(amount)等字段。
建表的时候,我就把订单表里的用户ID(user_id)设置成了外键,关联到用户表里的用户ID(user_id)。
sql
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(255)
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10, 2),
FOREIGN KEY (user_id) REFERENCES users(user_id)
表建好之后,就开始插入数据。我先往用户表里插入了几条用户数据,然后再往订单表里插入订单数据,注意,订单表里的用户ID(user_id)必须是用户表里已经存在的,不然也会报错,这就是外键的约束作用。
插入数据后,我就开始各种测试,比如:
- 尝试删除用户表里一个已经被订单表引用的用户ID,看看会发生什么?
- 尝试更新用户表里一个已经被订单表引用的用户ID,看看会发生什么?
- 尝试往订单表里插入一个用户表里不存在的用户ID,看看会发生什么?
通过这些测试,我对MySQL的外键约束行为有了更直观的了解。 不同的数据库,对外键约束的行为可能不太一样,比如有的数据库默认是禁止删除或更新被引用的数据,有的数据库则可以设置成级联删除或更新。
除了MySQL,我还尝试了PostgreSQL,也做了类似的操作。 PostgreSQL对外键的支持更强大一些,可以设置更多的约束选项,比如ON DELETE CASCADE(级联删除)、ON UPDATE CASCADE(级联更新)等等。
这回“fkxd”项目,虽然很简单,但让我对外键有了更深入的理解。 实践出真知,光看理论是远远不够的,一定要动手操作,才能真正掌握。 以后有机会,我还会继续深入研究数据库的其他特性,跟大家分享我的实践经验。
还没有评论,来说两句吧...