目 录CONTENT

文章目录

MySQL

Josue
2022-03-21 / 0 评论 / 0 点赞 / 178 阅读 / 5,275 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-03-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Mysql复习

一、Mysql服务的登录和退出

mysql [-h主机名 -p端口号] -u用户名 -p密码

二、Mysql的常见命令(数据库操作)

1. 查看当前所有的数据库 
show databases;

2. 打开指定的数据库
use 库名  

3. 查看当前库的所有表
show tables; 	

4. 查看其他库的所有表
show tables from 库名; 

5. 创建表
create table 表名(
	列名 列类型,
	列名 列类型,
	....
)

6. 查看表结构
desc 表名;

7. 查看服务器的版本
已登陆mysql服务器
select version();
未登录
mysql --v

三、Mysql的语法规范

1.不区分大小写,建议关键字大写
2.每条命令以分号结尾
3.注释:
	单行注释:#注释文字
	单行注释:--注释文字
	多行:/* 文字 */

四、DQL语言学习

(data query language 查询语言)

4.1、基础查询

select 查询列表 from table

查询列表: 表中的字段、常量、表达式、函数


#1. 查询单个字段
select a from table;

#2. 查询多个字段
select a,b from table

#3. 查询常量
select 100; #打印:100

#4. 表达式
select 100*100	#打印 10000

#5. 函数
SELECT version(); #打印出版本


#6. 起别名
SELECT first_name as 名,last_name AS 姓 from employees;
SELECT first_name 名,last_name 姓 from employees;

#7. 去重,关键字 DISTINCT
SELECT DISTINCT department_id from employees; 

#8. +号的作用,合并连接
select 	'123'+90; #打印213,将字符转换成数值,转化失败则赋值为0

4.2、条件查询

select 查询列表 from table where 筛选条件

#1. 简单运算符,<>不等于
SELECT last_name ,department_id 
FROM employees
WHERE department_id<>90;

/*2. like 模糊查询 
	%:任意多个字符
	_:任意单个字符
*/
SELECT * 
from employees 
WHERE last_name like "%a%";	

#3. between and 
SELECT * from employees WHERE employee_id BETWEEN 100 and 200;

#4. in
SELECT * from employees WHERE employee_id IN (100,150);

#5. is null ,null不能使用=

#6. 安全等于 <=>,可以判断null和数值

4.3、排序查询

select 查询列表 from table order by 排序列表 【asc /升序 desc/降序 】

  • asc /升序 desc/降序
  • order不要可以支持单个字段,多个字段,函数,别名
  • order by 一般放在查询语句的最后
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
from employees
ORDER BY 年薪

4.4、常见函数

4.4.1、单行函数

1、--字符函数
concat	 :	连接
substr	 : 	截取字符串
upper    :	变大写
lower    : 	变小写
replace  :  替换
length   :  获取字符串长度
rtim     :  去除空格
lpad     :  左填充
rpad     :  右填充

2、--数学函数
ceil	 :	向上取整
floor	 :	向下取整
round	 :	四舍五入
mod	     :	取模
truncate :	截断
rand	 :	获取随机数

4.4.2、分组函数

  • 用于统计使用,又称聚合函数

  • sum求和、avg平均数、max最大值、min最小值、count计算个数

4.5、分组查询

select 查询列表 from table group by 分组函数

  • 分组前筛选使用where ,分组后筛选使用 having
#1. 查询部门员工人数大于2结果集
SELECT COUNT(*) ,department_id
from employees
GROUP BY department_id
HAVING COUNT(*)> 2


#2. 查询奖金率不为0且最高工资大于12000的员工和最高工资
SELECT employee_id ,MAX(salary) highSalary
FROM employees
WHERE commission_pct is not null 
GROUP BY  employee_id
HAVING highSalary >12000

4.6、连接查询

4.6.1、sql92语法

  • 等值连接

    SELECT last_name,department_name
    FROM employees,departments
    WHERE employees.department_id = departments.department_id
    
  • 非等值连接

    #查询员工的工资和工资级别
    SELECT salary,grade_level
    from employees e ,job_grades jg
    WHERE e.salary BETWEEN jg.lowest_sal and jg.highest_sal
    
  • 自连接

    SELECT e.employee_id , e.first_name ,m.employee_id ,m.first_name
    FROM employees e ,employees m
    WHERE e.manager_id = m.employee_id
    

4.6.1、sql99语法

  • 内连接

    #1、查询员工名、部门名、工种名,并按部门名降序
    #等值
    SELECT last_name ,department_name ,job_title
    from employees e 
    INNER JOIN departments d on e.department_id = d.department_id
    INNER JOIN jobs j on e.job_id = j.job_id
    ORDER BY department_name
    
    #非等值
    SELECT salary,grade_level
    from employees e 
    INNER JOIN job_grades jg
    ON e.salary BETWEEN jg.lowest_sal and jg.highest_sal
    
  • 外连接

    • 左外连接,left join 左边的是主表
    • 右外连接,right join 右边的是主表
    #查询部门表中没有员工的部门
    SELECT  d.department_name ,e.employee_id
    from departments d
    LEFT JOIN employees e ON e.department_id = d.department_id
    WHERE employee_id is NULL
    ORDER BY d.department_name
    

4.7、子查询

内部嵌套其他select语句的查询,称为外查询或主查询

