-
mysql 之foreign key
2020-05-11 11:58:40这篇文章的外键语法没有论证 ...如图有两张表,classId 是T_Student的外键,是T_class 表的主键, 如果我们要删除T_class 表中classId为1的字段,程序是会报错的,因为t_student表中有数据和classId为1的字段关联外部关键字
在以后我们统一将外部关键字叫做外键,外键就是另一张表中的主键。
外键是副表上面的,依赖于主表的主键。
外键作用
答:外键的主要作用就是保持数据的一致性,完整性。
外键约束的示例
这么设置外键呢,答案是看表与表之间的关系
方法如下:
左边是学生表,右边是班级表。一个学生是一个班级的,一个班级应该有多个学生,学生:班级应该是1:n的关系
将主键放在1这个上面,外键放在n这个上面。
如图有两张表,classId 是T_Student的 外键,是T_class 表的主键, 如果我们要删除T_class 表中classId为1的字段,程序是会报错的,因为t_student表中有数据和classId为1的字段关联了,是不能删除的,这样子就保证了数据的一致性和完整性。继续问:那怎么才能删除呢?
接着答:需要先删除T__student表中classId为1的两个字段。如何给表添加外部关键字
在MySQL中给表中字段添加外键约束的语法规则如下:CONSTRAINT 外键名 FOREIGN KEY 字段名 REFERENCES 主表名(主键名)
举个例子:现在有两张表,t_emp、t_dept如下。
t_emp表
t_dept表
字段名称 数据类型 备注
id INT 员工编号
name VARCHAR(22) 员工姓名
deptId INT 部门ID(外键类型必须和对应主键类型一直)
我们来创建两张表,并给员工表(t_emp)添加外键:CREATE TABLE t_dept
(
deptId INT PRIMARY KEY,
name VARCHAR(22),
location VARCHAR(50)
);
CREATE TABLE t_emp
(
id INT PRIMARY KEY,
name VARCHAR(22),
deptId INT,
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES t_dept(deptId)
);
实际操作如图:
外键约束,外键字段,外键值
外键约束:一种约束。
外键字段:外键约束的字段。
外键值:外键字段的值,可以为null。外键怎么分析
外键是主副表的联系。主副表之间的关系是1:n。比如说班级表:学生表是1:n。一个班级有多个学生,那么关系就是1:n.
主副表的创建,删除以及表中数据的删除,插入顺序。
- 创建:先创建主表,再创建副表。
- 删除:先删除附表,再删除主表。
- 表中数据删除:先删除子表,再删除主表。
- 表中数据的插入:先插入主表,再插入副表。
外键和主键之间的关系。(很重要)
子表中的外键必须依赖于主表中的字段必须要有唯一性约束,不能重复,不一定是主键。
-
Python核心编程第二版(中文)
2015-04-23 16:40:137.6.4 如何删除集合中的成员和集合 7.7 集合类型操作符 7.7.1 标准类型操作符(所有的集合类型) 7.7.2 集合类型操作符(所有的集合类型) 7.7.3 集合类型操作符(仅适用于可变集合) 7.8 内建函数 7.8.1 ... -
Python核心编程(中文第二版)
2009-10-02 12:08:1410.10 (现在)为什么用异常 10.11 到底为什么要异常 10.12 异常和sys模块 10.13 相关模块 10.14 练习 第11章 函数和函数式编程 11.1 什么是函数? 11.1.1 函数vs过程 ... -
SQL Server 2008宝典--详细书签版(第1/2部分)
2013-02-06 13:11:305.8.1 在SQL Server Management Studio中删除数据库 145 5.8.2 用Drop database语句删除数据库 146 5.9 收缩数据库 146 5.9.1 自动收缩数据库 147 5.9.2 手动收缩数据库 147 5.9.3 手动收缩数据库文件 149 ... -
2009达内SQL学习笔记
2010-02-10 19:46:58select:从一个或多个表中检索一个或多个数据列。包含信息:想选择什么表,从什么地方选择。必须要有From子句。(最常用) 当从多张表里查询的时候,会产生笛卡尔积;可用条件过滤它。 当两个表有相同字段时必须加... -
MySQL命令大全
2018-01-15 11:19:176、删除表中数据 命令:delete from 表名 where 表达式 例如:删除表 MyClass中编号为 的记录 mysql> delete from MyClass where id=1; 7、修改表中数据:update 表名 set 字段=新值,…where 条件 mysql> ... -
MYSQL常用命令大全
2011-05-30 13:31:246、删除表中数据 命令:delete from 表名 where 表达式 例如:删除表 MyClass中编号为1 的记录 mysql> delete from MyClass where id=1; 7、修改表中数据:update 表名 set 字段=新值,… where 条件 mysql> update ... -
Java面试宝典2020修订版V1.0.1.doc
2020-05-21 19:24:48用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 56 2、sleep() 和 wait() 有什么区别? 56 3、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 56 4、线程... -
图书管理系统毕业设计+源码-java
2012-05-06 13:45:09例如,要从表中检索所有命名为Products的记录,输入Select *from products。现在我们已经检索出了一个记录集,必须使用DataBinder控件或DataGrid控件绑定它。为该datasource控件命名为DataSource1,然后在设置它的... -
SQL语法大全
2014-03-30 11:00:11sql="select * from 数据表 where 字段名 like \'%字段值%\' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 in (\'值... -
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串
2017-05-06 20:26:52日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--详细书签版
2013-02-04 12:43:527.7 用GROUPING()来扩展报告 186 7.8 使用GROUPING_ID()来扩展报告 187 7.9 GROUPING SETS与ROLLUP() 191 7.10 GROUP BY局限性 193 7.11 小结 196 第8章 分析函数 197 8.1 示例数据 197 8.2 分析函数剖析 198... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码
2013-02-04 12:49:337.7 用GROUPING()来扩展报告 186 7.8 使用GROUPING_ID()来扩展报告 187 7.9 GROUPING SETS与ROLLUP() 191 7.10 GROUP BY局限性 193 7.11 小结 196 第8章 分析函数 197 8.1 示例数据 197 8.2 分析函数剖析 198... -
经典全面的SQL语句大全
2009-11-23 16:31:09Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查) 语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1... -
net学习笔记及其他代码应用
2010-11-16 18:15:0928.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ... -
《从新手到高手——C++全方位学习》.pdf【第一部分】
2011-06-23 16:12:138.3.3 用指针删除堆中空间 102 8.4 动态内存 103 8.4.1 内存泄漏 103 8.4.2 在堆中创建对象 104 8.4.3 在堆中删除对象 105 8.4.4 访问堆中的数据成员 105 8.4.5 在构造函数中开辟内存空间 106 8.4.6 对象在栈... -
新生代中为什么要分为Eden和Survivor。 4.4.5 JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数。 4.4.6 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理...
-
最新Java面试宝典pdf版
2011-08-31 11:29:22用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 32 49. 下面两个方法同步吗?(自己... -
你必须知道的495个C语言问题
2015-10-16 14:14:281.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef和#define有什么区别? 1.14 我似乎不能成功定义一个链表。我试过typedefstruct{char*item;NODEPTRnext;}*NODEPTR;但是编译器... -
Java面试宝典2010版
2011-06-27 09:48:27用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 47、sleep() 和 wait() 有什么区别? 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 49. 下面两个方法同步吗?(自己发明) ... -
arcgis工具
2012-10-22 22:37:31使用一个属性字段作为超链 在内容表中右击包含一个超链接字段的图层,然后点击properties ,单击Display选项卡。选中Supprt Hyper3. Hyperlinks using field选项,单击下拉箭头并点击一个字段。 单击Document or URL... -
java面试宝典2011整理有答案
2011-11-09 13:36:06用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 32 49. 下面两个方法同步吗?(自己... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:181.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过typedef struct{char *item; NODEPTR next;}* ... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:091.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过typedef struct{char *item; NODEPTR next;}* ... -
asp.net知识库
2015-06-18 08:45:45将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级... -
SQL Server 2008实战(SQL Server程序员和DBA不可或缺的权威参考手册)--详细书签版
2013-02-06 11:52:194.1.6 删除表中的列 131 4.1.7 报告表信息 132 4.1.8 删除表 132 4.2 排序规则基础 133 4.2.1 查看排序规则元数据 133 4.2.2 指定列的排序规则 134 4.3 键 134 4.3.1 创建有主键的表 135 4.3.2 为... -
MySQL 5权威指南(第3版)--详细书签版
2013-02-05 15:44:001.1.3 数据表、记录、字段、查询、SQL、索引和键 3 1.2 MySQL 4 1.3 MySQL的不足 6 1.4 MySQL的版本编号 7 1.4.1 Alpha、Beta、Gamma、Production(Generally Available) 8 1.4.2 按版本编号排列的MySQL功能... -
Simple Down 简单下载系统 v6.2.zip
2019-07-06 12:30:58新增一个下载记录表和几个字段。 1 修改表名为小写。可以使用这样的SQL语句: rename table HBDX_BASEINFO to hbdx_baseinfo; 2 修改字段名为小写。这个可以手动修改。使用SQL语句修改的方法暂时没有找到统一的。... -
jdbc基础和参考
2014-01-08 13:04:171.写一条恒成立的select语句,无论你输入的条件是什么,总是能讲表中的所有数据输出 select id,last_name from s_emp where '1' ='1'; where 1=1; findByOption(Integer age,String province,String gender){ ...
-
JMETER 性能测试基础课程
-
零基础极简以太坊智能合约开发环境搭建并开发部署
-
OC.Gen-X.2.9.2.dmg
-
选择排序算法-----简单选择排序算法
-
目标追踪CVPR,ICCV,ECCV论文合集链接
-
access应用的3个开发实例
-
libFuzzer视频教程
-
2021-02-28
-
moveit-next:应用程序可构建NLW04 da ROCKETSEAT-源码
-
佳能打印机G2800不需要软件的清零方法.txt
-
基于SSH的任务调度系统的设计与实现.rar
-
装备制造行业智能制造方案.pptx
-
PowerBI重要外部工具详解
-
中国电信云网融合2030技术白皮书.pdf
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
ELF视频教程
-
只需要几秒 超强win10关闭自动更新工具.rar
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
svg_pnf_Selector-源码
-
有大佬知道 淘宝 top sign怎么算吗?