外键

浅谈 MySQL的外键的作用

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL中外键的介绍: 由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。 设置外键约束的两个表之间会具有父子关系,即子表中外键的字段的取值范围由父表所决定 设置外键一定程度上降低数据库的速度 子表的外键字段的数据类型和父表中要一致 关于外键的设置: 属性名: 数据类型 属性名: 数据类型 ....... ) 实验的环境试验: 两个表中的具体的字段 设置子表中的外键约束字段 deptno 关联到父表中的 deptno 字段(注意这两个字段的名字可以是不相同的,但表达的意思是相同的) 验证子表中的取值范围由父表决定: 在父表中添加一些字段: 此时在子表中添加字段 发现此时在子表中只能选择1和2 不能添加其他字段 验证外键的完整性: 当我们删除父表中的字段的时候子表中的字段也被删除我们删除父表中deptno 字段为1 ,此时发现子表中的字段只剩下一个2 当我们修改父表中deptno字段的值为3时,发现子表中的字段也改变为3 出处:https://www.cnblogs.com/yubenliu/p/5810788.html 文章来源: 浅谈 MySQL的外键的作用

MySQL 主键 外键 索引

匿名 (未验证) 提交于 2019-12-02 22:06:11
主键: 外键:   假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。   在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;   在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。   很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)――Pc表中的CPU型号受到Parts 表中型号的约束。   首先我们来创建 parts 表: CREATE TABLE parts ( ... 字段定义 ..., model VARCHAR(20) NOT NULL, ... 字段定义 ... );   接下来是Pc表: CREATE TABLE pc ( ... 字段定义 ..., cpumodel VARCHAR(20) NOT NULL, ... 字段定义 ... };   设置索引   若要设置外键,在参照表(referencing table,即Pc表) 和被参照表 (referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。   对Parts表:   ALTER TABLE parts ADD INDEX

MySQL入门到精通(五 )

匿名 (未验证) 提交于 2019-12-02 22:06:11
5.1 MySQL存储引擎 5.1.1 MySQL存储引擎的概率 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。 这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。 5.1.2 查询MySQL中支持的存储引擎 1.查询支持的全部存储引擎 在MySQL中,可以使用SHOW ENGINES语句查询MySQL中支持的存储引擎;语句如下: SHOW ENGINES; SHOW ENGINES语句可以用‘;’结束,也可以用‘\g’或者‘\G’结束。‘\g’与‘;’的作用是相同的,‘\G’可以让结果显示的更加美观。以下是三种查询结果: show

MySQLѧϰ

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQLѧϰ ― Java攻城狮学习路线 ― 入门: 1. 简介 2. 安装 3. 数据库连接 4. 数据库操作 5. 注释 6. 数据类型 7. 数据表操作 8. 数据操作 9. 常用函数 10. 导入导出数据 11. 图形化工具 12. SQL快速参考 进阶: 13. 存储引擎 14. 索引 15. 查询性能优化 16. 切分 17. 故障转移与故障恢复 1. 简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 1.1 什么是据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。基于读写速度考虑,现在使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。其特点为: 数据以表格的形式出现 每行为各种记录 每列为记录所对应的数据项 许多的行和列组成一张表单 若干的表单组成数据库 1.2 RDBMS

Mysql1:数据库表操作,增删改查举例

匿名 (未验证) 提交于 2019-12-02 22:06:11
数据库表的相关操作 添加数据库表 语法:       查看数据库表 语法:   show tables; 实例:    查看数据库表结构 1)使用DESCRIBE/DESC       实例:    语法:          语法:    实例:   将user_info表改为user_data    修改字段的数据类型 语法:      将id 的数据类型由 varcahr(125) 改为 varchar(11)    修改字段名 语法:      将user_data中的 name 改为username         CHANGE也也可只修改数据类型,实现和MODIFY同样的效果,方法是将新字段名和旧字段名设置相同名称,只改变数据类型。由于不同类型的数据在机器中存储方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录。因此当数据库表中已有数据时,不要轻易修改数据类型。 添加字段 语法 :          1)添加无完整性约束条件的字段   在user_data表中添加一个没有完整性约束的INT类型字段 2)添加有完整性约束条件的字段   在user_data中添加一个不能为空的VARCHAR(12)类型字段    3)在表的第一列添加一个字段   在user_data第一列添加一个INT字段的num字段    4)在指定列之后添加一个字段   在user

MySQL规范

匿名 (未验证) 提交于 2019-12-02 22:06:11
第一范式1NF:属性不可分【反例:address可1分为国家,省市,地区】 第二范式2NF:属性完全依赖主键 【反例:订单编号和商品编号位于同一张表中,前者与订单信息强相关,后者与商品信息强相关】【该拆表了】 第三范式3NF:不允许数据冗余【两张表很多属性相同】 1,命名规范:小写+下划线,不能使用保留关键字 【MySQL对象名默认规定大小写敏感,且在生产环境中MySQL通常运行在Linux系统下,Linux系统本身也是大小写敏感的。】 【 https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html 建议在设计数据表之后逐一排查有没有使用关键字。】 原则: 尽可能选择存储空间最小的字段 【栗子:IP转化为整型存储】、 非负型数据优先使用无符号存储 1,char VS varchar 出于存储空间的考虑,优先选择varchar 2,避免使用text,blob,如果一定要使用,单独出扩展表 3,同财务相关的最好使用定点数decimal 4,日期类型选择 DATETIME:记录年月日时分秒,表示的时间范围最大 如果记录的日期要让不同时区的人使用,使用TIMESTAMP 1,为什么选择Innodb?【行级锁高并发,支持事务,缓存索引和数据,支持热备】 2,字符集通常选用UTF-8 3

