广州39期庞金桐 发表于 2022-3-4 21:55:51

3.4笔记


Navicat:一个连接数据库的图形化工具,收费的,业内很多公司也是用破解版。
DBeaver:跟Navicat工具一样,免费的。

通过Navicat连接Mysql数据库服务器的步骤:
1、通过Navicat新建Mysql连接(只要建立一次)
   (1)填写服务器的IP地址
   (2)填写在Mysql中创建有%权限的Mysql用户
2、关闭Linux的防火墙(service)
3、要确保服务器中的mysqld服务已开启补充

【#】代表注释:代码不会被程序识别执行
还可以通过【Ctrl+/】快速注释、快速取消注释、注释单行 每一行前面会有 --
多行注释【/*    */】
【/*
我是被注释的第一行
我是被注释的第二行
我是被注释的第三行
*/】
如果只是写了一条SQL语句,可以不加【;】
如果是多条SQL语句,区分每一条是通过【;】进行区分,最后一条SQL可以不加分号

**多表查询
1、内连接【inner join..on..】:对两个表当中有字段的值相同就可以通过内连接进行连接,并把相同的值直接显示出来
【select *from aa inner join cc on aa.id=cc.sid;】
【select *from aa join cc on aa.id=cc.sid;】
查询所有字段的值,来源aa内连cc   通过aa表的id字段=cc表的sid字段进行拼接
2、左连接【left join..on..】以左边表为主,显示完整的左边表,右边表显示满足拼接条件的值,不满足的显示null
【select *from aa left join cc on aa.id=cc.sid;】
3、右连接【right join..on..】以右边表为主,显示完整的右边表,左边表显示匹配的值,不匹配为null
【select *from aa right join cc on aa.id=cc.sid;】
面试题:
左连接与右连接的区别?



4、基本连接【where】 通过where条件进行拼接,对多个表当中有字段的值是相同的就可以通过基本连接进行连接(结果和内连接是一样的,只是语法上有区别)
【select *from aa,cc where aa.id=cc.sid;】:查询所有字段的信息来源aa表、cc表 当aa表的id=cc表的sid;
5、硬链接union (机械拼接,上下拼接)拼接表的字段数目必须一致,显示的表字段名以第一个表为准
【select *from aa union select *from cc;】
【select *from aa union select sid,name from test;】
    https://note.youdao.com/yws/res/3557/WEBRESOURCE398a865496dcbaa31b57f129915caa8e

求张三的成绩:
方法1:先把表拼了再说,把拼接表当做一个单表进行查询
方法2:临时表
1、先通过一条sql语句求出一个独立的临时表取个别名
2、把临时表当做单表进行查询
方法3:子句嵌套
1、通过aa表获取张三的学号【select id from aa where name='zhangsan'】----1001
2、把上一步得到中间结果的sql,作为cc表的条件进行查询
【select score from cc where sid=(select id from aa where name='zhangsan')】

索引
DDL——数据库定义语言。
对表的定义、表字段进行操作【create(创建)】、【alter table(修改表)】、【drop(丢弃、删除表)】
DML——数据库操作语言。
对表中的数据进行操作【增(insert into)】【删(delete)】【改(update..set..)】【查(select)】
索引:index
    https://note.youdao.com/yws/res/3641/WEBRESOURCE2d74417fb01769ba7c1f1287a601bfb5
为了提高查询性能都会去增加索引(一般增加在常用的字段上---热字段:经常需要查询的字段)
索引是对表的字段生效,但是不能对整个表所有的字段都加索引,如果整个表所有字段都加索引就丧失了索引的意义了,反而会导致系统的性能受到影响
注意:
1、创建索引的前提:表中有大量的数据(上万行),添加索引会对查询速度有明显的提升
2、不能对一个表的每个字段都添加索引,如果都添加就丧失了索引的意义,反而会消耗大量的内存或者磁盘空间,通常只对热字段添加索引。
3、索引的优先级:主键        PRI > 唯一UNI > 普通MUL

索引的类型:3种
普通索引:【index】允许索引所在字段的值重复和为空,允许表中存在多个普通索引。
唯一索引:【unique index】允许索引所在字段的值为空,但是不允许重复
主键索引:【primary key】 索引所在字段的值既不能为空也不能重复(当我们定义了主键约束时,其实就是定义主键索引,主键约束是主键索引的一个表征),一个表中只能有一个主键索引

创建普通索引:
给单个字段创建普通索引
【create index aa on grade(class);】---》创建普通索引aa在grade表的class字段上
查看索引的情况;
【show index from grade;】---》 展示索引情况来自于grade表
    https://note.youdao.com/yws/res/3709/WEBRESOURCEb5b9fee4e373ad12dc66cf23c2a99f94
给多个字段创建普通索引(创建联合索引)
【create index bb on grade(age,sex);】---》创建普通索引bb在grade表的age和sex字段上
    https://note.youdao.com/yws/res/3713/WEBRESOURCE3d258416809320a25eec69c7082dd24b
索引是一种表结构,所以可以通过alter table的方式进行修改
【alter table grade drop index bb;】---》修改表 grade表 丢弃 索引 bb
通过alter table创建普通索引
【alter table grade add index bb (age);】---》修改表 grade表 添加 普通索引bb 在age字段上

创建唯一索引:(注意:唯一索引 字段的值 不能重复)
【create unique index cc on grade(name);】
    https://note.youdao.com/yws/res/3716/WEBRESOURCEb502171d6fa639da4e8b6a52f9e713fb
【create unique index xx on grade(chinese);】
通过alter table删除唯一索引
【alter table grade drop index cc;】---》修改表 grade表 删除索引cc
通过alter table 创建唯一索引
【alter table grade add unique index ff(name);】

