SQL学习之foreign key约束
目录
- 参考源
- 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 作用
FOREIGN KEY 约束用于预防破坏表之间连接的行为
当删除一个 FOREIGN KEY 指向的主表 (lession) 记录时,如果 FOREIGN KEY 所在的表 (lession_views) 存在记录,那么会删除失败
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约束相关推荐
- SQL语法之FOREIGN KEY 约束
SQL学习 学习SQL语法 SQL语法 SQL学习 FOREIGN KEY 约束 SQL FOREIGN KEY Constraint on CREATE TABLE SQL Server / Ora ...
- SQL学习之primary key约束
目录 参考源 SQL primary key 约束 primary key create table 时的 SQL primary key 约束 MySQL / SQL Server / Oracle ...
- SQL FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons" 表: "Orders& ...
- INSERT 语句与 FOREIGN KEY 约束冲突
接上篇"ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 '' 冲突.该冲突发生于数据库 '',表 '', column ''"的问题, 将目标库中的表数 ...
- ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Booking_Hotel“冲突。
错误:SQL Server 创建数据库表的外键时出错 ALTER TABLE 语句与 FOREIGN KEY 约束"FK_Booking_Hotel"冲突.该冲突发生于数据库&qu ...
- 【数据库】ALTER TABLE 语句与 FOREIGN KEY 约束““冲突。该冲突发生于数据库““,表““, column ‘‘。
摘要:微信搜索[三桥君] 本篇讲述的是在已经创建好表且有数据的情况下,增加 FOREIGN KEY 约束的报错问题 一.问题 当我在一张Student表中增加它的classNo外键,外键参照Class ...
- SQLServer之修改FOREIGN KEY约束
原文:SQLServer之修改FOREIGN KEY约束 使用SSMS数据库管理工具修改FOREIGN KEY约束 1.连接数据库,选择数据表->右键点击->选择设计(或者展开键,选择要修 ...
- 零基础带你学习MySQL—foreign key 外键(二十六)
零基础带你学习MySQL-foreign key 外键(二十六) -- 外键演示 -- 创建 主表 my_class CREATE TABLE my_class ( id INT PRIMARY KE ...
- 新闻发布系统——INSERT 语句与 FOREIGN KEY 约束XXX冲突。该冲突发生于数据库XXX,表XXX, column 'XXX。
敲"添加新闻"功能模块的时候,如下: 填写了相应的信息后报错:INSERT 语句与 FOREIGN KEY 约束"XXX"冲突.该冲突发生于数据库"X ...
最新文章
- 漫谈云计算、虚拟化、容器化--云平台技术栈05
- 结构体名和结构体名是个指针的区别
- 产品分析:岛APP,青年文化拍了拍社交赛道
- 留个HelpAssistant用户后门,呵呵。
- apache2 wordpress目录权限_WSL(ubuntu)的Apache2+CGI(包含CGICC)+SSL的配置
- JVM解惑:消失的异常堆栈,log中打印异常堆栈为空
- python输入字符串str_python字符串(str)
- jQuery事件之传递参数
- 服务器图片加载慢_页面提高性能利器_懒加载
- 面试官:你背了几道面试题就敢说熟悉Java源码?对不起,我们不招连源码都不会看的人
- Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重
- python小游戏——魂斗罗这是你的童年吗?
- 计算机IP怎么设置成固定的,如何给电脑设置固定IP地址
- Face Super-Resolution Guided by 3D Facial Priors(ECCV2020)论文解读
- 遗传算法(Genetic Algorithm)过程全面解析
- SCARA工业机器人
- 新手上路:什么是API接口
- python用pip安装numpy完整命令_Python--Numpy安装
- sl410k安装debian7.0无线网卡问题解决
- (附源码)ssm基于微信小程序的恋上诗词设计与实现 毕业设计 011431
热门文章
- 树莓派Odroid等卡片式电脑上搭建NAS教程系列1-Ubuntu系统安装
- 【转】超强收藏必备!盘点互联网人必须知道的数据报告网站
- 浅谈GXT的一些基本用法
- 招商仁和青云卫2号重疾险怎么样?适不适合给小孩子配置?
- C++ 的redis 连接库:RedisPlusplus (redis ++)
- 各种存储容量的标识说明:1TB等于多少GB?1PB等于多少TB?1EB等于多少PB?
- linux下无法删除文件夹,Linux空间中文件或文件夹无法删除的解决办法
- Vue 3 迁移策略笔记—— 第30节:新增功能——Teleport
- java的dispose方法_java-dispose()方法
- 四色定理已利用计算机证明,四色定理已利用