MySQL数据库

目录

数据库

用处

数据库管理系统

SQL

三者之间的关系

MySQL数据库

注释

SQL语句

DDL

对数据库的操作

对表的操作

DML

插入数据

修改数据

删除数据

DQL(数据查询语言)

简单查询

条件查询

排序

数据处理函数

分组函数

分组查询

把查询结果去除重复记录

执行顺序

多表操作

连接查询

分类

根据语法的年代进行分类

根据表连接的方式进行连接

笛卡尔积现象

多张表

子查询

union关键字

limit关键字

分页

数据库设计范式


数据库

英语单词DataBase,简称DB

按照一定格式存储数据的一些文件的集合

就是存储数据的仓库,实际上就是一堆文件,这些文件中存储了相同类型的数据

用处

1.实现数据持久化到本地;

2.使用完整的管理系统统一管理,可以实现结构化查询,方便管理;

数据库管理系统

DataBaseManagement,简称DBMS

数据库管理系统是专门对数据库中的数据进行增删改查

常见的数据库管理系统:MySQL,Oracle,SQLserver等

SQL

结构化查询语言,程序员通过编写SQL语句,由数据库管理系统进行执行SQL语句,来对数据库中的数据进行增删改查

SQL是一套标准,学习的SQL语句在其他的数据库管理系统中也可以使用

三者之间的关系

数据库管理系统---执行--->SQL语句---操作-->数据库中的数据

MySQL数据库

注释

#单行注释

--单行注释

/*

*/多行注释

SQL语句

注:所有的SQL语句都是通用的,都以";"结尾,SQL语句不区分大小写

DDL

数据(结构)定义语言,主要操作的是表中的结构,不是表中的数据 常用的语句:create ,alter,drop

对数据库的操作

创建,删除数据库 CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8] 删除数据库 DROP DATABASE 数据库名 / [IF EXISTS数据库名]; 修改字符集 ALTER DATABASE 数据库名 CHARSET gbk

注:MySQL数据库不支持修改数据库名

对表的操作

创建表

create table 表名(

字段名1 数据类型,

字段名2 数据类型,

字段名3 数据类型

);

表名:建议以t_ 或者tbl_开始,可读性强

字段名:见名知意

字段的数据类型

字符型:(最长255)

char 定长的,会自动补全到定义的长度,不需要动态的分配空间,速度快,但是可能会造成空间的浪费

varchar 变长的,根据实际的长度动态分配空间来存储,节省空间,但是速度慢

日期型 :date 年月日

datetime 年月日时分秒

数值型:float

double 常用,精度更高

数据类型(M,D)

M指的是精度,数据的总长度

D指的是标度,小数点后的长度

整数型 :tinyint 1字节

smallint 2字节

mediumint 3字节

int 最常用 4字节 最长11

bigint 8字节

clod 字符大对象

最多可以存储4G的字符串

blod 二进制大对象,专门存储图片,声音,视频等流媒体数据

TEXT文本类型,可以存储更多字符

tinytext ,text,mediumtext,longtext

指定默认值:default

约束

约束如果没有在列的后面,就属于表级约束,需要给多个字段联合起来添加一个约束的时候,就需要用到表级约束

在MySQL中,如果一个字段同时被not null和unique约束的话,该字段就可以被当做主键

1.主键约束 primary key auto_increment

表中必须有一列的值能够唯一的表示一条记录,主键不能为空,主键列在一张表中只能有一个,且不能重复,MySQL支持主键列自动增长

2.不能为空(没有表级约束)

not null

约束的字段不能为null

3.唯一约束

unique

约束的字段不能重复,但是可以为null

unique(字段名1,字段名2)两个字段联合起来唯一

4.检查约束

check

5.外键约束(多表)

添加外键约束的是子表

删除表,先删除子,再删除父

创建表,先创建父,在创建子

foreign key(字段名) references 表名(字段名)

外键可以为null,外键引用的字段至少是具有唯一性,但不一定是主键

删除表

drop table [if exists ]表名

truncate table 表名(清空整张表)

物理删除,删除效率比较高,表被一次删除,但是不可以恢复

修改表名

RENAME TABLE 旧表名 TO 新表名

复制表结构

CREATE TABLE 新表名 LIKE 被复制表名;

DML

数据操作语言

插入数据

insert into 表名 (字段名1,字段名2,字段名3..) values (值1,值2,值3..);

修改数据

update 表名 set 字段名1=值1,字段名2=值2 where 条件

没有条件限制会导致所有数据全部更新

删除数据

delete from 表名 where 条件

数据在硬盘上的真实储存空间没有释放,删除效率比较低

注:没有条件,整张表的数据就会全部删除

DQL(数据查询语言)

查询数据,凡是带有select关键字的都是查询语句

简单查询

1.查询一个字段:select 字段名 from 表名

select 和from都是关键字,字段名和表名都是标识符

2.查询多个字段: select 字段名1,字段名2 from 表名

用逗号隔开即可

3.查询全部字段: 3.1 :select * from 表名(不建议用,效率低,可读性差)

3.2 select 全部字段名 from 表名

用as关键字给查询的字段名起别名

条件查询

查询表中符合条件的数据

select 字段名 from 表名 where 条件

条件:=, != , <>(不等于),>, <, >=, <=

between ....and 在两个值之间,必须遵循左小右大,闭区间,包含两边的值

is null 为空

is not null 不为空(注:在数据库中,null不能为等号衡量)

and 且

or 或 (and优先级高于or)

in 包含 ,相当于多个or,in后面跟的是具体的值

not in 不包含,不在这个范围内

not 取非

like 模糊查询,支持%或下划线匹配,%匹配任意多个字符._任意一个字符

