mysql重点知识详解mysql重点知识详解
MySql
⼀、Sql语句的分类
DQL(数据查询语⾔):查询语句,凡是select语句都是DQL
DML(数据操作语⾔):insert delect update 对表当中的数据进⾏增删改
DDL(数据定义语⾔):create drop alter, 对表结构的增删改
TCL(事务控制语⾔):commit提交事务,rollback回滚事务.
DCL(事务控制语⾔):grant授权,revoke撤销权限等
⼆、对数据库和表的操作(不是数据)
创建数据库:create database 数据库名称
查询当前使⽤的数据库:select database()
查看数据库版本:select version()
删除库:drop database 表名
查看表结构:desc 表名
退出mysql:exit
1.建表语句
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
ascii码最小是什么字母…
mysql语句多表查询)
2.查看建表语句
查看当前库中的表:show tables
查看其它库中的表:show tables from(database name)
查看表的创建语句:show create table 表名
3.表的复制
create table 表名 as select语句
数据类型(常⽤的)
- int 整数型
- bigint 长整型(java中的long)
- float 浮点型
- char 定长字符串
- varchar 可变长字符串
-
date ⽇期类型
- BLOB ⼆进制⼤对象(图⽚,视频等)
- CLOB 字符⼤对象(较⼤⽂本)
char和varchar如何选择?
在实际开发中,当某个字段中的数据长度不发⽣改变的时候,是定长的,例如:性别,⽣⽇,等都采⽤char类型,当⼀个字段的数据长度不确定,例如:名字,简介等采⽤varchar.
三、约束(Constraint)
约束的作⽤:在创建表的时候,可以给表的字段添加相应的约束,添加约束的⽬的是为了保证表中的数据的合法性、有效性、完整性.
常见的约束
⾮空约束(not null):约束的字段不能为NULL
唯⼀约束(unique): 约束的字段不能重复,但可以为null
greate table 表名 (
id int ,
name varchar(255) unique,
sex char(1) unique ) //列级约束 ,每⼀个约束的字段都不能重复
greate table 表名 (
id int ,
name varchar(255),
sex char(1) ,
unique( name,sex)) //表级约束,两个字段的值不能同时重复,可以有⼀个字段重复
主键约束(primary key):约束的字段既不能为NULL也不能重复(简称pk)
主键⾃增 primary key auto_increment
⼀张表的主键约束只能有1个,主键值是记录这张表中⼀⾏数据的唯⼀标识.
单⼀主键 (推荐,常⽤)
复合主键(多个字段联合起来添加⼀个主键约束)
⾃然主键:主键值最好和⼀个业务没有任何关系的⾃然数.
外键约束(foreign key)
外键值可以是Null,外键字段引⽤其他表的某个字段的时候,被引⽤的字段不⼀定是主键,但⾄少具有unique约束
检查约束(check) :mysql不⽀持此约束,Oracle有check约束
四、DML操作
insert插⼊数据语法格式
insert into 表名(字段名1,字段名2,字段名3,…)values(值1,值2,值3,…)
要求:字段的数量和值的数量相同,并且数据类型要对应相同
⼀次插⼊多⾏数据
nsert into 表名(字段名1,字段名2,字段名3,…)values(值1,值2,值3,…),(值1,值2,值三3,…)
将查询的结果插⼊到⼀张表中
insert into 表名 select 语句 注意:插⼊的数据要和表的字段⼀致
修改数据:update 语法格式
update 表名 set 字段名1 = 值1,字段名2 = 值2 …where 条件;
注意:没有条件整张表数据全部更新.
删除数据:delete语法格式
delete from 表名 where 条件 ;
注意:没有条件全部删除
五、DQL操作
简单的查询语句
select 字段名1,字段名2,字段名3,…from 表名;
条件查询
select 字段名1,字段名2,字段名3,…from 表名 where 条件;
执⾏顺序:先from,然后where,最后select
条件查询between and 两者之间 (等同于>=and<=)
between and除了可以在数字⽅⾯使⽤还可以在字符串⽅⾯使⽤.
select name from student where name between’A’and’C’;//左闭右开
条件查询is null 和is not null
null在数据库当中不是⼀个值,代表什么也没有,不能⽤等号去衡量.
查询是否为null只能使⽤is null 和is not null
and 和or 和 in
and (并且),or(或者)
transform形容词in等同于or,in后⾯的值不是区间,是具体的值
select name job from emp where job=‘张三’ or job=‘李四’;//出岗位是张三和李四的员⼯.
select name, job from emp where sal in(800,5000);//in后⾯的值不是区间是具体的值
模糊查询like
%代表任意多个字符, _代表任意1个字符
select name from student where name like ‘%B%’;//出名字中有B的
select name from student where name like ‘_A%’;//出第⼆个字符是A的名字
数据排序 order by
默认是升序,asc表⽰升序,desc表⽰降序.
出⼯作岗位是"程序员"的员⼯,并按照薪资的降序排列
selece name ,job,salary from employee where job=‘程序员’ order by salary desc;
执⾏顺序:先from,然后where,再select 最后order by
分组函数
count(计数)
count(*):不是统计某个字段的个数,⽽是统计总记录条数.
count(name):表⽰统计name字段不为NULL的数据总数量
sum(求和)
avg(平均值)
max(最⼤值)
min(最⼩值)
分组函数⾃动忽略Null,所有数据库,只要有NULL参与运算的运算结果⼀定是NULL
ifnull()语法格式
select name ifnull(sarlry,0) as sarlry from employee
北京建价格如果⼯资为NULL,就显⽰为0
分组查询group by 和having
group by:按照某个字段或者某些字段进⾏分组.
having:having是对分组之后的数据进⾏再次过滤
注意:分组函数⼀般都是和group by联合使⽤,这也是为什么称为分组函数的原因,并且任何⼀个分组函数(count,sum,avg,max,min)都是在group by语句结束之后才会执⾏.当⼀条sql语句没有group by的话,整张表的数据会⾃成⼀组.
总结:分组函数不能直接使⽤在where语句当中,因为groug by是在where执⾏之后才会执⾏的.能使⽤where过滤尽量使⽤where,使⽤不了就⽤having过滤,having只能和group by联合使⽤.
select name,max(sarlry),job from employee group by job;
1
以上mysql语句当中,查询结果是有的,但是结果没有意义.在Oracle数据库当中会报错,语法错误.
规则:当⼀条语句中有group by的话,select后⾯只能跟分组函数和参与分组的字段.
总结完整的DQL语句及执⾏顺序
select 查询字段 from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段
关于查询结果集去重(distinct)
distinct只能出现在所有字段的最前⾯,后⾯的字段联合起来去重
select distinct name from student
执⾏顺序: from 1 where 2 group by 3 having 4 select 5 order by 6
六、连接查询
笛卡尔积
笛卡尔积现象:当两张表进⾏连接查询的时候,没有任何条件进⾏限制,最终的查询结果条数是两张表记录条数的乘积.
加条件进⾏过滤可以有效的避免笛卡尔积.
注意:避免笛卡尔积,不会减少匹配的次数,只不过显⽰的是有效记录.
内连接
等值连接:条件是等量关系
⾮等值连接:连接条件中的关系是⾮等量关系.
⾃连接
特点:⼀张表看成两张表,⾃⼰连接⾃⼰.
外连接
整型指针和字符指针
内连接:假设A和B表进⾏连接,使⽤内连接的话,凡是A表和B表能够匹配的记录查询出来,这就是内连接.AB两张表没有主副之分,两张表是平等的.
外连接:假设A和B表进⾏连接,使⽤外连接的话,AB两张表中有⼀张表是主表,⼀张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表⾃动模拟出NULL与之匹配.
左外连接:表⽰左边这张表是主表.
右边连接:表⽰右边这张表是主表.
⼦查询
⼦查询就是select语句中嵌套select语句,被嵌套的select语句就是⼦查询
true歌词 崩坏3⼦查询可以出现在 select … (select) from…(select)…where(select)
案例: where语句中使⽤⼦查询
出⾼于平均薪资的员⼯
select*from employee where sarlry>(select avg(sal) from employee)
from后⾯嵌套⼦查询
from(select…语句),表⽰把select语句看做⼀张表.
select后⾯嵌套⼦查询
这种⽅式很少⽤,select name (select…另⼀张表)表⽰查询的条件
union(可以将查询结果集相加)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论