外键

MySQL面试总结

浪尽此生 提交于 2019-12-14 20:29:18
MySQL面试总结 # MySQL的存储引擎 `MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键,适用于频繁的查询。表锁,不会出现死锁,适合小数据和小并发。 - 为什么不会出死锁?(没有事务就不会继续持有锁) 答:因为`MyISAM`再查询的时候,会同时锁定这个`sql`里面所有用到的表(获取锁的顺序是一致的),不局限与一张表,再写锁又重叠时,就得等待。 **注意:【`MySQL5.5`之前默认的是`MyISAM`引擎了,5.5之后的版本默认都是`innodb`作为存储引擎】** `innodb`:支持事务安全的存储引擎,适用于插入和更新,支持外键,行锁,事务。适合大数据,大并发。特别是针对多个并发和`QPS`较高的情况。 - `QPS:`就是每秒查询率,`QPS`是对一个特定服务器再规定时间内能处理多少流量的衡量标准。 - `TPS:`就是每秒传输处理的事务个数。 - `innodb`的行锁模式:共享锁,排他锁,意向共享锁(表锁),意向排他锁(表锁),间隙锁。(注意:如果`sql`语句没有使用索引,`innodb`不能确定操作的行时,使用意向锁(表锁))。 - 死锁问题 - 什么是死锁? 死锁就是当俩个事务都需要获取对方持有的排他锁才能完成事务的时候,就导致了循环锁等待

Mysql基础02-约束

≡放荡痞女 提交于 2019-12-14 19:00:47
约束与索引 概念 1、数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女” 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等 2、约束 键约束:主键约束、外键约束、唯一键约束 Not NULL约束:非空约束 Check约束:检查约束 Default约束:默认值约束 自增约束 3、约束(CONSTRAINTS)与索引(INDEX) 约束是用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,是逻辑约束,不会因为设置约束而额外占用空间。 索引 是一个单独、物理的存储在数据页上的数据库结构,它是表中 一列或若干列值的集合 和相应的指向表中数据值的物理标识数据页的 逻辑指针清单 (类似于新华字典的目录索引页)。 可以大大提高查询速度。应该在键列、或其他经常要查询、排序、按范围查找的列上建立索引。 Mysql会在主键、唯一键、外键列上自动创建索引

MySQL 多键

半腔热情 提交于 2019-12-14 18:18:55
1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 2.了解知识点: - 修改表的操作 - 复制表操作 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - 将所有数据存放在一张表中的弊端: 1.结构不清晰 ---> 不致命 2.浪费空间 ---> 不致命 3.可扩展性极差 ---> 不可忽视的弊端 - 类似于将所有python代码存放在一个py文件中,强耦合到一起了----> 解耦合 ----> 拆分表 - 拆分表解决以上问题. - 需要给两张表之间,建立一种强有力的关系, 使用 “外键” - !!!!! ****** 如何确认表与表之间的关系是 (一对多、多对多、一对一) - 注意: 要确立两张表之间的关系,必须站在两个位置去思考: - 站在员工表的位置: 多个员工能否对应一个部门? 能!!! - 员工与部门: 多 对 一 - 员工表单向 多 对 一 部门表 - 站在部门表的位置: 多个部门能够对应一个员工? 不能!!! 总结: 凡是单向 多 对 一 的表关系,称之为 一对多 的外键关系。 - 外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id) # 创建两张表 1.必须先建立被关联表,再建立关联表 # 被关联表: dep:

MySQL学习笔记(三)

无人久伴 提交于 2019-12-14 10:09:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 五、多表查询 主、从表: 如果表A的主关键字(primary key)是表B的字段,则该字段称为表B的外键。 外键:用来实现参照完整性的,不的外键约束方式将可以使两张表紧密的结合起来,特别 修改或者删除的级联操作 外键约束 作用:保证数据完整性 (***) 添加外键: alter table 表名 add foreign key 当前表名(dno) references 关联的表 (did); ### 表间关系(表记录与另一有记录的关系)(专门人, 建模工具ER) 1:1 设计: 一般设计一张表就可以,有时根据业务的需要拆分多张表形成一对一 案例:用户基础信息,用户详细信息 原则:主键对应,唯一外键对应 n:n|n:m|*:* 案例:学生选择的课程,课程对应多个学生 1:n|1:* 案例:部门与员工 ### 外连接 1. 左外连接(把左表所有的数据查询出来) 前提:要有外键 语法: left [outer] join A表.字段 on B表.字段 select * from dept t1 left join emp t2 on t1.did = t2.dno; 2. 右外连接 前提:要有外键 语法: right [outer] join A表.字段 on B表.字段 select * from dept t1

主键和外键 班级表

試著忘記壹切 提交于 2019-12-14 02:18:44
主外键的存在是依托两个实体之间的关系而存在的; 比如班级与学生的关系: 一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系; 那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢? 因为,你想一想班级表内如果放学生那么记录可能就是这样: 1班ID 1班 xx同学id 1班ID 1班 xx同学id … 这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的; 下面简单给你讲下大概建成的表结构 –建班级表 create table class( classid int primary key,–定义班级ID为主键 classname varchar(15) ) –建学生表 create table students( studentid int primary key,–定义学生ID为主键 classid int ,–外键值,跟班级表classid 属性类型相同 stuname varchar(20),–学生姓名 —定义外键 foreign key(classid) references class(classid) --本表classid是基于class表classid的外键 ) 如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在

数据库(表结构)设计技巧及注意事项

