Mysql 学习笔记

这篇博客详细介绍了Mysql的登录、常用命令、SQL语句的分类和使用,包括DQL、DML、DDL等,并深入讲解了各种查询、分组、连接、事务、索引等操作,还涉及到了视图、存储引擎、数据库设计三范式等高级概念,是Mysql学习者的全面指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

登录Mysql

常用命令

sql语句

分类

DQL

简单查询

条件查询

排序

单行处理函数

多行处理函数(分组函数)

分组查询

连接查询

表连接方式分类:

子查询

联合查询

limit

表的创建

删除操作

插入数据

日期格式

命名规范

表的修改

约束

主键约束

外键约束

存储引擎

事务

事务的四个特征:

事务隔离性

索引

添加索引条件

基本语法

注意

视图

DBA命令

数据库设计三范式


登录Mysql

mysql -u用户名 -p密码 (显示密码)

mysql -uroot -p (不显示密码)

常用命令

exit       //退出mysql

show databases; //查看数据库

use 数据库名 ; //使用数据库

create database 库名 ;//创建数据库

case.....when....then....when....then.....else....end

// eg: select name,job,(case job when 'a' then salary1.1 when 'b' then salary1.2 else salary end) as newsalary from emp;

数据库基本单元是表 table

数据库是以表格形式表示的数据的

行(row):数据

列(column):字段

show tables; 查看当前数据库下有哪些表

数据库中字符串是用单引号括起来的,单引号是标准

sql语句

分类

DQL- 数据库查询语言

DML- 数据库操作语言

DDL -数据库定义语言

TCL -事务控制语言

DCL -数据控制语言

mysql 不见";"不执行,“;”表示结束

查看表结构:desc 表名;

查看数据库版本号:select version();

查看当前使用的数据库 select database();

DQL

简单查询

select 字段名 from 表名;

查询两个或者多个字段 select 字段名1,2,.......from 表名;

查询所有字段: select *from 表名;

给查询的列起别名:select 字段名 as 别名 from 表名;(as可以用空格代替)

字段可以使用数学表达式,进行数学运算

条件查询

格式:select .....from .....where 条件;

条件:= , <,>,!=,<=,>=,<>(不等于),and和or(可连接多个条件)

between..and... 两个值之间,等同于 >= and <=

is null ,is not null

not(可以取非,主要用在is或in中)

like 模糊查询,支持%或下划线匹配

in 包含,相当于多个or 格式:in(条件1,条件2,.......)

not in 不包含

<%匹配任意个字符,一个下划线只匹配一个字符>

<and 优先级高于or,可以加括号控制优先级>

排序

select ...from ....order by 字段 desc; //降序

select ...from ....order by 字段 (asc); //升序

select A,B from ......order by A,B; //A在前面起主导作用,只有在A相等的时候,才会启用B排序

select ....from ...order by 1; //表示对第一列排序

单行处理函数

特点:一个输入对应一个输出

使用函数:函数名() <函数可以嵌套>

lower 转换小写

upper 转换大写

substr 取子串

格式:substr(被截取的串,起始下标(从1开始),截取长度)

length 取长度

trim 去空格

str_to_date 将字符串转成日期

date_format 格式化日期

concat(字段1,字段2) 字符串拼接

format 格式化日期

round 四舍五入

rand 生成随机数

ifnull 可以将null转成一个具体值

格式:ifnull(字段名,数字)//如果出现null,则null为....

<null参与运算结果一定为null>

多行处理函数(分组函数)

特点:输入多行,输出一行

count //计数

sum //求和

avg //求平均值

max //求最大值

min //求最小值

1.多行处理函数忽略null

2.分组函数中count(*)和count(具体字段数)有区别

前一个统计表当前总行数,后一个统计该字段下不为null的元素的总数

3.分组函数不能直接使用在where子句中

4.所有的分组函数可以组合起来一起用

分组查询

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

输入顺序:select...

from..........

where.........

group by................

