Mysql学习记录
不完整记录。。。参考尚硅谷视频教学内容,个人感觉很不错
20231123-30
- 掌握 Mysql基础知识
前言
0.1 数据库概念
0.1.1 数据库的好处
- 可以持久化数据到本地
- 可以结构化查询
0.1.2 数据库的常见概念
- 数据: 数据库存储的基本对象,描述事物的符号记录。
- 数据库(database, DB):存储数据的仓库。。
- 数据库管理系统(Database Management System, DBMS)。又称为数据库软件或者数据库产品,用于创建和管理DB。
- 结构化查询语言(Structure Query Language,SQL):结构化查询语言。专门用来与数据库通信的语言,几乎所有的主流数据库软件通用的语言。
0.1.3 数据库存储数据的特点
- 数据存放到表中,表再放到库中
- 一个库中可以有多张表,每张表具有唯一的表名来标识自己
- 表中有一个或多个列(字段),相当于java中的“属性”
- 表中每一行数据相当于java中的“对象”
常见数据库管理系统
Mysql、oracle,db2,sqlserver
0.2 Mysql
0.2.1 Mysql的背景
0.2.2 Mysql的优点
- 开源,免费,成本低
- 性能高,移植性好
- 体积小,便于安装
0.2.3 Mysql安装
链接: Mysql安装
0.2.4 Mysql服务的启动和停止
方式一:命令行方式(cmd)
net start 服务名
net stop 服务名
方式二:计算机——右击——管理——服务
0.2.5 Mysql服务的登录和退出
登录:
mysql -h主机名 -P端口号 -u用户名 -p密码
连接本机且端口号为3306的:
mysql -u用户名 -p
退出:
ctrl+ C 或者 exit
1.1 DQL语言
1.1.1 基础查询
select 查询列表
from 表名;
- 特点
- 查询列表可以是字段、常量、表达式、函数,也可以是多个
- 查询结果是一个虚拟表
- 示例
1. 查询多个字段 select 字段,字段 from 表名; 2. 查询所有字段 select * from 表名; 3. 查询常量 select 常量值;(注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要) 4. 查询函数 select 函数(实参列表); 5. 查询表达式 select 100/230; 6. 起别名 as、空格 7. 去重 select distinct 字段名 from 表名; 8. ‘+’ 只能做加法运算; -- select 数值+数值;直接运算。 -- select 字符+数值;将字符转换成数值,转换成功则运算,否则转换成0再运算。 -- select null+值;结果为null。 9. concat函数:拼接函数 select concat(字符1,字符2,...); 10. ifnull函数:判断某字段或表达式是否为null,如果是null返回指定值,否则返回原来值。 -- select ifnull(job_id,0)from employees; 11. isnull函数:判断某字段或表达式是否为null,如果是null返回1,否则返回0。 -- select ifnull(job_id,0)from employees;
1.1.2 条件查询
select 查询列表
from 表名
where 筛选条件;
- 筛选条件的分类
- 简单条件运算符: > < = <> != <=> (安全等于)
- 逻辑运算符:&& || ! and or not
- 模糊查询:
- like:
# 一般搭配通配符"%"(任意多个)“_”(任意单个字符),可以判断字符型或数值型 select job_id from employees where manager_id like '_a%';
- between and
# 包含临界值. salary >=100 AND salary <=120; salary BETWEEN 100 AND 120; # 等价
- in
# 判断列表中的值是否属于IN列表中的某一项、in列表的值类型必须一致或兼容 job_id='IT_PROG' OR job_id='AD_VP' OR job_id='AD_PRES'; job_id IN('IT_PROG','AD_VP','AD_PRES'); # 等价
- is null / is not null
# = 或 <> 不能用来判断null值 # is Null 和 is not null 能判断null值 # <=>:既可以判断null值,又可以判断普通数值;但是可读性较差;
1.1.3 排序查询
1.1.4 常见函数
1.1.5 分组查询
1.1.6 连接查询
使用场景:当查询字段来自多个表时,使用连接查询.
分类:
1.1.7 子查询
1.1.8 分页查询
1.1.9 union联合查询
其他学习笔记
- Varchar 和 char两种字符数据类型的区别
Varchar | char |
---|---|
可变长度,根据字符数据长度分配存储空间 | 固定长度,占用固定长度的空间 |
使用存储空间取决于实际存储的数据长度,最大长度需要在建表时指定,如varchar(50) | 若存储的数据长度小于指定的长度,剩余空间也会被填充,char(20)表示该列表始终存储 20个字符的文本 |
适合存储长度不固定的文本,节省存储空间 | 适合存储长度固定的文本,提高查询效率 |
- 主键和唯一的对比
唯一性 | 允许为空 | 一个表中有多少个 | 允许组合 | |
---|---|---|---|---|
PRIMARY | 主键 | √ | × | 至多有1个 |
UNIQUE唯一 | √ | √ | 可以有多个 | √,但不推荐 |
- 事务的特性:
ACID
- 原子性(atomicity):一个事务不可再分割,要么都执行要么都不执行
- 一致性(consistency):一个事务执行会使数据从一个一致状态切换到另外一个一致状态
- 隔离性(isolation):一个事务的执行不受其他事务的干扰
- 持久性(durability):一个事务一旦提交,则会永久的改变数据库的数据.
- 具备以下特点的视图不允许更新
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
- 常量视图
- Select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
- 用户变量和局部变量的对比
作用域 | 定义位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话的任何地方 | 加@符号,不用指定类型 |
局部变量 | 定义它的BEGIN END中 | BEGIN END的第一句话 | 一般不用加@,需要指定类型 |
- 通配符
- 百分号%:可通配任何,除了null;
- 下划线_:只匹配单个字符;
- 正则表达式搜索
/# regexp 关键字
select name from students where name regexp '1|2';
# 输出name中有1或2的列
# . (匹配任意字符) | (或) [] (或) - (至) \\. (表示查找.)
# ' \\([0-9] sticks?\\)' 表示匹配(包含0-9, stick或sticks)
# ' ^[0-9 \\ .] ' 表示 只匹配在以0-9或. 开头的结果
- 常用文本处理函数
函数 | 说明 |
---|---|
left() ,right() | 返回串左边(右边)的字符 |
length() | 返回串的长度 |
locate() | 找出串的一个子串 |
lower(), upper() | 转换为小写、大写 |
ltrim(),rtrim() | 去掉串左边(右边)的空格 |
soundex() | 返回串的soundex(发音)值 |
substring(‘串’,起始值,截取长度) | 返回子串字符 |
-
聚合函数
avg(), count(), max(), min(), sum()
注意count和sum区别,count表示返回某列的行数,sum表示返回某列的和。 -
where 和having 的区别
where 过滤行,having 过滤分组 -
子查询
可以在select 后面,where 后面, from 后面 -
联结
- 无条件联结: from A,B ;笛卡儿积
- 自然联结:from A,B where 条件;
- 内部联结:from A inner join B where 条件;
- 外部联结: from 左表 left\right join 右表 where 条件; # left join(左边为主表,右边无对应显示null) , right join(右边为主表,左边无对应显示null).
- 全文本搜索
- where match( 被搜索的列,与fulltext()相同) against( 搜索表达式);
- 查询扩展 : where match( 被搜索的列,与fulltext()相同) against( 搜索表达式 with query expansion) ; (返回搜索的列以及与被搜索列相关的列)
- 布尔文本搜索
- where match( 被搜索的列,与fulltext()相同) against( ‘搜索表达式 布尔操作符’ in boolean mode) ;
- 插入数据
- 插入完整单行 insert into 表 values( );
- 插入部分数据 insert into 表(部分字段名) values( 对应字段值);
- 插入多行 insert into 表 values( ), ( ), ( ),…;
- 插入检索结果 insert into 表 select 列 from 表;
- 更新、删除数据
- update: update 表 set 列名=新数据值 where 行过滤条件;
- delete、truncate :
- 删除特定行: deleta from 表 where 行过滤条件;
- 删除所有行: delete from 表;
- 删除行保留表结构:truncate 表;
- drop 删除表:drop table if exists A;
- 创建、操纵表
- create table 表名( 字段 ,…);
- alter table 表名 add column