MySQL基础/数据库和表的设计

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL基础 一:安装MySQL(按步骤操作,如果下载后使用不了,试着用360安全卫士卸载MySQL,清除残留的,方便在下载造成不必要的麻烦;如果这样也不行,那就需要重做系统在进行下载) 二:创建数据库/表 黑窗口:1:输入密码     2:show databases:查看数据库     3:create database 库名:创建库     4:use 库名:使用库     5:create table 表名:创建表(       );     6:show tables:查看库里有哪些表 数据库和表的设计 一:数据完整性:指数据的精确性和可靠性。目的:为了防止数据库中存在不符合语义规定的数据或者因错误信息的输入而造成无效的操作。          primary key:主键约束          unique:唯一约束    域完整性:考虑如何限制向表中输入的数值的范围         foreign key:外键约束         defaule:默认约束         not null:非空约束    引用完整性:外键属于引用完整性    用户自定义完整性 二:数据完整性在MySQL中的体现   1:使用主键约束:列名数据类型 primary key[默认值],   2:设置字段为自动整长:列名数据类型 auto-inchement,   3:使用外键约束:主表

mysql外键详解

匿名 (未验证) 提交于 2019-12-02 22:06:11
一、外键简介 外键表示一个表中的一个字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。 下面来看看中的以下数据库中两个表: customers 和`orders``的ER图。 上图中有两张表: customers 和 orders 。每个客户有零个或多个订单,每个订单只属于一个客户。 customers 表和 orders 表之间的关系是一对多的,它是由 customerNumber 字段指定在 orders 表中建立外键(引用 customers 表的 customerNumber 字段)。 orders 表中的 customerNumber 字段与 customers 表中的 customerNumber 主键字段相关。 customers 表称为父表或引用表, orders 表称为子表或引用表。 表可以有多个外键,子表中的每个外键可能引用不同的父表。 子表中的行必须包含父表中存在的值,例如, orders 表中的每个订单记录必须在 customers 表中存在 customerNumber 。 因此,多个订单可以指同一个客户,因此这种关系称为一个(客户)到许多(订单)或一对多。 有时,子表和父表是一样的,外键返回到表的主键。 reportTo 列是一个引用 employeeNumber 列的外键, employeeNumber

Mysql1:数据库表操作,增删改查举例

与世无争的帅哥 提交于 2019-12-02 22:05:05
数据库表的相关操作 添加数据库表 语法:    实例:    查看数据库表 语法:   show tables; 实例:    查看数据库表结构 1)使用DESCRIBE/DESC    语法:    实例:       2)SHOW CREATE TABLE 语法:    实例:      使用此方法查看数据库表结构时,不仅可以查看表创建时候的详细语句,而且还可以查看存储引擎和字符编码。    修改表名 语法:      to为可选参数,使用与否均不影响 实例:   将user_info表改为user_data    修改字段的数据类型 语法:    实例:   将id 的数据类型由 varcahr(125) 改为 varchar(11)    修改字段名 语法:       实例:   将user_data中的 name 改为username         CHANGE也也可只修改数据类型,实现和MODIFY同样的效果,方法是将新字段名和旧字段名设置相同名称,只改变数据类型。由于不同类型的数据在机器中存储方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录。因此当数据库表中已有数据时,不要轻易修改数据类型。 添加字段 语法 :          实例: 1)添加无完整性约束条件的字段   在user_data表中添加一个没有完整性约束的INT类型字段    2

MySQL外键

匿名 (未验证) 提交于 2019-12-02 22:02:20
数据库表的外键约束 外键约束要有两张表 其中一张是主键表,另外一张是外键表 关系就是一对多, 主键是不允许重复(主键表) 班级表(主键表)和学生表(外键表) (1)先创建主键表,再创建外键表 (2)为外键表添加外键约束 (3)先为主键表添加测试数据,再为外键表添加测试数据 --如果要是删除,则需要先删除外键表的数据,再删除主键表的数据 create table clazz( ); -- 创建外键表 create table student( ); -- 为学生表添加外键约束 alter table student add constraint fk_clazzid foreign key (clazzid) REFERENCES clazz (clazzid); -- 添加测试数据 insert into clazz (clazzname,room) values ('零基础java班','403'); insert into clazz (clazzname,room) values ('高薪大数据就业班','506'); insert into clazz (clazzname,room) values ('美女最多前端班','508'); -- 向学生表添加测试数据 insert into student (stuname,clazzid) values ('zhangsan