在SQL语言中,常用四种类型语言:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)、DTL(数据事务语言).以下,将对其各部分进行一一概述.
目录
1.DDL(Data Definition Language)
主要内容:对数据库/表创建、修改、删除操作
数据库创建:create database 数据库名;
数据表创建:create table 数据表名(字段1 字段类型,字段2 字段类型,...)
数据库删除:drop databases 数据库名;
数据表删除:drop tables 数据表名;
数据库修改:不提倡该操作,已被Mysql禁用
数据表修改:alter table 数据表名 add|drop|change|modify| column ....
其次,在创建表的时候,通常会对表内的字段(列)进行一定的约束,共分为以下六种:
主键约束(primary key)、自增约束(auto_increment)、唯一约束(unique)、非空约束(not null)、默认约束(default)、外键约束(foreign key)
当然,以上六种约束也可以在创建表之后添加、修改、删除
2.DML(Data Manipulation Language)
主要内容:对数据表中的值进行插入、修改、删除操作
数据插入:insert into 数据表名(字段1,字段2,...) values(值1,值2)
数据修改:update 数据表名 set 字段=值 where..
数据删除:delete from 数据表名/truncate 数据表名
(仅删除表中的值,仍保留表的结构)
**(两者的区别:1.truncate效率高,但后面不能加where语句;相反,delete…from…可加where语句
2.对于具有自增约束的字段,delete from 删除后,新增字段是从断点处开始;而truncate删除后,是从1开始
3.在事务中,truncate不能回滚,delete from 可以回滚)
3.DQL(Data Query Language)
主要内容:通过查询语句实现对特定数据的筛选
- 基础查询
1.查询表中所有数据:select * from 数据表名
2.查询表中多个字段数据:select 字段1,字段2,... from 数据表名
3.查询表中不重复数据记录:select distinct 字段 from 数据表名
4.查询表中某个字段在区间a~b之间的数据:select * from 数据表名 where 字段 between a and b
或
select * from 数据表名 where 字段>a and 字段<b
5.或者关系查询:select * from 数据表名 where 字段 in (a,b,c,..)
(将字段为a,b,c,. 的数据都筛选出来)
6.不同关系的或者(并)关系查询:select * where 字段1=xxx or(and) 字段2=xxx from 数据表名
7.按照某个分类字段查询:select * from 数据表名 group by 字段
8.查询某个字段(如成绩)并按照降(升)序排列:select * from 数据表名 order by grade desc(asc)
9.统计某个字段的个数:select count(*) from 数据表名 where 字段=xxx
10.查询某个字段的个数大于某个数num:select * from 数据表名 having count(字段)>num
- 高级查询
1.函数筛选(最大、最小、平均、求和):select max/min/avg/sum(字段) from 数据表名
2.子查询(如从成绩表中筛选出最高分的学生姓名与年龄):select name,age from score where grade=(select max(grade) from score)
3.多表查询:select 字段1,字段2 from 表1,表2 where 表1.字段13=表2.字段23
select * from 表1 inner/left/right/full join 表2 on 表1.字段1=表2.字段2
4.复杂查询的一般结构:select...from 数据表名 where...group by..having ... order by ...limit
5.正则查询:select * from 数据表名 where 字段 regexp 正则表达式
select * from 数据表名 where 字段1 like '%a'
(查询字段1以a开头的数据)
select * from 数据表名 where 字段2 like 'a%'
(查询字段2以a结尾的数据)
select * from 数据表名 where 字段3 like ''%a%
(查询字段3包含a的数据)
4.DCL(Data Transaction Language)
主要内容:处理操作量大,复杂程度高的数据
事务定义:最小的不可分隔的单元。一般是由多条sql语句构成一个事务,然后共同完成一个业务(如转账)
事务特性:原子性、一致性、隔离性、持久性
事务控制语句:开启:begin/start transaction
回滚:rollback
提交:commit
事务隔离性:
1、read uncommitted ; 读未提交 -------事务a对数据进行操作过程中,事务没有被提交,但是b可以看到a操作的结果(一个rollback,另一个可以看到撤回的结果)
2、read committed ;读已提交
3、repeatable read ;可以重复读
4、serializable; 串行化 —事务a和事务b同时操作一张表,如果有一方想要插入数据,要等到事务b commit 后才能进行(会有等待超时)
查看隔离库级别:select @@global.transaction_isolation
修改隔离级别:set global transaction isolation level read uncommitted
脏读:事务a读到了事务b没有提交的数据 (uncommitted 情况下)
幻读:事务a和事务b同时操作一张表,事务a提交的数据,不能被事务读到(repeatable read情况下)
最后,我绘制了关于Mysql学习的思维导图,详细内容会在今后分享中说明.