目录

  • 参考源
  • SQL foreign key 约束
  • FOREIGN KEY 作用
  • create table 时的 SQL foreign key 约束
    • MySQL
    • SQL Server / Oracle / MS Access
  • 给 foreign key 命名
  • alter table 时的 SQL foreign key 约束
    • MySQL / SQL Server / Oracle / MS Access
  • 删除 foreign key 约束
    • MySQL
    • SQL Server / Oracle / MS Access

参考源

  • 简单教程

    • https://www.twle.cn/l/yufei/sql/sql-basic-foreignkey.html
  • 菜鸟教程
    • https://www.runoob.com/sql/sql-foreignkey.html

SQL foreign key 约束

什么是 foreign key ? 就是一个表中存储另一个表的主键 ( PRIMARY KEY )

CREATE TABLE lesson (id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,name varchar(32) default '',views int(11) NOT NULL default '0',created_at DATETIME
);CREATE TABLE lesson_views (uniq bigint(20) primary key NOT NULL default '0' ,lession_name varchar(32) default '',lession_id int(11) default '0',date_at  int(11) NOT NULL default '0',views int(11) NOT NULL default '0'
);

lesson_views 中的lesson_id 就是 lesson 表中的主键id
很多人都会有疑问,那我们一般不都是这么建表的? 难道添加的就是 lesson_id 就是 FOREIGN KEY
不是的。我们这么添加,是因为我们开发团队有共识,但是,这种共识数据库系统不认识啊
如果不给lesson_id 添加 FOREIGN KEY约束,数据库系统会以为 lesson_id只不过是一个普通的 int(11) 字段
——简单教程https://www.twle.cn/l/yufei/sql/sql-basic-foreignkey.html

FOREIGN KEY 作用

  1. FOREIGN KEY 约束用于预防破坏表之间连接的行为

    当删除一个 FOREIGN KEY 指向的主表 (lession) 记录时,如果 FOREIGN KEY 所在的表 (lession_views) 存在记录,那么会删除失败

  2. FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一

    当在 FOREIGN KEY 表 ( lession_views ) 插入或更新一条记录,如果 FOREIGN KEY 指向的主表 ( lession ) 不存在该记录,那么插入或者更新失败

create table 时的 SQL foreign key 约束

给一个表添加 foreign key 约束可以使用 foreign key 关键字

MySQL

CREATE TABLE lesson_views (uniq bigint(20) primary key NOT NULL default '0' ,lession_name varchar(32) default '',lession_id int(11) default '0',date_at  int(11) NOT NULL default '0',views int(11) NOT NULL default '0',FOREIGN KEY (lesson_id) REFERENCES lesson(id)
);

SQL Server / Oracle / MS Access

CREATE TABLE lesson_views (uniq bigint(20) primary key NOT NULL default '0' ,lession_name varchar(32) default '',lession_id int(11) FOREIGN KEY REFERENCES lesson(id),date_at  int(11) NOT NULL default '0',views int(11) NOT NULL default '0'
);

给 foreign key 命名

如果想要给 foreign key 约束命名,可以使用 constraint 关键字

CREATE TABLE lesson_views (uniq bigint(20) primary key NOT NULL default '0' ,lesson_name varchar(32) default '',lesson_id int(11) default '0',date_at  int(11) NOT NULL default '0',views int(11) NOT NULL default '0',CONSTRAINT fk_lesson_id FOREIGN KEY (lesson_id) REFERENCES lesson(id)
);

alter table 时的 SQL foreign key 约束

如果一个表已经被创建,我们仍然可以使用 alter table add foreign key 来添加外键约束

MySQL / SQL Server / Oracle / MS Access

ALTER TABLE lesson_views ADD FOREIGN KEY (lesson_id) REFERENCES lesson(id);

如果还想给 foreign key 约束命名,则可以像下面这样使用

ALTER TABLE lesson_views ADD CONSTRAINT fk_lesson_id FOREIGN KEY (lesson_id) REFERENCES lesson(id);

删除 foreign key 约束

如果想要删除一个已经命名的 foreign key 约束,可以使用 drop关键字

MySQL

ALTER TABLE lesson_views DROP FOREIGN KEY fk_lesson_id;

SQL Server / Oracle / MS Access

ALTER TABLE lesson_views DROP CONSTRAINT fk_lesson_id;

