@
MySQL讲解
一.启动服务
- 用管理员身份运行命令提示符
停止服务
net stop + 服务名
启动服务
net start + 服务名
查询服务器连接所用端口信息
select @@port;
查询系统所支持的存储引擎类型
show engines;
登录到MySQL服务端查看服务器版本信息
select version();
未登录到MySQL服务器端查看服务器版本信息
mysql --version/--V;
查看默认存储引擎
show variables like 'default_storage_engine';
二.MySQL命令之数据库操作
创建数据库
create database 库名;
查看当前所有数据库
show databases;
打开指定的数据库
use 库名;
删除指定的数据库
drop database 库名;
查看当前在哪个数据库
select database();
查看数据库的存储引擎
show variables like 'storage_engine'
查看数据库的存储引擎
show variables like '%storage_engine%'
三. MySQL命令之表操作
创建表
create table if not exists 表名
查看当前数据库的所有表
show tables;
查看其他数据库的所有表
show tables from 库名;
查看表结构
desc 表名;
show index from 表名;
show create table 表名 \g
删除表
drop table [if exists] 表名;
四.MySQL语法规范
- 不区分大小写,但建议关键字大写,表名,列名小写
- 建议每条命令用分号结尾
- 每条命令根据需要,可以进行缩进或换行
- 注释
- 单行注释:# 或 --格 注释文字
- 多行注释:/.../
MySQL数据类型
数据类型 | 系统数据类型 |
---|---|
整数型 | TINYINY / SMALLINT / MEDIUMINT / INT / BIGINT |
精确数值型 | DECIMAL(M,D) / NUMERIC(M,D) |
浮点型 | FLOAT / REAL / DOUBLE |
位型 | BIT |
二进制型 | BINARY / VARBINARY |
字符型 | CHAR / VARCHAR / BLOB / TEXT / ENUM / SET |
Unicode字符型 | NCHAR / NVARCHAR |
文本型 | TINTTEXT / TEXT / MEDIUMTEXT / LONGTEXT |
BLOB类型 | TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB |
日期时间型 | DATETIME / DATE / TIMESTAMP / TIME / YEAR |
五.DQL语言(主查询)
-
基础查询
- 语法
select 查询列表 from 表名;
- 类似于
system.out.printLn(打印的东西)
- 特点
- 查询列表可以是
- 表中的字段
- 常量值
- 表达式
- 函数
- 查询结果是一个虚数值
- 起别名
- 使用AS
select 要查询的字段 As 别名;
- 使用空格
select 要查询的字段 别名;
- 去重
select distinct 要查询的字段 from 表名;
- 拼接
select concat(str1,str2,...) As 别名;
- 查询列表可以是
-
条件查询
- 语法
select 查询列表 from 表名 where 筛选条件;
- 筛选条件分类
- 条件运算符
>.<.=.!=.<>.>=.<=
- 逻辑运算符
&&(与) / ||(或) / !(非) / and / or / not
- 模糊查询
like / between / and / in / is null / is not null
like一般与通配符搭配使用
- 通配符
1. %:任意多个字符,包含0个字符
2. _:任意单个字符
-
排序查询
- 语法:
select * from student where [筛选条件] order by 排序列表 [asc | desc]
支持多字段排序,中间用,分割
-
常见函数
- 概念:类似Java中的方法
- 隐藏了实现细节
- 提高代码的重用性
- 调用
select 函数名() [from 表];
- 分类
- 单行函数
concat:拼接字符串
length:个数
ifnull:判断是否为空单行函数: 字符函数 获取参数值的字节个数 length 拼接字符串 concat 变大写 upper 变小写 lower 截取字符串 substr/substring 返回str2在str1中第一次出现的起始索引 instr(str1,str2) 去掉str2中前后的str1 trim(str1 form str2) eg:select trim('a' from 'aaaStudentaaa'); 用指定的字符实现左填充指定长度 lpad(str,len,str) 右填充 rpad 替换 replace 数学函数 四舍五入 round 向上取整 ceil 向下取整 floor 截断 truncate() 取余 mod 日期函数 返回当前系统日期和时间 now 返回当前系统的日期,不包含时间 curdate 返回当前系统的时间,不包含日期 curtime 将日期格式字符转换成指定格式 str_to_date('9-13-2020','%m-%d-%y') 将日期转换为字符串 date_format('2020/11/16','%y年%m月%d日') 返回(date1-date2)的天数 DATEDIFF(date1,date2) 其他函数 查看MySQL版本号 version() 查看当前数据库 database() 查看当前用户 user() 流程控制函数 if函数:实现if else的效果 case函数: --switch case的效果 语法:(当then后面接的是语句的时候,要用';'结尾,值的话就不用) case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1 when 常量2 then 要显示的值2或语句2 ... else 要显示的语句n或值 end --多重if
-
分组函数
- 功能:做统计使用,又称为统计函数、聚合函数、组函数
分类: 求和 sum 平均值 avg 最大值 max 最小值 min 计算非空的值的个数 count
- 特点:
- 一般sum、avg处理数值类型的数据
max、min、count可以处理任何类型 - 以上分组函数都忽略null值
- 可以和distinct搭配去重
- count函数的详细介绍
一般用count(*)统计行数 - 和分组函数一同查询的字段要求是group by后面的字段
- 一般sum、avg处理数值类型的数据
- 效率:
MYISAM存储引擎下,count()效率最高
innodb存储引擎下,count()和COUNT(1)效率差不多,但比COUNT(字段)要高一些 -
分组查询
- 语法:
select 分组函数,列(要求出现在group by的后面)
from 表名
【where 筛选条件】
【group by 分组列表】
【order by 子句】 -
注意:查询列表必须特殊,要求是分组函数和group by后出现的字段
-
特点:
- 分组查询中的筛选条件分为两类
分组前筛选:从原始表筛选,放在group by前,用where关键字
分组后筛选:分组后的结果集,放在group by后,用having关键字 - 分组函数做条件一定放在having子句中
- group by子句支持
单个字段分组
多个字段分组(多个字段之间用逗号来连接)
表达式
函数 - 也可以添加排序
- 分组查询中的筛选条件分为两类
-
连接查询
- 含义:又称为多表查询,多表连接,当查询的字段涉及/来自多个表时
- 笛卡尔乘积现象:表1 m 行,表2 n 行,结果=m*n行
- 如何发生:没有有效的连接条件
- 如何避免:添加有效的连接条件
- 分类:
- 按年代分类
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外连接(左外、右外)+交叉连接- 按功能分类
- 内连接
等值连接
非等值连接
自连接 - 外连接
左外连接
右外连接
全外连接 - 交叉连接
- 内连接
-
子查询
-
分页查询
-
union联合查询
六.DML语言(对表中的数据操作)
- 查看
select * from 表名;
- 插入
- 语法一
> insert into 表名 (字段名,...) value(值,[约束]),(值,[约束]);
- 特点
1. 要求值的类型和字段的类型一致或兼容
2. 字段名和值要匹配
- 语法二
> insert into 表名 set=值,...;
- 语法三
> insert into 表名 values();
- 修改
- 语法
> update 表名 set 字段=值,字段=值 [where 筛选条件];
- 删除
- 语法
> delete from 表名 where id=1;
- 标识列
-
又称为自增长列
-
含义:可以不用手动的插入值,系统提供默认的序列值
-
特点
- 标识列必须与一个key搭配使用,可以是primary key、foreign key、unique……
- 一个表至多一个标识列
- 标识列类型只能是数值型
- 标识列可以通过:SET auto_increment_increment=3;设置步长
- 标识列可以通过手动插入值来设置起始值
-
创建表时设置标识列
- 关键词:auto_increment
查看标识列 show variables like '%auto_increment%'; { auto_increment_increment:步长 auto_increment_offset:默认值,MySQL中不支持修改默认值 }
-
七. DDL语言(表字段操作)
- 表的约束
- 常见约束:六大约束
非空约束 not null 默认约束 default 主键约束 primary key 外键约束 foreign key 唯一性约束 类似于primary key,可以为空 unique 检查约束 check
- 约束可以分为表级约束和列级约束
- 列级约束,在列后面添加
- 表级约束
constraint 约束名 约束类型;
- 常见约束:六大约束
修改表名
alter table 旧表名 rename [to] 新表名;
修改列名/字段语法规则
alter table 表名 change 原字段名 新字段名 新字段类型;
添加列
alter table 表名 add column 列名 类型 [first | after 字段名];
修改列类型或约束
alter table 表名 modify column 列名 新类型 [新约束];
删除某列
alter table 表名 drop column 列名;
复制旧表的结构
create table if not exists 表名 like 旧表名;
复制旧表的结构和数据
create table if not exists 表名 select 查询列表 from 旧表名 [where 筛选条件];
### 八.TCL语言(事务控制语言)
- TCL语言
- 通过show engines;来查看MySQL支持的存储引擎
- 其中innodb支持事务,而myisam,memory等不支持事务
- 事务的属性/特点:
- 原子性:一个事务不可再分割,要么全部执行,要么全部不执行
- 一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态
- 隔离性:一个事务的执行不受其他事务的干扰
- 持久性:一个事务一旦提交,则会永久的改变数据库的数据