我爱普洱茶 发表于 2024-7-29 07:32:57

DATABASE(数据库)-MySQL

一、数据库发展史(了解)

1、步伐管理阶段(20世纪50年代中期)特点:数据不能恒久生存(存内存中,掉电丢失)2、文件体系阶段(20世纪50年代中期-60年代后期)特点:数据缺乏独立性(存硬盘 文件中,恒久生存)
3、数据库体系阶段(20世纪60年代后期--至今)特点:数据共享、淘汰冗余(不必要的重复) --便于管理数据
常见的数据库产品有哪些?
产品 厂商
SQLServer 微软
Access 微软
MySQL Oracle 甲骨文
Oracle Oracle
DB2 IBM
Sybase Sybase......
二、MySQL介绍

MySQL是一款关系型数据库管理体系(软件) 
 DBMS 数据库管理体系 MySQL管理此中的数据库
 DB 数据库
由瑞典AB公司研发,目前属于Oracle公司的产品
重要版本:社区版(免费)和企业版(付费)
重要特点:体积小、速度快、可跨平台(平台:操纵体系平台Windows、Linux、Mac)
https://i-blog.csdnimg.cn/direct/107c86f952aa43459e19879f80ba46f5.png
三、数据库访问和配置

1、使用MySQL自带的客户端工具访问
2、使用DOS访问(命令行窗口 Win+R→ cmd)
https://i-blog.csdnimg.cn/direct/d46f1a8165f4424089f54e84cb2b4261.png
3、毗连工具(SQLyog或其他Navicat):
https://i-blog.csdnimg.cn/direct/343a17fe1be44f089606414ffcf382a9.png
四、数据库常用术语

1、关系
一个关系就是一张二维表(表)比如:员工表
编号 姓名 薪水
10001 刘小锤 12000.0
10002 玛丽 13000.0
10003 罗斯 15000.0...
2、元组 表中的一行,一条记录,学名叫元组
3、属性 表中的一列,就是一个属性,也称为:列、字段
五、SQL语句

SQL:结构化查询语言,通过SQL可以操纵数据库
1、SQL分类

1)数据定义语言 DDL
目的:对数据库中库、表,举行创建、修改、删除 管理表结构
<1>创建:create <2>修改:alter<3>删除:drop
2)数据操纵语言 DML 
目的:对表中的数据,举行插入、更新、删除  改变表中的数据
<1>插入:insert<2>更新:update<3>删除:delete
3)数据查询语言DQL
目的:对表中的数据,举行查询 查询:select
4)数据控制语言DCL(了解)目的:用于授于和回收权限
5)事务控制语言TCL(了解)目的:用于控制事务(一个完整的操纵过程)
2、SQL语句的编写规范

1)SQL语句不区分大小写(从功能来说,但是性能有影响)
2)SQL语句中,关键词建议大写,比如CREATE 表名、列名,一样平常小写
3)SQL语句每句话用分号末端;
六、数据库根本语句

exit退出mysql
1、查看当前全部的数据库

语法:show databases;
2、创建数据库

语法格式:create  database 数据库名称 charset 字符集;
说明:数据库的名称不能和之前重复!常见的字符集utf8(最常用) 、gbk、Latin1(不支持中文字符) 如果字符集差别一。中文就会乱码!
案例:创建一个数据库,名称为testing,字符集设置为utf8create database testing  charset utf8;
命令行创建数据库(数据库名不是字母)报错;
https://i-blog.csdnimg.cn/direct/adba2bceac8e405381269080fd96f9c5.png
 这个问题是语法上的错误,在MySQL中,为了区分MySQL的关键字与普通字符,MySQL引入了一个反引号。改为反引号就不会报错了;
https://i-blog.csdnimg.cn/direct/ed7a20d62ebe450bac16cf0e75d40b95.png
小贴士:命令提示符清屏cls
3、查看创建好的数据库信息

语法格式:show create database 数据库名称;案例:查看testing数据库信息show create database testing;
https://i-blog.csdnimg.cn/direct/4f90571751c7445eb5a64dae3edc996b.png
4、选择(使用)数据库