南笙酒味 提交于 2019-12-13 23:03:16
 当您在决定 开发 一个 数据库 管理项目时,最先着手的工作就应是数据库表结构的设计了。可以这么说,表结构的设计是开发数据库管理项目的基石,一个糟糕的表结构设计,可能会严重延误您的项目开发周期,使您大量的劳动时间为此付之东流。表结构设计是数据库逻辑设计的重要组成部分,直接影响到数据库的性能,所以小编在本文对数据库(表结构)设计技巧及注意事项做一个讲解!   1.表名一般以【模块名称_具体表名】来实现,同一个模块的前缀是一样的。( Oracle 大小写敏感,在SQL中可以不用"_",因为可以用大小写一起的写法。这也是可以的)   2.表名称不应该取得太长(一般不超过三个英文单词,不推荐使用中文拼音,总的长度不要超过30个字符)。表名使用英文的原因,有些项目有英文版的需要,或者这个项目是给外国做的时候,使用英文是基本的要求,应该说这是一个习惯问题,多学一点英文也不是坏事   3.不使用tab或tb作为表前缀(本来就是一个表,为什么还要说明)。   4.一些作为多对多连接的表,可以使用两个表的前缀作为表名:如:用户登录表User_Login,用户分组表User_GroupInfo,这两个表建立多对多关系的表名为:User_Group_Relation(关系统一用Relation)。注意一点,主键在做其他表的外键时,或者在被其他表引用时,字段说明和字段名尽量保持一致,比如发帖表BBS

MySQlL基本使用

微笑、不失礼 提交于 2019-12-12 23:59:44
MySQL 1.数据目录 数据库:文件夹 表:文件 数据 2.安装目录 配置文件 my.imi SQL Structured Query Language:结构化查询语言。。定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方。称之为方言。 通用语法 SQL语句单行或者多行书写,以分号结尾。可使用空格和缩进来增强语句的可读性 MySQL数据库的SQL语句不区分大小写,关键字建议使用大写 单行注释 -- 注释内容【--后必须有空格】 # 注释内容(mysql特有) 多行注释 /* 注释 */ DDL:数据定义语言 用来定义数据库对象:数据库,表,列表。关键字:create,drop,alter DML:数据操作语言 用来对数据库中表的记录进行增删改。关键字:insert,delete,update DQL:数据查询语言 用来查询数据库中表的记录(数据)。关键字:select,where DCL:数据控制语言 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE 操作数据库:CRUD Create,Retrieve查,Update改,Delete +使用数据库 登录:mysql -u... -p... mysql -uroot -padmin mysql -h ip -u... -p... mysql -h127.0.0.1 -uroot

数据库语法二之外键

て烟熏妆下的殇ゞ 提交于 2019-12-12 18:53:34
数据库语法二之外键 外键(******必备知识点******): 1、外键:用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 2、了解的知识点: - 修改表的操作 - 赋值表操作 研究表与表之间的关系: 1、定义一张员工表,员工部门表 id,name,gender,dep_name,dep_desc - 将所有数据存放在一张表中的弊端; 1、结构不清晰:---不致命 2、浪费空间:----不致命 3、可扩展性差----不可忽视的弊端 - 类似于将所有的python代码存放到一个py文件中,强耦合到一起 - 拆分表解决以上问题 - 需要给两张表之间,建立一种强有力的关系,这就得使用外键 -!!!!注意:如何确认表与表之间的关系是(一对多,多对多,一对一) - 注意:要确立两张表之间的关系,必须站在两个位置去思考 - 站在员工表达位置:多个员工能否对应一个部门?能! 员工与部门:多 对 一 员工表单向 多 对 一部门表 - 站在部门表的位置:多个部门能否对应一个员工? 不能!!! 总结:凡是单向 多 对 一 的表达关系,称之为 一对多的外键关系。因为python中的mysql中没有多对一的关系 - 外键:语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id) #####注意:创建两张表 必须先建立被关联表,在建立关联表

MySql 外键约束 之CASCADE、SET NULL、RESTRICT、空等类型分析和作用解读

吃可爱长大的小学妹 提交于 2019-12-12 18:37:31
主表,从表【MySql】 空、RESTRICT、NO ACTION 删除:从表记录不存在时,主表才可以删除。删除从表,主表不变 更新:从表记录不存在时,主表才可以更新。更新从表,主表不变 CASCADE 删除:删除主表时自动删除从表。删除从表,主表不变 更新:更新主表时自动更新从表。更新从表,主表不变 SET NULL 删除:删除主表时自动更新从表值为NULL。删除从表,主表不变 更新:更新主表时自动更新从表值为NULL。更新从表,主表不变 其他参考: https://www.iteye.com/blog/androider-352332 https://blog.csdn.net/qq_43495629/article/details/89164797 https://blog.csdn.net/yajing8/article/details/73014004 https://www.cnblogs.com/yzuzhang/p/5174720.html https://www.cnblogs.com/ALXPS/p/8016429.html https://www.cnblogs.com/caroar/archive/2012/12/21/2828406.html 来源: CSDN 作者: chaoyang_test 链接: https://blog.csdn.net

Oracle查询用户所有表

こ雲淡風輕ζ 提交于 2019-12-11 22:32:17
Oracle 查询用户所有表 下面为您介绍的语句用于实现Oracle查询用户所有表,如果您对oracle 查询方面感兴趣的话,不妨一看。 www.2cto.com select * from all_tab_comments -- 查询所有用户的表,视图等 select * from user_tab_comments -- 查询本用户的表,视图等 select * from all_col_comments --查询所有用户的表的列名和注释. select * from user_col_comments -- 查询本用户的表的列名和注释 select * from all_tab_columns --查询所有用户的表的列名等信息(详细但是没有备注). select * from user_tab_columns --查询本用户的表的列名等信息(详细但是没有备注). --一般使用1: www.2cto.com select t.table_name,t.comments from user_tab_comments t --一般使用2: select r1, r2, r3, r5 from (select a.table_name r1, a.column_name r2, a.comments r3 from user_col_comments a), (select t