order by......

执行顺序: from--where--group by--select--order by--limit

在一条select子句中,如果有group by,select后只能跟分组字段和分组函数

having ...... 跟在group by 之后,可以对分组后的数据进行过滤

把查询结果去重复记录 : distinct //只能出现在所有字段的前方

select distict 字段名 from .........

连接查询

形式:a join b on 连接条件 where 条件

表连接方式分类:

内连接:等值连接,非等值连接,自连接

外连接:左外连接,右外连接

全连接

<避免在查询时加条件,起别名可以提高查询效率>

1.等值内连接

select .... from a join b (inner) on a=b where ....... //inner可有可无

2.非等值内连接

3.自连接(技巧:一张表看成两张表)

4.外连接

a right (outer) join b on ...... //主要是为了把b的数据全部查询出来,捎带查询出ab关联的a中的数据,同理还有 left join 左外连接

<外连接的查询条数一定大于内连接查询条数>

6.多张表连接

select ..... from

a join b on ab连接条件

join c on ac 连接条件

join d on ad 连接条件........

<内连接外连接可以混合>

子查询

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

可以出现在:select ......(select.....) //此查询只能返回一条结果

from .......(select......) //将select查询结果看做一张表(建议取别名)

where ......(select.....)

联合查询

select ..... from.... union select .....from....

// 要求union两个结果集的列数和类型相同

limit

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

select .... from.... order by ... limit 起始下标,长度

//limit默认0为起始下标,缺省用法:limit(长度) 表示取前几数据

分页:limit((pageno-1)*pagesize,pagesize)

表的创建

create table表名(字段名1 类型,字段名2 类型,.......);

类型:varchar ,int,bigint,float,double,date,datetime,clob(字符大对象,最多可存4G字符串),blob(二进制大对象,专门用来存储图片,声音,视频等流媒体数据)

建表时,可以对指定字段设置默认值(默认为null),形式: defaut ‘默认值'

快速创建:create table 表名 as select .......from 表名; //将查询结果当做一张表创建

删除操作

drop table 表名;//不存在会报错

drop table if exsits 表名;

delete from 表名 where 条件; //删除效率较低,支持回滚

truncate from 表名 where 条件; //删除效率高,不支持回滚

插入数据

insert into 表名(字段名1,2,3,.......) values(值1,2,3,......) //值与字段一一对应

可一次插入多条记录: values(......),(......),(........)

insert语句一旦执行成功,必然会多一条或多条记录

字段名可以省去,此时默认为全部字段,值必须一一对应,不可省去

insert into 表名 select ......from 表名; //将查询结果插入到一张表中

日期格式

日期格式:%Y %m %d %h %i %s 年月天时分秒

日期格式转换:

str_to_date() varchar-->date

date_format() date-->varchar

str_to_date('字符串日期','日期格式')

date_formate(日期类型数据,’日期格式‘) //通常使用在查询日期,设置展示的日期格式

date型只包括年月日信息 默认格式:%Y-%m-%d

datetime包括年月日时分秒信息 默认格式:%Y-%m-%d %h:%i:%s

命名规范

所有标识符都是小写,单词之间用下划线衔接

表的修改

内容修改:

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

修改表名和列名(结构修改)的语法如下:

修改表名(将表名user改为users)alter table user rename to users;

修改列名(将字段名username改为name)alter table users change uesrname name varchar(30);

约束

在创建表的时候,我们可以给表中字段加上一些约束,来保证表中数据的完整性,有效性

分类:

1.非空约束 not null 具有列级约束 //约束字段不能为null

2.唯一性约束 unique 具有表级约束 //约束字段不能重复

各自唯一:字段名1 类型(大小)unique,字段名2 类型(大小)unique ,...........

联合唯一:unique(字段名1,2,3............................)

3.主键约束 primary key 具有表级约束

4.检查约束 check(MySQL不支持,oracle支持)

5.外键约束 foreign key

//表级约束主要是多个字段联合起来约束

