MySQL数据库基本操作命令
一、DDL
库的基本操作。
关键字:create、drop、alter
[ ]中的内容代表可写可不写
1、show databases; 查看所有的数据库
2、create database [if not exsists] 库名; 创建数据库
3、drop database [if exsists] 库名; 删除数据库
4、use 库名; 选中库/跳转库
5、show create database 库名; 查看创建数据库的语句
6、show tables; 查看所有表
7、create table [if not exsists] 表名(列名 数据类型 【约束】,列名 数据类型 【约束】,......); 创建表
8、drop table [if exsists] 表名; 删除表
9、desc 表名; 查看表结构
10、show create table 表名; 查看创建表语句
11、alter table 原表名 rename 新表名; 修改表名
12、alter table 表名 change [column] 原列名 新列名 数据类型; 修改列名
13、alter table 表名 modify [column] 列名 新类型; 修改列的类型
14、alter table 表名 add [column] 列名 类型; 添加列
15、alter table 表名 drop [column] 列名; 删除列
16、alter table 表名 modify [column] 字段名 类型 约束; 添加约束万能公式
二、DML
数据操作语言
关键字:insert,delete,update
1、insert into 表名(列名1,列名2,...) values(值1,值2,......),(值1,值2,......),......;向表中插入数据
2、delete from 表名 where 条件; 根据条件删除数据
3、delete from 表名; /truncate table 表名; 删除所有
4、update 表名 set 列名1=新值1,列名2=新值2,,... where 条件; 修改值
三、DQL
1、select 列名,列名...from 表名; 基本查询
2、select 查询列表 from 表名 where 条件; 条件查询
and :两个条件要同时满足
or: A or B 当只有满足A时,只获取A的数据,当只有满足B时,只要B的数据,如果A,B的数据都有满足的时候,满足A或者满足B的数据都要
not :表示否定
in(A,B,C...) or的简写,在A,B,C之间取值,如果有满足的就查询,有多个满足就差个查询
between A and B:在A和B范围之间取值,A,B都能取到
not null:不是null
like:模糊查询
_ :一个字符 % :任意个字符
3、select 查询列表 from 表名 where 条件 order by 排序列表 asc|desc; 排序查询
4、select 分组字段和分组函数 from 表名 where 条件 group by 分组字段 having 分组后筛选 order by 排序列表 asc|desc; 分组查询
执行顺序:
select 分组字段和分组函数 ---- ④
from 表名 ---- ①
where 条件 ---- ②
group by 分组字段 ---- ③
having 分组后筛选 ---- ④
order by 排序列表 asc|desc; ---- ⑤
5.聚合查询
sum(列名/值) 求和 数字类型
avg(列名/值) 求平均 数字类型
max(列名/值) 最大值 数字、日期
min(列名/值) 最小值 数字、日期类型
count(列名/值) 计数 count(*)
6.分页查询
select 查询列表
from 表名
where 条件
group by 分组字段
having 分组后筛选
order by 排序列表 asc|desc
limit 偏移量,查询个数
7.连接查询
①隐式内连接
select 查询列表
from 表1 别名1,表2 别名2,...
where 连接条件
and 其他条件
group by 分组字段
having 分组后筛选
order by 排序列表 asc|desc
limit 偏移量,查询个数
②显式内连接
select 查询列表
from 表1 别名1
inner join 表2 别名2 on 连接条件
...
where 条件
group by 分组字段
having 分组后筛选
order by 排序列表 asc|desc
limit 偏移量,查询个数
③外连接
select 查询列表
from 表1 别名1
left|right outer join 表2 别名2
on 连接条件
where 条件
group by 分组字段
having 分组后筛选
order by 排序列表 asc|desc
limit 偏移量,个数;
8.子查询
select 列名 from 表名 where 列名 符号 (select 列名from 表名 where 条件...)..
select 列名 from (select 列名 from 表名 where 条件)where 条件...
特点
1. 子查询 必须写在小括号中
2. 子查询 优先执行 ,主查询需要用到子查询的结果
3. 子查询结果
单行子查询:结果只有一个 搭配的符号 = > < >= <= <>
多行子查询:结果多个 搭配的符号 in / not in /
any / all
>any:大于最小的
>all:大于最大的
<any:小于最大的
<all:小于最小的
四、事务
1、特性 【面试题】
① 原子性 整个事务不可分割,要么全部成功,要么全部失败
② 一致性 整个事务过程中数据保持一致的
③ 持久性 数据持久化保存
④ 隔离性:事务与事务之间的隔离关系
commit 事务提交 rollback 事务回滚
面试题:简述事务的隔离级别:
一般情况引发隔离安全问题的都是在事务并发状态下发生的。
隔离级别:低 --- 高
1. 读未提交 read uncommitted
引发问题:脏读 模拟买家和卖家之间
A,B两个事务,A事务能够看到B事务没有提交的数据
解决:提升隔离级别
2. 读已提交 read committed
引发问题:不能读重复数据 模拟银行查账
解决:提升隔离级别
3. 可重复读 repeatable read(mysql的默认隔离级别)
引发问题:幻读
解决:提升隔离级别
4. 串行化 serializable
2、实现事物的过程
①将事务的提交方式设置手动
set autocommit = 0;
②开启事务
start transaction;
④指定当前事务的命令
update account set money = money - 100 where username = '小明';
update account set money = money + 100 where username = '小红';
⑤成功提交,失败回滚
commit;
rollback;