DDL
- 操作数据库
-
登录
mysql -u用户名 -p密码
-
退出
exit 或者 ctrl + z
-
创建数据库 并指定编码
create database 数据库名 [character set utf8]
-
删除数据库
drop database 数据库名
-
修改数据库编码:
alter database 数据库名 character set gbk
-
进入数据库
use 数据库名称
-
查看当前所在数据库:select database();
-
- 操作表:
- C:创建
- 语法:
create table 表名( 列名1 数据类型, 列明2 数据类型2, ... 列明n 数据类型n );
- 数据类型可参照
菜鸟教程mysql数据类型 - 复制表: create table 表名 like 被复制的表名
- CTAS:将查询结果创建表
create table user3 as select * from user;
- 语法:
- R:
- U:修改
- 修改表名
alter table 表名 rename to 新的表名 - 修改表字符集
alter table 表明 character set 字符集名称 - 添加一列
alter table 表名 add 列名 数据类型 - 修改列名称 类型
alter table 表 modify 字段 varchar(6); # 只修改类型
alter table 表 change 字段 新字段 数据类型 - 删除列
alter table 表 drop 列名
- 修改表名
- D:删除: drop table 表名
- C:创建
DML:增删改表中数据
- 添加数据:
* 语法
insert into 表名(列名1,列名2,…列名n) values(值1,值2,…值n)
insert into 表名 values(值1,值2,…值n) - 删除数据:
* 语法
delete from 表名 [where 条件]
truncate table 表名;先删除表,再创建一张一样的表 - 修改数据:
* 语法:
update 表名 set 列名1 = 值1,列名2 = 值2 …[where 条件]
DQL:查询语句
-
查询语句:
查询所有 -> select * from 表名;
去除重复结果:select distinct 字段 from 表-
排序查询
- 语法:order by 子句
- order by 排序字段1 排序方式1,排序字段2 排序方式2…
- 排序方式
- ASC:升序(默认)
- DESC:降序
- 语法:order by 子句
-
聚合函数: 将一列数据作为一个整体,进行纵向的计算
- count:计算个数 select count(列名) from 表名;
- max:计算最大值 select max(列名) from 表名;
- min:计算最小值 select min(列名) from 表名;
- sum:计算和 select sum(列名) from 表名
- avg:计算平均成绩 select avg(列名) from 表名
-
分组查询:group by 字段
- 注意
- 分组之后查询的字段:分组字段、聚合函数
- where 和 having 的区别:
- where 在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having后可以跟聚合函数
- 注意
-
分页查询:limit 开始索引,每页查询条数
-
-
约束:
-
概念:对表中的数据进行限定,保证数据的正确性、有效性、完整性
-
外键删除更新行为
示例:alter table 表名 add foreign key(外键字段) reference 主表名(主表字段) ON UPDATE CASCADE ON DELETE CASCADE;
-
分类:
- 主键约束:primary key
- 添加
- 创建表时添加
create table stu(
id int primary key
) - 创建表后添加
alter table 表 modify 字段 数据类型 primary key;
- 创建表时添加
- 删除
alter table 表 drop primary key
- 添加
- 非空约束:not null
- 唯一约束:unique
- 添加
alter table 表 modify 字段 数据类型 unique
- 删除
alter table 表 drop index 字段
- 添加
- 外键约束:foreign key
- 添加:alter table 表名 add foreign key(列名) reference 表名(列名)
- 删除:alter table 表名 drop foreign key 外键名称
- 级联操作:
- 级联更新:on update cascade
- 级联删除:on delete cascade
alter table 表名 add foreign key(列名) reference 表名(列名) on update
- 自动增长:auto_increment
- 添加
alter table 表 modify 字段 数据类型 auto_increment
- 删除
alter table 表 modify 字段 数据类型
- 添加
- 主键约束:primary key
-
-
数据库的备份与还原
- 命令行:
- 备份:mysqldump -u用户名 -p密码 数据库 > 保存路径
- 还原:
- 登录数据库
- 创建数据库
- 使用数据库
- 执行文件。source 文件路径
- 命令行:
-
多表查询
- 内连接查询:
- 隐式内连接:使用where条件消除无用数据
select * from a,b where a.id = b.id
- 显示内连接:
- 语法:select 字段列表 from 表名 [inner] join 表名2 on 条件
select * from a inner join b on a.id = b.id #与1.的结果相同
- 隐式内连接:使用where条件消除无用数据
- 外连接查询:
- 左外连接:select 字段列表 from 表1 left join 表2 on 条件
查询的是左表所有数据以及交集部分 - 右外链接:select 字段列表 from 表1 right join 表2 on 条件
查询的是右表所有数据及交集部分
- 左外连接:select 字段列表 from 表1 left join 表2 on 条件
- 内连接查询:
事务:
- 事务的基本介绍:
- 概念:
- 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
- 操作:
- 开启事务:start transaction;
- 回滚:rollback
- 提交:commit
- MySQL数据库中的事务默认自动提交
- 一条DML(增删改)语句会自动提交一次事务
- 事务提交的两种方式:
- 自动提交:mysql就是默认提交的
- 手动提交:需要先开启事务再提交
- 修改事务的默认提交方式:
- 查看事务的默认提交方式:@@autocommit; —1自动提交 —0手动提交
- 修改默认提交方式:set @@autocommit = 0;
- 概念:
- 事务的四大特征:
- 原子性:是不可分割的最小操作单位,要么同事成功,要么同时失败
- 持久性:当事务提交或回滚后,数据库会持久化的保存数据
- 隔离性:多个事务之间,相互独立
- 一致性:事务操作前后,数据总量不变
- 事务的隔离级别:
- 概念:多个事务之间相互独立,但如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
- 存在的问题:
- 脏读:一个事物,读取到另一个事务中没有提交的数据
- 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
- 幻读:一个事物操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
- 隔离级别:
-
read uncommitted:读未提交
- 产生的问题:脏读、不可重复读、幻读
-
read committed:读已提交
- 产生的问题:不可重复读、幻读
-
repeatable read:可重复读(mysql默认):
- 产生的问题:幻读
-
serializable:串行化
- 可以解决所有的问题
-
查看及修改当前隔离级别
- 查看:select @@tx_isolation
- 修改:set global transaction isolation level 级别字符串
-
DCL
- sql分类:
- DDL:操作数据库和表
- DML:增删改查表中数据
- DQL:查询表中数据
- DCL:管理用户,授权
- 管理用户
- 添加用户:
- create user ‘用户名’@‘主机名’ identified by ‘密码’
- 删除用户:
- drop user ‘用户名’@‘主机名’
- 修改用户密码:
- update user set password = password(‘新密码’) where user = ‘用户名’
- set password for ‘用户名’@‘主机名’ = password(‘新密码’)
- 修改 root 密码
- cmd --> net stop mysql 停止 mysql服务
- 使用无验证方式启动 mysql服务:mysqld --skip-grant-tables
- 打开新cmd窗口,直接输入 mysql 回车,则登录成功
- user mysql
- update user set password = password(‘新密码’) where user = ‘root’
- 关闭两个窗口
- 启动mysql服务
- 添加用户:
- 授权
- 查询权限:show grants for ‘用户名’@‘主机名’
- 授予权限:
grant 权限列表 on 数据库名,表名 to ‘用户名’@‘主机名’
- 撤销权限:
revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’
- 管理用户