排序

select 字段名 from 表名 order by 字段名(默认是升序)

select 字段名 from 表名 order by 字段名 desc 降序

select 字段名 from 表名 order by 字段名 asc 指定升序

多个字段排序

select 字段名 from 表名 order by 字段名1,字段名2

先按照字段1排序,只有字段1相等时才会根据字段2排序

数据处理函数

又被称为单行处理函数,一个输入对应一个输出

字符函数

lower 转为小写

upper 转为大写

substr 取子串,substr(被截取的字符串,起始下标,截取的长度)

注:起始下标从1开始

length():获取长度

trim 去空格

算数函数

round 四舍五入

rand 生成随机数

ifnull 可以将null转换为一个具体值,ifnull是空处理函数,专门处理空的,null只要参与运算,最终结果一定是null,ifnull(数据,被当作哪个值)

逻辑函数

case when 条件 then 结果1 when 条件 then 结果2 else 结果3 end;

日期函数

now():返回当前系统日期+时间

curdate():返回当前系统日期,不包含时间

curtime():返回当前时间,不包含日期

可以获取指定的部分,年、月、日、小时、分钟、秒

YEAR(日期列),MONTH(日期列),DAY(日期列) ,

HOUR(日期列) ,MINUTE(日期列) SECOND(日期列)

str_to_date:将日期格式的字符转换成指定格式的日期

date_format:将日期转换成字符串

datediff(big,small):返回两个日期相差的天数

format(字段名,'格式')'$99.99'

str_to_date:将字符串varchar类型转换为date类型

(字符串,日期格式)

date_format:将date类型转换为具有一定格式的varchar字符串类型

MySQL日期格式:

%Y年

%m月

%d日

%h时

%i分

%s秒

分组函数

多行处理函数,输入多行,最终输出一行

分类:

sum 求和

avg 平均值

max 最大值

min 最小值

count 计数

注:1.必须进行分组然后才能使用

2.分组函数自动忽略null,不需要提前对null进行处理

3.count(具体字段):表示统计该字段中所有不为null的元素的总数

count(*):表示统计表中的总行数,只要有一行数据,count++

分组查询

select ... from .... group by...

在一条select语句中,如果有group by 语句的话,select后面只能跟:参加分组的字段以及分组函数,其他的一律不能跟

使用having可以对分组之后的数据进一步操作,但是不能单独使用,只能与group by 联合使用

把查询结果去除重复记录

关键字 distinct

使用时必须放在所有字段的前面

执行顺序

select ...

from ...

where ...

group by...

having..

order by ..

执行顺序不可以改变,排序总是在最后执行

第一步form 第二步 where 第三步 group by 第四步having 第五步 select 第六步 order by

多表操作

在一个复杂的系统中,建议把不同的信息存储在不同的表中,但是表与表之间有联系,进行表的设计

连接查询

多张表联合起来查询数据,称为连接查询

分类

根据语法的年代进行分类

SQL92:1992年出现的语法

SQL99:1999年出现的语法

根据表连接的方式进行连接

内连接

查询的表是平等的关系

1.等值连接

SQL92:select ...

from....

where...

SOL99:select

from...

inner join...(inner可以省略,带着可读性更好)

on.....(连接条件,条件是等量关系)

SQL99连接的条件是独立的,如果还需要进一步筛选,再往后添加where

2.非等值连接

条件不是等量关系

3.自连接

技巧:一张表看成两张表

外连接

表存在主次关系

1.左连接(左外连接)

select..

from..

left join..(left关键字表示把左边的表看做是主表,为了将这张表中的全部数据查询出来,捎带着关联查询右边的表)

on...

2.右连接(右外连接)

select..

from..

right join..(right关键字表示把右边的表看做是主表,为了将这张表中的全部数据查询出来,捎带着关联查询左边的表)

on...

两者可以互换

全连接

笛卡尔积现象

当两张表进行连接查询时,没有任何的条件限制,就会出现笛卡尔积现象,是两张表条数的乘积

注:表的连接次数越多,效率越低,尽量避免表的笛卡尔积现象

多张表

语法:select...

from a

join b

on a和b的连接条件

join c

on a和c的连接条件

join d

on a和d的连接条件

一条SQL中内连接和外连接可以混合,都可以出现

子查询

select语句中嵌套select语句,被嵌套的select语句称为子查询

出现的位置:select

....(select)

from

....(select)

where

...(select)

where字句中出现子查询

找出比最低工资高的员工姓名和工资

第一步:查询最低工资

select min(..)

from....

第二步找出大于最低工资的

select ...,....

from ...

where...

第三步合并

将第一步的查询语句替换到第二步中具体结果中

from子句中的子查询

from后面的子查询,可以将子查询中的查询结果当做一张临时表

select子句中的子查询

union关键字

将查询结果连接起来,对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,union可以减少匹配的次数,在减少匹配次数的情况下,还可以完成两个结果集的拼接

注意事项:进行结果集合并时,要求结果集的列数相同

数据类型相同

limit关键字

将查询结果提取一部分,通常使用在分页查询中

分页的目的是为了提高用户体验

limit startIndex,length

起始下标(从0开始),长度

注:limit在order by后面执行

分页

limit (页码-1)*记录条数,记录条数

数据库设计范式

第一范式:要求每一张表必须要有主键,每一个字段具有原子性

第二范式:建立在第一范式的基础上,要求所有的非主键字段完全依赖主键,不要部分依赖

第三范式:建立在第二范式的基础上,要求所有的非主键字段直接依赖主键,不要产生传递依赖

一对多:两张表,多的表加外键

一对一,外键唯一

多对多,三张表,关系表两个外键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值