语法:use数据库;
案例:选择testing数据库
use testing;  
5、查看数据库中的全部表

语法:show tables;
案例:选择testing数据库,并查看数据库中的表
use testing;show tables;
6、删除数据库

语法:drop database 数据库名称
案例:删除testing数据库,并验证drop database testing;show databases;
七、数据类型

 数据类型就是对数据(文字、数字、日期、音频、视频...)的分类,数据类型用于规定某列可以存储的数据风格。
1、整数类型 int

int大概int(n) 表示整数,n表示数值的宽度
比如:int(5)最多5位整数,范围:-99999-99999
2、小数类型 double

double(n,m) 表示小数(浮点数)
n表示总的有效数位,m表示小数点后位数
比如:double(7,2) 123.56 1234.56 对的
数据范围的大小和“需求有关”!
测验成绩100 double(3.1) 100 99.5 0
3、字符类型

1)固定长度字符 char
char(n) 存储固定长度的字符,n表示字符的长度(个数)
比如:char(5) 'ABC' 不够的自动用空缺补齐
2)可变长度类型 varchar
varchar(n)存储可变长的字符,n表示字符的最大长度(个数)
比如:varchar(10) 最多只能生存10个字符
'abc123' 'abcdefg123'
'Hello World!'超了
https://i-blog.csdnimg.cn/direct/0090e2d0916240a090476623add7f4a2.png
3、日期时间类型

1)日期类型:date
date 用于存储日期,一样平常日期格式:YYYY-MM-DD  2022-07-22
datetime用于存储时间日期,一样平常格式:YYYY-MM-DD HH:mm:ss
比如:2022-07-22 16:01:53
八、数据库操纵语句

1、创建表

语法:create table 表名( 列名1 数据类型, 列名2 数据类型, ……, 列名n 数据类型);
训练:在testing库中,创建一个test01表
use testing;
create table `1111`( #`1111`反引号 id int(8), #编号 name varchar(30), #姓名 gender char(3), #性别 score double(4,1) #分数  最后一个字段后不写,);
2、查看表结构

语法:desc 表名;
如果这个表不存在:提示不存在
如果表存在:显示表的结构
3、插入语句

1)向表中针对全部列插入数据

语法格式:
insert into 表名 values(列值1, 列值2,...,列值n);
说明:
每执行一条insert语句,如果乐成,就会向表中插入一条记录!(一行)
values中的列值 和 表结构中的列的序次 是一致的!
在数据库中,数值类型数据 直接填写,
字符串 和 日期类型数据,需要添加单引号!
案例:向test01表中,插入一条记录,默认是全部列
 1)查看test01表的结构 desc `1111`; #反引号 2)根据语法,插入数据
https://i-blog.csdnimg.cn/direct/1db4fc895ebb492eb18391dcb2b9b780.png
#查看结果
https://i-blog.csdnimg.cn/direct/da7df3bef07148658c828fcbbcf90cbb.png
2)向表中的指定列插入数据

语法:
insert into 表名(列名1, 列名2,......, 列名n) values(列值1, 列值2, ......., 列值n);
说明:如果未提供的列,值默认是空值null
案例:向1111表,指定的列,插入以下数据
id
name
gender
score

king
99.5

#查看表结构desc `1111`;#根据语法、指定的列插入数据
https://i-blog.csdnimg.cn/direct/6347fb8e6711445cb8ea7f66ccdc8213.png#查询验证select * from `1111`;
https://i-blog.csdnimg.cn/direct/d5648eb0c1be4751ab1d06d3ebdeca37.png
规律:整数、小数 直接写值
字符串、日期、要写单引号
char varchar date datetime
4、更新语句

语法:
update 表名 set 列名=该列新值, 列名=该列新值,....where 记录匹配条件;
如果不写where条件,表示对全部行都操纵!
案例:更新1111表,将id是101的记录,将性别改为男
https://i-blog.csdnimg.cn/direct/b4af3fffd0dd4d4081182513dfecc5e0.pnghttps://i-blog.csdnimg.cn/direct/4b50473bfc9544e7ac80fef820c672ad.png
#查询验证select * from `1111`;
https://i-blog.csdnimg.cn/direct/3c5aa282767f47d09a5254c3f65025a1.png
5、删除表中的数据