主键约束

一张表只能有一个主键,主键值是每一行记录的唯一标识,任何一张表都应有主键,没有主键,表无效

主键的特征:not null +unique

auto_increment 表示从1开始自增,常用于主键创建

外键约束

通过外键引用的表为父表

实现表与表之间的约束,子表的字段值必须在主表中,保证数据的完整性

create .......(

.................

..................

字段名n,foreign key(字段名n)references 父表(引用字段名)

);

删除表顺序:子----父

创建表顺序:父--子

删除数据顺序:子--父

插入数据顺序:父--子

外键值可以为null,外键引用的字段至少具有unique约束

存储引擎

MySQL中一个表存储数据的方式

show create table 表名 ;//查看存储表的方式

mysql默认存储引擎为InnoDB,字符编码为UTF8

show engine \G //查看当前版本下MySQL支持哪些存储引擎

事务

一个完整的业务逻辑

只有DML语句与事务有关,批量DML语句同时成功或失败

提交事务:清空事务性活动的日志文件,将数据全部彻底持久划到数据库表中,标志着事物结束,且全部成功

回滚事务:撤销之前所有的DML操作,并清空该事务日志文件,标志着事务结束,且全部失败

transaction 事务

commit 提交事务

rollback 回滚事务

MySQL默认情况下是支持自动提交的

如果想关闭自动提交,得先使用 start transaction;来关闭它

事务的四个特征:

A 原子性 事务是最小工作单元

C 一致性 数据一致性

I 隔离性 两个事物之间有一定隔离

D 持久性 事务最终结束一个保障

事务隔离性

隔离级别:

1.读未提交 read uncommitted //事务1可以读到事务2未提交的数据

2.读已提交 read committed//事务1可以读到事务2已提交的数据

3.可重复读 repeat read //事务1开启之后,每次1读到事务2的数据都是一样的,即使2已经修改

4.序列化/串行化 serializable 事务排队,不能并发

查看隔离级别:select @@tx_isolation;

Set global transation isolation level 级别; //设置隔离级别

索引

索引是在数据库表的字段上添加的,是为了提高查询效率而存在的一种机制,一张表的一个字段或者多个字段联合添加一个索引,相当于目录,可以缩小扫描范围,快速定位

MySQL在查询方面主要就是两种方式:全表扫描和根据索引检索

MySQL中主键字和unique字段自动添加索引

添加索引条件

1.数据量庞大

2.该字段经常被扫描(位于where后面)

3.该字段很少的DML操作

索引不能随便添加,其需要维护,耗费资源,设置太多会降低性能

基本语法

create index 索引名 on 表名(字段名); //创建索引

drop index 索引名 on 表名; //删除索引

explain......select......where......;//检查一个sql语句是否使用了索引进行检索

注意

模糊查询使索引失效

使用or要求两边字段都有索引才不会让索引失效

使用复合索引时,没有使用左侧的列查询,索引失效

在where中索引列参加了运算,索引失效

在where中索引列使用了函数,索引失效

视图

(view):站在不同角度看待同一份数据

创建视图对象:create view 视图名 as select .......;

删除视图对象:drop view 视图名;

视图特点:通过视图操作,会影响到原表数据

可以将视图视为一张表(可能为多表联合的表),他一直存在,其可以简化操作(用一个视图对象指代多条DQL语句)

DBA命令

create user 用户名 identified by ‘密码’; //创建新用户

数据备份:

导出(在dos窗口下):mysqldump 数据库名 > 绝对路径和文件名(.sql)-u用户名 -p密码

也可以只导出一张表:.......数据库名 表名>.....................

导入(在MySQL数据库服务器上,先创建新库,use库,然后添加命令):source 绝对路径和文件名(.sql)

数据库设计三范式

1.要求任何一张表必须有主键,每一个字段原子性不可再分

2.建立在第一范式基础上,要求所有非主键字段完全依赖主键,不产生部分依赖

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值