(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出错,则整个操作回滚

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容