语法:
delete from 表名 where 记录匹配条件;
说明:如果不写where子句,表示无条件,删除表中的全部记录(行)!
案例:删除1111表中,姓名(name)是king的记录
https://i-blog.csdnimg.cn/direct/7d2220b9f67f4633b8ecc7cfdd68a3e5.png
select * from `1111`;
https://i-blog.csdnimg.cn/direct/ddcbd9f399114092a8dc6d3734e16b35.png
6、删除表

语法:drop table 表名;
案例:删除test03表,并验证
https://i-blog.csdnimg.cn/direct/f2835f84c5ab40f8a413b6a3b5086164.png
九、查询语句(重点DQL)

https://i-blog.csdnimg.cn/direct/49210c723cd44c2a8071ca01467085b9.png
https://i-blog.csdnimg.cn/direct/9c54d12daf2a4c6fadf1e568ff2dd2f2.png
1、查询全部

语法:
select * from 表名;
说明:*表示全部例
由于不写where子句,表示无条件,找到全部行!
2、查询表中指定列数据

语法:select 列名1, 列名2, ......,列名n from 表名;
案例:查询表中,姓名(name)、年事(age)
https://i-blog.csdnimg.cn/direct/3f6401ea43204b7c9538586977e49a1e.png
3、给列起别名(关键字:as)

语法:select 列名1 as 别名1, 列名2 as 别名2, ......列名n as 别名n from 表名;
说明:可以省略as, 列名和别名之间使用空格隔开!
https://i-blog.csdnimg.cn/direct/852752557de54c548b929f45064fb96f.png
思绪:平时给列起别名,一样平常用英文、拼音、少用中文名,目的是为了简化列名
4、去除重复的列值(distinct)

语法:select distinct 列名 from 表名;
案例:查询a表中,员工的age,并去重显示
https://i-blog.csdnimg.cn/direct/3e232c6c6b5b40c5a95d82771da3cda0.png
5、分页查询(限定 limit)

语法:
select */列名 from 表名 limit 初始位置,每页行数;
说明:
初始位置:表示从那里开始查询,是可选项,可以不写(页码-1)*每页条数
如果不写,默认值是0,表示第一条记录开始
如果写了,比如是9,表示从第10条开始
每页行数:表示每页要查询的记录行数
案例:查询emp表中的前2条记录
select * from a limit 0,2;select * from a limit 2;
https://i-blog.csdnimg.cn/direct/bbb0c92b250546d684b448750c778d8d.png
6、排序(order by)

语法:select */列名 from 表名 order by 列名1 asc/desc,列名2 asc/desc;
asc 表示升序,默承认以不写,desc表示降序,若需要,不能省略
多列排序规则,先按照列名1举行排序(第一梯队),如果列名1的值雷同,再按照列名2排序(第二梯队)
案例:查询emp表中,员工姓名(ename),职位(job),工资(sal),部分编号(deptno),先根据部分编号降序排序,再根据工资升序排序
https://i-blog.csdnimg.cn/direct/9737f25d1f374263a714d6f4d1ba0d5e.png
7、条件查询(where)重点

select */列名,表达式
from 表名
where 查询条件 
order by 列名1 asc/desc,列名2 asc/desc;
查询条件说明:

1)关系运算符
> < = >= <= (!= <>)不即是
2)逻辑运算符
and or not与 或 非
3)特别用法
is  in  between 5 and 10 like是 在....之列 在5和10之间的任何一个值 像 模糊查询
案例:查询a表中,分数(score)不即是90分的,学员的姓名(name),分数(score),年事(age),根据分数降序排序
https://i-blog.csdnimg.cn/direct/1188eb5e16b2429195bc61e2cb391ca9.png
训练:查询a表中,地址不即是北京大概年事大于30岁的,学员姓名(sname),年事(age),地址(address),根据年事升序排序
select sname, age, address from stu01 where address!='北京' or age>30 order by age asc;
规律:此中有两个地址是null值,导致记录没有匹配到!(null值影响之一)
案例:查询emp表中,职位(job)不是manager的员工信息。
select * from emp where job!='manager';select * from emp where not job='manager';select * from emp where job<>'manager';
训练:查询student表中,班级(sclass)是1年1班,1年2班,1男3班的学员的信息
select * from student where sclass='1年1班' or sclass='1年2班' or sclass='1年3班';#等价于(列名 in (值1,值2,值3,......))select * from student where sclass in ('1年1班','1年2班','1年3班');
案例:查询emp表中,员工的奖金(comm)为null的员工信息
写法1:不对!任何值,包括空值null,都无法和null值直接比较!直接比较,结果都为假select * from emp where comm=null;精确写法select * from emp where comm is null;
结论:任何值和null值比较,要求使用 is null 、is not null 、否则无法比较!
案例:查询emp表中,工资(sal)在1250-4500之间(包括边界)的员工信息
select * from emp where sal between 1250 and 4500;select * from emp where sal >=1250 and sal<=4500;
技巧:模糊查询(like...像...那样)

select */列名 from 表名
where 列名 like 条件;
#条件说明:
%:表示0个或多个字符(恣意字符)
_:表示恣意一个字符
训练:查询表中,姓名的开头第一个是x的信息;
https://i-blog.csdnimg.cn/direct/2372abcb76794288a9c0314dc8e22823.png
训练:查询表中,姓名(sname)包开头是x并且年事(age)大于18岁的,学员的姓名(name),根据学员编号降序序分列
https://i-blog.csdnimg.cn/direct/2315812728e54af49382bda1a3daeea8.png
8、聚合函数(组函数,分组函数)