主键索引:
在创建主键的时候,主键索引就同时创建成功
删除主键索引:
1、先删除自增长约束
【alter table grade change sid sid int(4);】
2、再删除主键索引
【alter table grade drop primary key ;】
添加主键索引:
【alter table grade add primary key(sid);】---》修改表 grade表 添加 主键索引 在sid字段上
【alter table grade drop primary key;】---》删除grade表的主键
添加主键索引的复合索引:
【alter table grade add primary key(sid,chinese);】

视图 view
是一种虚拟表,不负责存储数据,是通过实际的基础表创建的,用来显示基础表的数据,数据是动态生成的
为什么要使用视图view?
1、为了安全,在实际表中有些字段可能是保密的,那么就可以通过创建视图的方式,让用户操作视图从而避免对实际表的保密字段进行操作
2、为了方便操作,在数据库中有些查询语句比较复杂,就可以对这些复杂的语句加工成视图表,就可以避免复杂的查询重复编写的出错
特点:
1、视图是有实际表(基础表)创建的虚拟表
2、视图是由列(字段)和行(值)组成,它的列可以是多个表中的列
3、视图的创建和修改是不影响基础表
4、基础表的修改或删除就会影响到视图表
5、基础表和视图中的数据是互相影响的,当一个视图是由复杂的查询创建出来时,不允许修改视图的数据
缺点:
1、视图的性能差,因为视图查询时本质上是对基础表进行查询
2、视图存在修改限制,当用户想修改视图里面的数据时,本质上需要先转化成对底层基础表的某些信息进行修改,如果视图的数据来源比较复杂时不允许修改的

创建视图(可以理解为对基础表的数据进行复制)
【create view dcs as(select name,chinese,math from grade);】
---》创建 视图 dcs 根据查询 grade表的 name,chinese,math字段的值得到
【show tables;】---》展示当前库中所有的表(包括基础表和视图表)
【select *from dcs;】---》对视图表dcs表进行查询,得到的结果本质上就是【select name,chinese,math from grade】
【show create view dcs;】---》查看视图dcs的结构
    https://note.youdao.com/yws/res/3719/WEBRESOURCEc49fc25f82e2897b79b15f2fa3c3e273

对视图表中的数据操作可以直接使用--------增删改查
【insert into dcs (name) values('xiaomai');】
【update dcs set chinese=88 where name='xiaomai';】
【delete from dcs where name='lisi';】

对基础表中的数据进行修改,也会影响到视图
【delete from grade where sid=1;】
创建一个通过多表查询获取的视图表
【create view duobiao as (select *from dept left join emp on dept.dept1=emp.dept2);】

删除视图
【drop view duobiao;】
查看当前库中有哪些视图:
【show table status where comment='view';】

外键约束(课件)【foreign key】
外键约束,约束的是表和表之间的关系,目的为了保持数据的一致性,完整性
把一个表B的某个字段约束到另一个表A的某个字段中,
1、当表A字段不存在值时,表B不能进行添加对应的值。
2、当表B字段存在时,表A对应的值不能改变
现在创建两张表 dcs1 和 dcs2
dcs1:---》主表
【create table dcs1(id int(4) primary key,name varchar(20)) engine=innodb;】
创建表dcs1表包含字段id类型为int(4)主键约束,字段name类型varchar(20)   数据引擎为innodb
dcs2:---》子表
【create table dcs2                                                         #创建表dcs2表
(sid int(4) primary key,sname varchar(20),                     #包含字段sid类型为int(4)主键约束,字段sname类型varchar(20)
constraint gz foreign key(sid) references dcs1(id))    #创建约束名称为gz外键定义在sid 引用dcs1表的id字段
engine=innodb; 】                                                      #数据引擎为innodb
【constraint gz 】约束名称为gz   ---》gz 外键的名称
【foreign key(sid)】外键定义在本表中的sid ---》外键加在这个sid字段上
【references dcs1(id)】 引用的是dcs1表中id字段----》dcs1表变成了该表的主表,主表的id字段对应着子表中sid字段
sid字段的值 就受到 dcs1表中id字段 的约束
如果ID的值不存在,那么sid就不能添加对应的值
如果sid已经添加了,那么id不能被删除
id和sid就不能随意改变了

往两张表添加数据:
要先对主表进行添加
【insert into dcs1(id,name) values (1,'xiaomai');】
才可以对从表添加相同的值
【insert into dcs2(sid,sname) values(1,'damai');】
异常的添加
直接对从表添加主表不存在的数据
异常的更新
更新主表,当主表的数据被从表引用,不能直接更新或者删除主表的数据
更新子表,当主表没有对应的数据可以被子表引用,子表是不能更新到对应的值的
如果需要删除或者修改主表的数据,就要先删除子表引用的数据
总结:
1、主表不存在的数据,在相关的从表是无法插入与之相关的数据
2、对主表进行删除或者更新,会导致主表没有了外键值时,那么执行会报错
3、对子表进行更新或者插入数据时,如果主表没有这个外键值,那么执行会报错
4、要删除主表的信息,需要先确认从表是否存在,如果从表存在,要先删除从表对应的数据

删除外键约束:
【alter table dcs2 drop foreign key gz;】---》修改表 dcs2表丢弃外键 gz

添加外键约束
【alter table dcs2 add constraint gzdcs foreign key(sid) references dcs1(id);】
修改表dcs2表 添加 约束   名称gzdcs外键在sid字段上引用dcs1表的id字段
注意:添加外键时,需要确保从表和主表数据的一致性,否则添加失败

页: [1]
查看完整版本: 3.4笔记