(CN) MySQL Basic
MySQL基础篇
SQL的分类
DDL
-
查询所有数据库
show databases;
-
查询当前数据库
select database();
-
创建
create database [if not exists] DBname [default charset];
-
删除
drop database [if exists] DBname
-
使用
use DBname
进入数据库后
-
查询所有表
show tables;
-
创建表
-
desc table_name
show create table table_name
查询表内容
数据类型
-
数值类型
-
blob 二进制数据[tiny medium long]
-
text 文本数据[tiny medium long]
-
char(maxlength) 性能好 ; varchar性能稍差
-
时间类型
-
给表添加字段 [修改数据类型 modify /修改字段名和字段类型change ]
alter table table_name add 字段名 datatype;
-
删除字段
alter table table_name drop 字段名;
-
修改表名
alter table old_table_name rename to new_table_name;
-
删除某一张表
drop table [if exists] table_name;
删除指定表,并重新创建该表
truncate table tablename;
DML(manipulate)增删改查
插入
-
给指定字段添加数据
insert into table_name(字段1,字段2……) values (值1,值2……);
给全部字段添加数据
insert into table_name values(值1,值2);
需要和实际字段一一对应批量添加数据
insert into table_name(字段1,字段2……) values (值1.值2……),(值1.值2……),();
修改
-
修改数据语法
删除
-
删除数据
需要注意的是,delete语句不能删除某一个字段的值
DQL 查询操作
基础查询
-
语法
-
查询多个字段
-
设置别名
select 字段1 as 别名1,…… from table_name;
-
去重
select distinct 字段列表 from table_name;
条件查询
select 字段列表 from table_name where 条件列表;
聚合函数
-
将一列数据作为整体,进行纵向计算
-
用法
select 聚合函数(字段列表) from table_name;
使用聚合函数是,null值不参与聚合函数的运算
分组查询
-
语法
-
where 和 having区别
- 执行时机不同:where是分组之前进行过滤,having是分组之后
- 判断条件不同:where不能对聚合函数进行判断,而having可以
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段没有意义
排序查询
-
语法
-
排序方式
-
asc 升序 default
-
desc 降序
-
如果是多字段排序,当第一个相同时,按照第二个进行排序
案例:
分页查询
-
语法
-
notice
- 需要注意的是,不同的数据库分页查询的语法不同,以上为MySQL
- limit要位于order by 之后
DQL执行顺序
DCL control
简介:用来管理数据库用户、控制数据库的访问权限
用户管理
-
查询用户
use mysql;
select * from user;
-
创建用户
create user 'username'@'hostname' identified by 'password';
%
表示任意主机 -
修改用户密码
-
删除用户
drop user 'username'@'hostname';
权限控制
权限分类:
-
查询权限
show grants for 'username'@'hostname';
-
授予权限
grant 权限列表 on 数据库名.表名 to 'username'@'hostname';
-
撤销权限
函数
字符串函数
usage:select func(args);
案例:
数值函数
注意:先是rand,然后取六位,不足补0
日期函数
流程控制函数
案例:
约束
常见约束
-
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
-
目的:保证数据库中数据的正确性。有效性和完整性
-
分类:
-
案例:
外键约束
-
概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性
-
添加外键:
-
删除外键
alter table table_name drop foreign key key_name;
-
删除/更新行为
多表查询
- 简单案例
- 内连接:a和b表的交集
- 外连接:
- 左外:左表以及交集
- 右外:右表以及交集
- 自连接:自连接使用表的别名,当前表与自身的连接查询‘
- 子查询
内连接
-
隐式内连接:
-
显式内连接:
给表起了别名以后,不能在使用原名来进行查询
案例:
外连接
- 左外连接:左表及交集部分
- 右外连接:
RIGTH
右表及交集部分
自连接
联合查询 union(all)
union all :直接合并查询的多次结果
union:可以有去重的效果
多张表的列数必须保持一致,字段类型也需要一致
子查询
标量子查询
- 子查询的结果为单个值
e.g.
列子查询
-
返回结果为一列,可以是多行
-
常用:in, not in , any , some, all
行子查询
- 返回一行可以多列的子查询
- 常用:= <> in not in
表子查询
e.g.
练习
事务
简介
- 一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,这些操作,要么同时成功,要么同时失败
MySQL的事务是自动提交的,当执行一条DML语句时,MySQL会立即隐式的提交事务
事务操作
- 正常情况下:
commit;
-
报错情况下:
start transaction/begin 手动控制事务,不需要设置@@autocommit
-
事务的四大特性ACID
- 原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败
- 一致性:事务完成时,必须使所有的数据都保持一致状态
- 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
- 持久性:事务一旦提交或者回滚,它对数据库中的数据的改变是永久的
并发事务问题
并发事务演示及隔离级别