1)sum(列名)
功能:针对某列的累加和,求和
案例:查询表中,员工的年事的总和是多少
https://i-blog.csdnimg.cn/direct/9e846815165f46be8ded637c2e7c58fa.png#为函数表达式起别名https://i-blog.csdnimg.cn/direct/fa1b014e671e4730a8fd888ff7ece99d.png
2)avg(列名)
功能:针对某列值求平均数
案例:查询出a表中,学员的平均分(score)是多少?
https://i-blog.csdnimg.cn/direct/15d3f0090a8e4bb08ab840b90c5c1646.png
3)min(列名)
功能:求出某列的最小值
案例:查询a表中,学员的最低分
https://i-blog.csdnimg.cn/direct/9116fa2742ec4268a3d066ac56192842.png
4)max(列名)
功能:求出某列的最大值
训练:查询a表中,学员的最高分
https://i-blog.csdnimg.cn/direct/3bdfd7ad9ba549989e7e443056ecc757.png
训练:查询a表中,学员的最高分和最低分?
https://i-blog.csdnimg.cn/direct/52b6838972744b9bb7535340a9b88d49.png
5)count(列名/*)
功能:count(*) 统计全部行的总行数
遇到null值也会统计在内!
count(列名)统计某列值得个数,null值会被忽略,不加入统计!
结论:聚合函数遇到null值会忽略,除了count(*)
案例:查询a表中,员工的总记录条数?
https://i-blog.csdnimg.cn/direct/3153149d9cdd4c5482d608c45c6782c1.png
案例:查询emp表中,有奖金(comm)的员工的数量?
#思绪:有奖金 就是comm字段的值 不为null#联合聚合函数,针对某字段统计,遇到null会忽略掉select count(comm) from emp;
#没有奖金的有几个?
select count(empno) from emp where comm is null;
训练:查询a表中,年事(age)有多少种?
#思绪,聚合函数中的数据可以去重-distinct 先去重再统计https://i-blog.csdnimg.cn/direct/8b397bcc067145e0a9ae9d8a95ebaaa0.png
select后可以跟列名、表达式、函数
select 1+2;
select now();#查看当前体系的时间和日期 函数
9、分组查询(group by)

含义:根据表中的某一列,作为分组条件,将同组记录聚集在一起
分组是为了聚集,聚集是为了计算
语法:select 列名/聚合函数/*
 from 表名
 where分组前的过滤条件
 group by 列名
 order by 列名1 asc/desc,列名2 asc/desc排序;
案例:查询a 表中,男生和女生的人数?
#有几组,就会出现几行结果,每一组出一行结果统计(聚集)
https://i-blog.csdnimg.cn/direct/284e7f7d4330480b9d5a9413cba6241c.png
案例:查询student表中,分数在70-90分之间的(包括边界),班级(sclass)的名称、班级的人数,班级的分数总和(score),班级的平均分,要求根据班级的平均分举行降序分列
#聚合函数表达式使用别名,后续按照别名指代,举行排序
select sclass, count(sid), sum(score), avg(score) as avgsc from student where score between 70 and 90 group by sclass order by avgsc desc;+--------+------------+------------+----------+| sclass | count(sid) | sum(score) | avgsc |+--------+------------+------------+----------+| 2年3班 | 1 | 90.0 | 90.00000 || 1年1班 | 2 | 172.5 | 86.25000 || 1年2班 | 2 | 165.5 | 82.75000 || 2年1班 | 1 | 78.0 | 78.00000 || 1年3班 | 3 | 225.5 | 75.16667 |+--------+------------+------------+----------+
10、having子句

说明:having子句对分组后举行过滤,分组后的过滤条件
经常和分组查询一起使用:(group by)
语法:
select 列名、聚合函数、别名,....from 表名where 分组前的过滤条件group by 分组字段having 分组后的过滤条件order by 列名/聚合函数/别名 asc/desc,....
说明:where和having的区别?
where是分组前对整个表格数据举行过滤,where字句中不能使用聚合函数!
比如:where avg(sal)>1000错误的! 未分组,无法计算组函数!
having是在分组后的过滤,可以使用聚合函数的结果作为判断依据;
必须和group by一起使用,不能单独出现!
案例:查询emp表中,部分的平均工资大于2000的,每个部分的编号(deptno)、部分人数、部分总工资(sal)、平均工资,要求按照部分人数降序分列
写法1:错误的 不能在where字句中使用分组函数!需要用havingselect deptno, count(empno), sum(sal), avg(sal)from empwhere avg(sal)>2000group by deptnoorder by count(empno) desc;写法2:精确的select deptno, count(empno), sum(sal), avg(sal)from empgroup by deptnohaving avg(sal)>2000order by count(empno) desc;
11、子查询(嵌套查询)

含义:一个sql语句里,又包罗一个sql语句
在主页查询中,嵌套子查询
(重要目的) (中间步调)
原因:有时1条sql比较 复杂,无法立即查回结果:
可以将中间步调,作为子查询,先执行
将子查询的结果再交给主查询,完成最后任务
头脑:化繁为简,分而治之(逐个击破)
案例:求出谁的工资最低?#子查询 求出最低工资是多少?#将主查询 嵌套 子查询,完成查询的嵌套select ename,sal from empwhere sal=(select min(sal) from emp);
12、多表毗连查询(重点,难点)

1)内毗连查询
含义:将几张表,按照关系举行匹配;
是一种严格的匹配,遇到null值会被忽略掉!(emp最后一个员工在90部分,内毗连查询不出来,无法匹配,导致记录丢失)
语法:
select(别名1.列名1,别名2.表名2.........)from 表名1,别名1,表名2,别名2...........
留意:如果不写表毗连条件,会形成"笛卡尔积",emp表的15条记录会和dept表的7条记录,都组合匹配一次,形成15x7=105条结果!(不写表毗连条件这种叫做交叉查询)
https://i-blog.csdnimg.cn/direct/8972f9ae9bbe4bb2ab8ac1cd0183d73f.png
加了条件后,就剩下15条员工信息
举例:两个表的毗连查询
#不加任何条件,形成笛卡尔积: * 两个表的全部列 select * from emp,dept; #105 条 #添加表毗连条件   等值关系:等值毗连 #为了区分差别表的雷同字段,需要为表起别名  select *  from emp e,dept d                       两个表  where e.deptno = d.deptno;
自毗连:一个表中的两个字段有关系,将一张表通过起别名的方式,模仿成两张表!
训练:查询emp表中,员工编号,员工姓名,员工职位,员工的领导编号,员工领导的姓名
https://i-blog.csdnimg.cn/direct/f9a72359dedc41d08555d30856bdf8e7.png
select e.empno,e.ename,e.job,e.mgr,m.empno,m.enamefrom emp e,emp mwhere e.mgr=m.empno;(员工的领导编号=领导的编号)#等价于:inner join   on 表毗连条件(inner可以省略)select e.empno,e.ename,e.job,m.empno,m.enamefrom emp e inner join emp mon e.mgr = m.empno;
14 rows in set (0.01 sec)#14条记录
说明;以上都是内毗连------inner join
记录会严格匹配,比如遇到null会导致记录丢失(King的mgr为null)
2)外毗连查询(outer join)
说明:用来办理记录的"一个都不能少"的问题
select....from 左表 a left outer join 右表 bon 表毗连条件where 其它过滤条件
分为: 左外毗连 Left outer join on 保证左表的记录一个都不能少!(outer可以)
右外毗连 right outer join on保证右表的记录一个都不能少!
全外毗连 将左边和右边归并 保证两边表的记录一个都不能少!
案例:将以上内毗连,改为外毗连,目的将老板King找回来
select e.empno,e.ename,e.job,m.empno,m.enamefrom emp e left outer join emp m                  (左表毗连右表)on e.mgr = m.empno;15 rows in set (0.01 sec)#15条记录
结论:外毗连是对内毗连的补充,办理记录一个都不能少的问题!
十,约束

说明:在创建表的时候,可以设置一些规则,只有满意这些规则,才可以插入数据,我们称这些规则为约束.
好处:确保数据的完整性,一致性!
分类:
主键约束 (PK) primary key
唯一约束(UK) (unique)
非空约束 (NN) not null
默认值约束 default
1.主键约束(primary key)

含义:主键约束的列,作为表中的主属性 唯一且非空
怎样添加:在创建表时,添加主键约束
create table work01( id int primary key, name varchar(30), age int(3));
联合主键:两个列联合起来 唯一且 非空
说明:使用主键约束修饰2列或多列,一样平常使用2列create table work02( id int(8), name varchar(30), age int(3), primary key(id, name)
);
删除主键约束:

alter table 表名 drop primary key;改变   表       移除   主键
案例:删除work01表中的主键约束,并验证
alter table work01 drop primary key;
结论:主键确保行的唯一性!主键=唯一+非空+其它好处
2.唯一约束(unique)

说明:针对某一列,组合列,定义唯一约束,确保数据不重复;
举例:创建表时,添加唯一约束:
create table work03( id int(8) primary key, name varchar(30), phone varchar(20) unique, email varchar(30) unique, address varchar(50));
删除唯一约束:要找到管理约束的信息表(show keys )

语法格式1:
alter table 表名 drop index key-value值;
语法格式2:查看约束关系,找到列名和约束key-name的关系,
show keys from 表名;
案例:删除work03表中,phone列的唯一约束
第一步:show keys from work03;     #key-name的值:phone第二步:desc work03;第三步:alter table work03 drop index phone;第四步:desc work03;
3.默认值约束(default)

说明:为某列设置默认值,当插入数据时,不提供值,就使用默认值取代;
如果提供了值,就直接使用.
创建表时,添加默认值约束:create table work04( id int(8)      primary key, name varchar(30), email varchar(30)         unique, age int(3)                default 18, address varchar(50)       default '北京');#插入数据-默认值   只提供前3列的值,后2列会使用默认值insert into work04(id,name,email) values(2,'lucy','lucy@qq.com');+----+------+-------------+------+---------+| ID | name | email       | age  | address |+----+------+-------------+------+---------+|  1 | mary | mary@qq.com |   25 | 杭州    ||  2 | lucy | lucy@qq.com |   18 | 北京    |+----+------+-------------+------+---------+
删除默认值:

语法:使用改变表结构,对枚举行重现定义
alter table 表名 modify 列名 数据类型(宽度) default null;大概:不写默认值为null,默认值就是nullalter table 表名 modify 列名 数据类型(宽度);
案例:删除work04表中age列的默认值,并验证
alter table work04 modify age int(3);
4.非空约束(not null)

说明:用来约束某一列的值不答应为null
好处:数据库表中null会造成很多影响,不答应为null能够从根本上杜绝null值造成的影响
NULL值有哪些影响?
1.null加入算数运算,结果也为空
select comm,comm+100 from emp;
如果comm为null,用0取代;否则还使用comm的值
select comm,ifnull(comm,0) +100 from emp;
2.null值加入比较,结果都为假,导致记录丢失,使用外毗连可找回;
和null值比较,使用 is null , is not null
3.全部的聚合函数都会忽略null值,除了count(*)会将null值统计在内;
sum(comm) avg(comm) max(comm) min(comm) count(comm)
创建表时,添加非空约束:
create table work05( id int(8) primary key, name varchar(30) not null, age int(3) default 18, email varchar(30) unique, address varchar(30));
删除非空约束

alter table 表名 modify 列名 数据类型(宽度);
案例:删除work05表中name列的非空约束
show keys work05;.alter table work05 modify name varchar(30);desc work05;
十一,视图(view)

说明:可以理解为就是一张假造表,通过视图可以查询出'假造表'中的数据
好处:使用视图能够大大的简化后续的sql语句;
已经将复杂sql查询逻辑提前完成,提供的视图供后续使用;
不会进步sql的性能(查询速度更快)
1.创建视图

语法:
create view 视图名称as查询语句;
案例:创建一个视图,视图名称 view_emp,查询emp表中全部数据,作为试图结果
create view view_empasselect * from emp;#使用select empno ,ename,salfrom view_emp;
2:查询视图

原理:通过查询视图,就好对比"假造表"直接查询
'假造表'是通过视图中存储的sql语句查到的结果!
视图中sql是随时使用,结果是最新的!
案例:查询view_emp视图中,员工姓名,职位,工资,根据工资降序分列
select ename,job,salfrom view_emporder by sal desc;
3.删除视图

drop view 视图名称;
案例:删除视图view_emp,并验证
drop view view_emp;#验证:desc view_emp;#报错 无view_emp视图了show tables;#无view_emp视图了
小结:怎样理解视图view?

1.视图也是数据库中的一种对象;
2.视图是为了生存一条sql语句,不占用表空间(存储大量数据);
3.使用视图可以大大简化我们的sql语句;
4,使用视图不会进步查询速度;
十二.索引(index)

说明:索引是创建在表中的某列上,也是数据库中的一种对象;
索引的添加能够进步sql的查询服从(速度);
索引的创建会占据表空间;
索引能够进步查询服从,但是会低落增加,删除,修改的服从
索引适合在大量稳定数据中,查询结果,进步服从使用
1.创建索引

语法:
create index 索引名称 on 表名(列名);#规律:主键是默认的索引列#索引平时根据主键作为条件查询,服从高   where deptno=999
案例:对work06表中,对address列添加索引,索引名称为index_address_work06.
create index index_address_work06 on work06(address);
2.查看表中的索引

show index from 表名;
案例:查看work06表中的索引(三个索引)
show index from work06;
说明:
主键字段,会自动添加索引;
唯一约束的字段,也会自动添加索引;
使用效果:针对哪个字段添加索引,按照该字段查询的服从能进步!
3.删除索引

语法:删除某表的某索引
 drop index 索引名称 on 表名;
案例:删除Word06表中,address列上的索引,索引名称通过sql查看
查看表中的索引名称?show index from work06;删除work06表中的索引index_address_work06drop index index_address_work06 on work06;再查看show index from work06;
思索:软件测试和数据库有关系吗?请举例分析。(有)
1.搭建测试情况中,数据情况的搭建(数据库mysql,库,表,表中数据,数据之间什么关系)
2,预先准备初始数据(insert into),比如向表中添加几条用户账号记录,作为登录的条件.
3.如果业务数据产生了变化,可以通过更新语句(update),修改订单状态,供前端查询
4.如果某项记录引起业务辩说,可以删除(delete)
5.如果注册了账号,下了订单,可以通过查询语句(select)举行验库,检查数据是否乐成添加了
6.步伐员,测试员,一样平常通过sql对数据库举行增,删,改,查操纵.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: DATABASE(数据库)-MySQL