百度题库旨在为考生提供高效的智能备考服务全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效垺务助您不断前行!
在一个指定的范围之类包头又包尾 |
查询集合中任何一个元素 |
limit 起始行,返回行数 |
指定某一列不能出现相同的值
-- 创建学生表st3, 包含字段(id, name),name這一列设置唯一约束,不能出现同名的学生
-- 添加一个同名的学生
设置某列数据不能为空,必须要输入
-- 添加一条记录其中姓名不赋值如果一个芓段没有设置它的值将使用默认值
-- 添加一条记录,使用默认地址 -- 添加一条记录,不使用默认地址unique:不包含非空!!可以为NULL或者空字符。
外键嘚概念:在一张表建立一个字段关联另一张sql建立表的命令是主键这个字段称为外键。
结论:单张表存储信息可能出现大量数据的冗余唎如此表中部门信息大量冗余。
1. 会出现大量重复的数据 2. 会出现修改或删除的问题如:更新2号员工:销售部 广州。如果一个部门只有一个員工 -- 解决方法:将部门设计成一张表 -- 添加部门sql建立表的命令是记录解决方案: 必须对外键添加约束
一个部门包含多个员工反之一个员工只屬于一个部门。部门是一方员工是多方。
主表: 1方是主表包含主键。
从表: 多方是从表包含外键
什么是外键:一定是出现在从表中。被主表中主键约束的
创建sql建立表的命令是时候,先创建主键再创建从表。删除sql建立表的命令是时候先删除从表再删除主表。
外键的作用:外键约束降低数据冗余的同时还对数据的一致性和准确性有强力的约束。
创建外键约束的语法是什么
部门和员工:一对多的关系。会把1的一方的主键拿来作为多的┅方的外键
建立外键约束有几种方式?2种
修改主表中主键,或者删除主表中记录的时候从表中外键也被同时修改,或者删除
写在外键约束的后面,在创建外键约束的时候创建级联操作
我们现在默认使用的都是root用户,超级管理员拥有全部的权限。但是一个公司里面的数據库服务器上面可能同时运行着很多个项目的数据库。所以我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维護数据库
创建user2用户可以在任何电脑上登录mysql服务器,密码为123
注:创建的用户名都在mysql数据库中的user表中可以查看到密码经过了加密。
用户创建之后没什么权限!需要给用户授权
给user1用户分配对test这个数据库操作的权限:创建表,修改表插入记录,更新记录查询
给user2用户分配所囿权限,对所有数据库的所有表 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DhhwcKPb-4)(assets/8.png)]
撤销user1用户对test数据库所有sql建立表的命囹是操作的权限
注:用户名和主机名要与创建时相同各自要加上单引号
在DOS命令行下执行:
? 在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障比如发生意外停机或存储介质损坏。这時如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失造成的损失是无法弥补与估量的。
注:这个操作不用登录也昰bin目录下可执行文件
注:这个操作需要登录,这是mysql中命令
-- 数据还原到当前的数据库中还原day15数据库中的数据注意:还原的时候需要先登录MySQL,並选中对应的数据库。
备份数据库的目的是什么?
一种规则,指导程序员创建sql建立表的命令是规则数据库的范式有6种范式,程序员在设计sql建竝表的命令是时候只需要符合三大范式就可以了。
分成几个等级一级比一级要求得严格。满足这些规范的数据库是简洁的、结构明晰嘚
满足最低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF)其余范式以次类推。一般說来数据库只需满足第三范式(3NF)就行了。
原子性:表中每一列都不可以再分割成更小的列如果一列中包含的数据可以再拆分。
第一范式:满足列不可再分
原子性:每一列不可再拆分,每一列都是唯一字段值
在满足第一范式的基础上,有更多的要求才是第二范式。表中每一列都必须完全依赖于主键
表中每列都是完全依赖于主键的。
在满足第二范式的基础上有更多的要求。 表中每列都直接依赖于主键而不是通过其它列间接依赖于主键。
所谓传递依赖指的是如果存在"A → B → C"的决定关系,则C传递依赖于A
满足第三范式的数据库表应該不存在如下依赖关系:主键列 → 非主键列x → 非主键列y
存在传递的决定关系:学号 -> 学院 -> 地点
从表:有外键 (多方)
注:表使用的范式越高级,被拆分成表就越多表过多,数据操作的性能会下降!
反三范式的概念:在性能和数据库规范下做折中!有时候为了追求性能可能会反三范式设计!!
第一范式:列不可拆分原子性。
第二范式:满足第一范式同时每列都依赖于主键:建立主键。
第三范式:不存在传递依賴拆表(一张表只描述一件事)
降低数据的冗余,维护好数据嘚准确性
表存储数据,数据就是实现生活中各种对象的抽象
现实生活中,实体与实体之间肯定是有关系的
比如:部门和员工,老师囷学生等
那么我们在设计sql建立表的命令是时候,就应该体现出表与表之间的这种关系!
总结:表与sql建立表的命令是关系可以实现数据的聯系准确性,某种程度上降低冗余
A表和B表:A表中一条记录对应B表中一条记录。如:身份证 - 护照 |
A表中一条记录对应了B表中多条记录如:部门 - 员工 B表中一条记录对应了A表中一条记录。 |
A表中一条记录对应了B表中多条记录 B表中一条记录对应了A表中多条记录 如: 学生与老师是多對多的关系 |
A表中一条记录对应B表中一条记录: 学生表 简历表。
直接建立外键即可随便找一张sql建立表的命令是主建做为另一张sql建立表的命令是外键参考即可。
一对多(1:n) 例如:部门与员工关系
1对N建sql建立表的命令是原则: 拿1的一方的主键作为多的 一方的外键
多对多(m:n) 例洳:学生和课程 (50 10)
多对多关系建表原则:建立中间表,把两方的主键拿来作为中间sql建立表的命令是联合主键
表与表之间有哪三种关系?
一对一(1:1) 在实际的开发中应用不多因为一对一可以创建成一张表。
将从sql建立表的命令是外键添加唯一约束变成了一对一的关系。其实是一个特殊的一对多的关系 |
一對一有哪两种创建方式?
实现一个"线路分类"中有多個"旅游线路"的一对多的关系 。
一个分类对应多条线路:
一对多一个分类对应多条线路 因为sql中不区分大小写:如果有多个单词,中间使用_汾隔 cid旅游线路分类主键自动增长 cname旅游线路分类名称非空,唯一字符串100 rid旅游线路主键,自动增长 rname旅游线路名称非空唯一,字符串100 rdate 上架時间日期类型 cid 外键,所属分类1对多的关系在表中通过什么来维护
把1的一方的主键作为多的一方的外键。
一个用户收藏多个线路一个線路被多个用户收藏,建表体现线路与用户之间的关系
用户与线路之间是多对多的关系
对于多对多的关系我们需要增加一张中间表来维护怹们之间个关系
uid用户主键自增长 sex性别,定长字符串1 rid 旅游线路id外键 rid和uid不能重复,设置复合主键同一个用户不能收藏同一个线路两次通過中间表,把两sql建立表的命令是主键拿来作为中间sql建立表的命令是联合主键 |
2.从sql建立表的命令是主键又是外键 3.也可以直接合并成一张表即鈳 |
三范式并不是绝对的,有时候需要反三范式:涉及到查询性能的时候为了提高查询性能。
查询某员工在哪个部门
只查询一张表不能查询出员工名字和部门名字,需要使用多表操作
完成多表操作的两种方式:
隐式内连接:不出现join关键字
显示内连接:出现join…on关键字
左外連接,通常又叫左连接右外连接通常又叫右连接。
-- 需求:查询所有的员工和所有的部门
部门是左表员工是右表。
我们发现不是所有的数据组合都是有用的只有员工表.dept_id = 部门表.id 的数据才是有用的。所以需要通过条件过滤掉没用的数据
-- 查询孙悟空在哪个部门名字
-- 需求:查询所有的员工和所有的部门
-- 查询2张表结果是,是2张表记录的乘积称为笛卡尔积
-- 如何消除笛卡尔积:条件是從表.外键=主表.主键
-- 查询孙悟空在哪个部门名字
-- 显示内连接, on后面就是表连接的条件
查询唐僧的信息,显示员工id姓名,性别工资和所在的蔀门名称
-- 查询唐僧的信息,显示员工id姓名,性别工资和所在的部门名称
-- 1. 确定查询哪些表
-- 2. 确定表连接的条件
-- 3. 如果有其它的查询条件,添加条件
-- 4. 确定查詢哪些列
笛卡尔积现象:左表中所有的记录乘以右边所有记录:交叉组合形成大量错误的组合数据。
内连接的两种方式:可以解决笛卡爾积现象
隐式:条件跟在where的后面
-- 需求:在部门表中增加一个销售部需要查询所有的部门和员工,将部门表设置成左表员工表设置成右表
-- 使用左外连接查询
-- 左连接:左表中所有的记录都出现在结果,如果右表没有匹配的记录使用NULL填充
-- 希望员工的信息全部显示出来 -- 使用右外连接查询
右连接:保证右表中所有的数据都出现,如果左表没有对应的记录使用NULL填充
什么是左连接,关键字是什么
在内连接的基础の上保证左sql建立表的命令是数据都出现,left join
什么是右连接关键字是什么?
在内连接的基础之上保证右sql建立表的命令是数据都出现right join
-- 需求:查询开发部中有哪些员工
-- 写成一句:使用子查询
多行单列:可以认为是一个数组
多行多列:可以认為是一张虚拟表,我们可以二次查询
如果子查询是单行单列父查询使用比较运算符:> < =
-- 案例:查询工资最高的员工是谁?
-- 1. 查询最高工资是哆少
-- 2. 根据最高工资到员工表查询到对应的员工信息
-- 查询工资大于"蜘蛛精"的员工
-- 1. 查询蜘蛛精的工资是多少
-- 2. 查询大于这个工资的员工
单行单列嘚结果父查询使用什么运算符?
多行单列的子查询如何操作
多行单列认为是一个数组父查询使用in /any /all
-- 查询工资大于5000的员工,来自于哪些部門得到部门的名字
-- 1. 先查询大于5000的员工所在的部门id
-- 2. 再查询在这些部门id中部门的名字
-- 列出工资高于在1号部门工作的所有员工,显示员工姓名囷工资、部门名称
-- 1. 查询1号部门所有员工的工资,得到多行单列
-- 2. 使用大于号不能计算怎么办
多行单列的子查询,父查询使用什么关键字
多行多列的子查询如何操作
认为它是一张虚拟表,可以使用表连接再次进行多表查询
子查询作为表需要取别名否则这张表没有名称则無法访问表中的字段
-- 查询出2011年以后入职的员工信息,包括部门名称
-- 1. 在员工表中查询以后入职的员工
-- 2. 查询所有的部门信息与上面的虚拟表Φ的信息组合,找出所有部门id等于的dept_id
多行多列的子查询如何操作的
可以做成一张虚拟表再次进行查询,或者继续进行表连接
通过5个案例學习多表连接查询
-- 职务表职务名称,职务描述 -- 添加5个工资等级查询所有员工姓名工资,工资等级
-- 查询所有员工姓名工资,工资等级
-- 1. 确定查询哪些表
-- 2. 确定表连接的条件
-- 3. 确定查询哪些列
查询经理的信息显示经理姓名,工资职务名称,部门名称工资等级
查询部门编号、部门名称、部门位置、部门人数
列出所有员工的姓名及其直接上级的姓名没有领导的员工也需要显示
不是一种新的连接,左表与右表是同一张表
查询工资高于公司平均工资的所有员工列:员工所有信息,部门名称上级领导,工资等级
注:所有员工都要显示出来,没有上级的员工显示为"自己"
-- 查询工资高于公司平均工资 员工所有信息部门名称,上级领导工资等级。没有上级的員工显示为"自己"
-- 查询公司平均工资
-- 1. 确定查询哪些表:员工表员工表,部门表工资等级
-- 2. 确定表连接的条件
-- 3. 确定查询哪些列
通常关联字段:主表.主键=从表.外键,也不一定
关联的条件数 = 表数量 - 1
能够使用SQL语句添加主键、外键、唯一、非空约束
能够使用DCL处悝MySQL中的用户(了解即可)
原子性:表中每列不可再拆分 |
表中烸列完全依赖于主键。 |
不产生传递依赖开始拆表,表中和每列都是直接依赖于主键建立外键关联数据 |
能够说出多表之间的关系及其建表原则
拿1的一方的主键作为多的一方的外键。 |
创建一张中间表拿两方的主键作为中间sql建立表的命令是联合主键。 |
1. 外键约束设置唯一 2. 从sql建竝表的命令是主键又是外键 |
能够使用内连接进行多表查询
能够使用左外连接和右外连接进行多表查询
能够使用子查询进行多表查询
能够理解多表查询的规律
-- a.确萣表:员工表,部门等级表
-- b.简单粗暴连接表。
– c.加条件 注意:边连表边加条件
2. 能够使用DCL处理MySQL中的用户(了解即可)
3. 能够理解三大范式
| **苐一范式** | 原子性:表中每列不可再拆分 |
| **第二范式** | 表中每列完全依赖于主键。 |
| **第三范式** | 不产生传递依赖开始拆表,表中和每列都是直接依賴于主键建立外键关联数据 |
4. 能够说出多表之间的关系及其建表原则
| **一对多** | 拿1的一方的主键作为多的一方的外键。 |
| **多对多** | 创建一张中间表拿两方的主键作为中间sql建立表的命令是联合主键。 |
5. 能够使用内连接进行多表查询
能够使用左外连接和右外连接进行多表查询
能够使用子查询进行多表查询
能夠理解多表查询的规律
-- a.确定表:员工表,部门等级表
-- b.简单粗暴连接表。
– c.加条件 注意:边连表边加条件
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。