(MySQL)SQL复习笔记

常用的服务型数据库Oracle、MySQL、postgresql等等都是关系型数据库,文档型数据库SQLite是用于移动端(手机、pad等等)存储数据

E-R关系模型

entry-relationship:实体-关系,一个实体转化成一个数据库中的表,关系包括一对一、一对多、多对多。关系转换数据库表中的一个列,在关系型数据库中一行就是一个对象

三范式

列不可拆分、唯一标识(主键必须)、引用主键(关系表示时只能引用主键)

数据完整性

1.数据类型:数字(int、decimal小数)、字符串(char、varchar、text大文本)、日期(datetime日期和时间)、布尔(bit二进制数据)

2.约束:主键(primary key)、非空(not null)、唯一(unique)、默认(default)、外键(foreign key)。表中只有一列为主键,唯一约束是表中有多个唯一约束列

3.逻辑删除:在列表中添加一列作为删除标记(本质就是修改操作update),如isDelete、DeleteFlag

数据库操作

1.创建数据库:create database 数据库名 charse=utf8;

2.删除数据库:drop database 数据库名

3.选择数据库:use 数据库名

4.列出所有数据库:show databases

表操作

1.列出所有表:show tables

2.新增表:create table 表名(列及类型)

create table s(id int auto_increment primary key),列id为int类型、自增长、主键

sname varchar(10) not null,sname字段为长度限制为10的字符

);

3.修改表:alter table 表名 add|change|drop 列名 类型

新增列、只能修改列的类型、删除列

4.删除表:drop table 表名

添加主键、外键

create table a(id int auto_increment primary key),列id为int类型、自增长、主键

sname varchar(10) not null,sname字段为长度限制为10的字符

foreign  key(sid) reference s(id));列sid为外键关联表s的列id

插入语句

1.全列插入:insert  into 表名 values(…) 赋值顺序和表中列顺序必须一致

2.缺省插入:insert  into 表名(列1、列2…) values(值1、值2…)

3.同时插入多条数据:insert  into 表名 values(…),(…),(…)…

insert  into 表名(列1、列2…) values(值1、值2…),(值1、值2…),(值1、值2…)…

修改语句

update 表名 set 列1=值1,… where 条件

删除语句

delete from 表名 where 条件

备份和恢复

1.备份:mysqldump -u root -p 数据库名 > d:\db.bak

2.恢复:mysql -u root -p 数据库名 < d:\db.bak

恢复之前需要先创建一个数据库

查询

1.全表查询:select * from 表名

2.去重复行查询:select distinct 列名  from 表名

3.条件查询:select * from 表名 where 条件

(以下放在where关键字后面做查询条件)

4.逻辑运算符:and、or、not

5.比较运算符:=(等于)、>(大于)、>=(大于或等于)、 <(小于)、<=(小于或等于)、!=或<>(不等于)

6.模糊查询:like、%(表示任意一个或多个字符)、_(表示任意一个字符,可以用__匹配任意2个字符)

7.范围查询:in(值1,值2,…)在多个不连续的之中匹配

between  … and …在一个连续范围内匹配

8.空判断

(1)null与空字符串不同

(2)判断是否为空 is null

查询条件优先级

小括号、not、比较运算符、逻辑运算符

and比or先运算,可以使用小括号提高运算等级

between 后面第一个and 被该关键字匹配

聚合函数

根据多行进行统计,生成的统计结果集,常用的5个聚合函数

1.count()统计行数,括号中写*或者列名结果相同:select  count(*)  from  表名

2.max()列最大值:select  max(列命名)  from  表名

3.min()列最小值:select  min(列命名)  from  表名

4.avg()列平均值:select  avg(列命名)  from  表名

5.sum()所有列的和:select  sum(列命名)  from  表名

分组

按字段分组:group by

select  列1,列2,聚合…  from 表名 group  by 列1,列2,列3,…

如:select  gender as 性别,count(*)…  from students group  by gender

分组后数据筛选

对分组后的结果集进行筛选:having

select  列1,列2,聚合…  from 表名 group  by 列1,列2,列3,… having 列1,…聚合…

如:select  gender as 性别,count(*)…  from students group  by gender having gender=1

select  gender as 性别,count(*)…  from students group  by gender having count(*)>2

(where是对from后面的结果集进行筛选,having是对分组后的结果集进行筛选)

分页

1.select  *  from  表名  limit start,count

从start开始,获取count条数据,start的索引从0开始

2.每页显示m条数据,当前显示第n页,页数从1开始传:

select  *  from  表名  limit  (n-1)*m,m

级联操作

1.限制(restrict):删除有外键关联的数据时,如果id存在则抛出异常

2.级联(cascade):主表记录删除所有关联记录都被删除

3.set  null:将外键设置为空

4.no  action:什么都不坐

逻辑删除可以解决外键删除问题

链接查询

1.表A  inner  join  表B:表A与B匹配的行会出现在结果中,没有匹配到的数据不显示,无论表A和B的前后顺序得到相同结果

2.表A  left  join  表B:表A与B匹配的行会出现在结果中,外加表A中独有的数据,未对应B的字段使用null填充

3.表A  right  join  表B:表A与B匹配的行会出现在结果中,外加表B中独有的数据,未对应A的字段使用null填充

自关联

当前表的一个字段引用自己的主键:

create table areas(id int auto_increment primary key),列id为int类型、自增长、主键

title varchar(50) not null,

foreign  key(pid) reference areas(id));列pid关联当前表的id

视图

复杂查询的结果需要多次使用时,可以封装成一个视图

存在学生students、成绩scores、科目subject三个表

create view  v_stu_sub_sco as

select  student.*,subject.title,scores.score  from scores

inner join students on scores.stuid=students.id

inner join subject on  scores.subid=subject.id

where  student.isDelete=1 and subject.isDelete=0

自关联查询

select *  from  areas as sheng  where title=’山西省’

select  *  from areas as shi

以上两条语句join链接查询:

select sheng.id as sid,sheng.title as stitle,shi.id as shiid,shi.title as shititle  from  areas as sheng

inner  join areas as shi on sheng.id=shi.id

where  sheng.pid  is  null  and sheng.title=’山西省’

limit  0,100

查询出山西省中的所有市的信息

一次查询性能测试

set   profiling=1

执行SQL语句

show profiles

事物

当一个业务逻辑需要多个sql完成时,如果其中某条sql出错,则整个操作回滚

使用事物保障一个业务的完整性:原子性(业务不可再拆分)、一致性(执行的结果必须一致,顺序不同结果相同)、隔离性(不会授其他事物影响执行结果)、持久性(对于任意已提交的事物,系统必须保证数据完整不丢失)

    原文作者:蘑菇小巷
    原文地址: https://www.jianshu.com/p/1b8beaa82ae9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