SQL学习之foreign key约束相关推荐

  1. SQL语法之FOREIGN KEY 约束

    SQL学习 学习SQL语法 SQL语法 SQL学习 FOREIGN KEY 约束 SQL FOREIGN KEY Constraint on CREATE TABLE SQL Server / Ora ...

  2. SQL学习之primary key约束

    目录 参考源 SQL primary key 约束 primary key create table 时的 SQL primary key 约束 MySQL / SQL Server / Oracle ...

  3. SQL FOREIGN KEY 约束

    一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons" 表: "Orders& ...

  4. INSERT 语句与 FOREIGN KEY 约束冲突

    接上篇"ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 '' 冲突.该冲突发生于数据库 '',表 '', column ''"的问题, 将目标库中的表数 ...

  5. ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Booking_Hotel“冲突。

    错误:SQL Server 创建数据库表的外键时出错 ALTER TABLE 语句与 FOREIGN KEY 约束"FK_Booking_Hotel"冲突.该冲突发生于数据库&qu ...

  6. 【数据库】ALTER TABLE 语句与 FOREIGN KEY 约束““冲突。该冲突发生于数据库““,表““, column ‘‘。

    摘要:微信搜索[三桥君] 本篇讲述的是在已经创建好表且有数据的情况下,增加 FOREIGN KEY 约束的报错问题 一.问题 当我在一张Student表中增加它的classNo外键,外键参照Class ...

  7. SQLServer之修改FOREIGN KEY约束

    原文:SQLServer之修改FOREIGN KEY约束 使用SSMS数据库管理工具修改FOREIGN KEY约束 1.连接数据库,选择数据表->右键点击->选择设计(或者展开键,选择要修 ...

  8. 零基础带你学习MySQL—foreign key 外键(二十六)

    零基础带你学习MySQL-foreign key 外键(二十六) -- 外键演示 -- 创建 主表 my_class CREATE TABLE my_class ( id INT PRIMARY KE ...

  9. 新闻发布系统——INSERT 语句与 FOREIGN KEY 约束XXX冲突。该冲突发生于数据库XXX,表XXX, column 'XXX。

    敲"添加新闻"功能模块的时候,如下: 填写了相应的信息后报错:INSERT 语句与 FOREIGN KEY 约束"XXX"冲突.该冲突发生于数据库"X ...

最新文章

  1. 漫谈云计算、虚拟化、容器化--云平台技术栈05
  2. 结构体名和结构体名是个指针的区别
  3. 产品分析:岛APP,青年文化拍了拍社交赛道
  4. 留个HelpAssistant用户后门,呵呵。
  5. apache2 wordpress目录权限_WSL(ubuntu)的Apache2+CGI(包含CGICC)+SSL的配置
  6. JVM解惑:消失的异常堆栈,log中打印异常堆栈为空
  7. python输入字符串str_python字符串(str)
  8. jQuery事件之传递参数
  9. 服务器图片加载慢_页面提高性能利器_懒加载
  10. 面试官:你背了几道面试题就敢说熟悉Java源码?对不起,我们不招连源码都不会看的人
  11. Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重
  12. python小游戏——魂斗罗这是你的童年吗?
  13. 计算机IP怎么设置成固定的,如何给电脑设置固定IP地址
  14. Face Super-Resolution Guided by 3D Facial Priors(ECCV2020)论文解读
  15. 遗传算法(Genetic Algorithm)过程全面解析
  16. SCARA工业机器人
  17. 新手上路:什么是API接口
  18. python用pip安装numpy完整命令_Python--Numpy安装
  19. sl410k安装debian7.0无线网卡问题解决
  20. (附源码)ssm基于微信小程序的恋上诗词设计与实现 毕业设计 011431

热门文章

  1. 树莓派Odroid等卡片式电脑上搭建NAS教程系列1-Ubuntu系统安装
  2. 【转】超强收藏必备!盘点互联网人必须知道的数据报告网站
  3. 浅谈GXT的一些基本用法
  4. 招商仁和青云卫2号重疾险怎么样?适不适合给小孩子配置?
  5. C++ 的redis 连接库:RedisPlusplus (redis ++)
  6. 各种存储容量的标识说明:1TB等于多少GB?1PB等于多少TB?1EB等于多少PB?
  7. linux下无法删除文件夹,Linux空间中文件或文件夹无法删除的解决办法
  8. Vue 3 迁移策略笔记—— 第30节:新增功能——Teleport
  9. java的dispose方法_java-dispose()方法
  10. 四色定理已利用计算机证明,四色定理已利用