4.7.1、列子查询

#1. 返回locatiuon_id是1400或者1700的部门中的所有员工
SELECT last_name from employees 
WHERE department_id IN ( 
SELECT department_id from departments 
WHERE location_id IN(1400,1700)
)

4.7.2、from后面,表查询

#查询每个部门平均工资的等级
SELECT aas,avgs.department_id,grade_level 
FROM (
	SELECT AVG(salary) aas ,department_id 
	FROM employees
	GROUP BY department_id
	) avgs,job_grades	
 WHERE aas BETWEEN job_grades.lowest_sal and job_grades.highest_sal

4.8、分页查询

select 查询列表 from table limit offset , size

  • offset 要是显示条目的起始索引
  • size 要显示的条目个数
SELECT * from employees 
LIMIT 0,5

4.9、union联合查询

语法:

查询语句1
union
查询语句2
union
查询语句3

应用场景:

  • 查询结果来自于多个表,且多个表之间没有直接的连接关系,但查询的信息一致

  • 默认去重,不去重则 union all

五、DML语言学习

data manage language 操作语言,增删改

5.1、插入语句

  • insert into 表名 (列名,.......) value(值1,.......)

  • insert into 表名 set 列名=值,列名=值,....

5.2、修改语句

5.2.1、修改单表

update 表名 set 列=新值,列=新值,....
where 筛选条件

5.3、删除语句

delete from 表名 where 筛选条件

truncate table #清空数据

六、DDL语言

数据定义语言,表和库的管理

6.1、库的管理

创建、修改、删除

#1、库的创建
create database 库名;

#2、库的修改<弃用>
	#更改字符集
	alter database 库名 character set gbk;
	
#3、库的删除
drop database 库名

6.2、表的管理

创建、修改、删除

  • 表的创建
create table 表名(
	列名 列类型 【长度 约束】,
	列名 列类型,
	....
)
  • 表的修改

    alter table 表名 add|drop|modify|change column 列名 【列类型 约束】

# 修改列名
alter table 表名 change column 旧列名 新列名 类型;

#修改列的类型或约束
alter table 表名 modify column 列名 类型

#添加新列
alter table 表名 add column 列名 类型;

#删除列
alter table 表名 drop column 列名

#修改表名
alter table 表名 rename to 新表名
  • 表的复制

    CREATE TABLE copy LIKE 表名

七、约束

  • NOT NULL : 非空,用于保证该字段的值不为空

  • DEFAULT:  用于保证该字段具有默认值

  • PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空

  • UNIQUE:唯一,用于保证该字段具有唯一性,可以为空

  • CHECK: 检查约束【mysql中不支持】

  • FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联的值

    字段 字段类型 foreign key references 表(外键字段)
    

    主键与唯一得区别:

    主键和唯一都可以保证唯一性,但是主键不能为空,唯一允许为空

  • 标志列:自增长列 (AUTO_INCREMENT)

    一个表至多一个标识列,且必须为数值类型

八、TCL语言

Transaction Control Language 事务控制语言

8.1、事务的ACID属性

  • 原子性(Atomicity)

    原子性是指事务是一个不可分割的工作单位,事务的操作要么都发生,要么都不发生
    
  • 一致性(Consistency)

    事务必须使数据库从一个一致性状态变换到另一个一致性状态
    
  • 隔离性(Isolation)

    事务的隔离性指一个事务的执行不能被其他事务干扰。事务与事务之间不能互相干扰
    
  • 持久性(Durability)

    一个事务一旦被提交,他对数据库的操作是永久性的,接下来的其他操作呵数据库故障不应该对其有影响
    

8.2、并发读出问题

  • **脏读:**一个事务T1读取了另一个事务T2未提交的字段,若T2回滚,则T1读取的数据无效

  • 不可重复读:两个事务T1,T2都读取了同一字段,T2对字段进行修改,如果T1再次读取同一字段,值就不同了

  • 幻读:两个事务T1,T2都读取了同一字段,T2对表进行插入新行,如果T1再次读取同一个表,则多出几行

8.3、事务的隔离级别

  • READ UNCOMMITED

    允许事务读取未被其他事务提交的变更,会导致脏读、不可重复读和幻读
    
  • READ COMMITED

    只允许事务读取被其他事务提交的变更,可以避免脏读,不可重复读和幻读会出现
    
  • REPEATABLE READ

    确保事务可以多次从一个字段读取相同的值,禁止其他字段进行更新,可以避免脏读和不可重复读,幻读一九存在
    
  • SERIALIZABLE (串行化)

    确保事务可以从一个表读取相同的行,此操作禁止其他事务进行插入、更新和删除操作,所有并发问题可解决,但是性能低下
    

九、视图

9.1、视图的创建

CREATE VIEW 视图名

9.2、视图的删除

DROP view 视图名

9.3、查看视图

desc 视图名

show create view 视图名

9.4、视图的更新

CREATE OR REPLACE VIEW 视图名
AS 
select * from ***

十、全局变量

10.1、全局变量

# 查看所有全局变量
SHOW GLOBAL VARIBALES;

# 查看部分全局变量
SHOW GLOBAL VARIABLES LIKE "%CHAR%"

#查看指定的全局变量的值
select @@global.autocommit;

十一、存储过程

11.1、创建语法

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程(一组合法的sql语句)
END
0

评论区