C++总复习--9--C++程序设计--MySQL数据库
C++总复习--9--C++程序设计--MySQL数据库
1.SQL语句的编写
(1)DDL
create drop alter show
(2)DML
insert delete update select
(3)DCL
grant revoke
2.MySQL存储引擎
(1)MyISAM
(2) InnoDB
3.事务
1.SQL
(1)DDL 数据定义语言
create drop(回收) alter(修改) show
- 创建
create 结构标识(database,table,index) name;
drop 结构标识 name;
(2)DML 数据操作语言
inster delete update select
1.添加数据
insert into table_name values (xxx),(xxx);(values代表数据集合)
(*****)load 大批量插入
load data infile “xxx/xxx/xxx(文件路径)” into table table_name;
2.删除数据
delete from table_name [where];
truncate(DDL语句)(无log,所以不能恢复)
truncate table table_name ;
3.修改数据
update table_name set field_name = new_val [where];
(field_name字段名称 ,new_val 新的数据)
4.查询数据
(1)普通查询
Select * from table_name [where];
Select field_1,field_2,field_3 from table_name [where];
(2)去重 distinct
Distinct field_1;
(3)排序 order by desc(降序) | asc(升序)
select field from table_name [where] order by sort_field [desc | asc];
5.分组 group by
Select sum(xxx) from table_name
Group by field;(filed比如按年龄来划分,就写age)
(1)多表查询
(1.1)等值查询
select field_1,...,field_n
from table_name_1,...,table_name_n
[where ];
等值查询:次数m*n
(1.2)连接查询
缩小左右表的范围,缩小后的范围内进行匹配
m/x n/y mn/xy
(1.2.1)外连接查询
左外连接查询 范围缩小后 左表的数据全部存在
右表匹配成功 用右表的数据
右表匹配失败 右表补NULL
右外连接查询 范围缩小后 右表的数据全部存在
左表匹配成功 用左表的数据
左表匹配失败 左表补NULL
全外连接查询 范围缩小后 右表的数据全部存在
左右表匹配成功 用左表的数据
左右表匹配失败 对应一方补NULL
(1.2.2)内连接查询
内连接查询
范围缩小后,匹配成功的项
6.联合查询 union (有去重) | union all
(3)DCL 数据控制语言
1.授予权限
grant privileges on DB_NAME.TABLE_NAME to user_name;
2.回收权限
revoke privileges on DB_NAME.TABLE_NAME from user_name;
MySQL
2.存储引擎
数据的一种存储方式
MyISAM
不支持外键,不支持事务,支持全文索引,B+树,表锁
InnoDB
支持外键,支持事务,不支持全文索引,B+树,行锁
MEMORY
内存中,临时表,varchar当成char 哈希索引
不支持text和blob字段,如果存储该类型字段,交给MyISAM这个存储引擎,数据存放磁盘上
ARCHIVE
数据1:10压缩存储,适用于日志数据
只支持 insert和select
MyISAM B+树 非聚集索引
索引和数据分离开来设计
叶子结点 存储数据的地址
关键字不重复Dev,可做主索引
.frm 创建表的基本信息
.myi 表对应的索引
.myd 存储数据的文件
InnoDB 聚集索引
数据和索引结合
把索引当成数据的一部分存储
叶子结点 存放数据
1.创建一个InnoDB的表
Insert 数据
系统建立索引
- 主键 主键索引
- 唯一键 唯一索引
- 添加一个隐藏的字段,6个字节,行id,auto_increment(可自增长类型)
辅助索引
允许关键字重复
叶子结点:数据的地址
2.索引的优化
1.哪种情况应该建立索引
2.哪种情况不应该建立索引
3.索引的分类
组合索引
最左前缀原则
4.索引的注意事项
(1)索引不会包含有NULL值的列
(2)使用短索引
(3)索引列排序,如果where中用了索引,order by中列是不会使用索引的。
(4)like语句操作,like “%aaa%”不会使用索引,like “aaa%”可以使用索引
(5)不要在列上进行运算,where YEAR(adddate)<2007,不会用到索引,
where adddate<’2007-01-01’,会用到索引
3.事务
一组SQL语言的集合
A 原子性 要么全部成功 要么全部失败
C 一制性 保证数据的完整性约束
I 隔离型 消除事务间的相互影响
D 持久性 保证事务执行的结果能在磁盘上永久的存储
1.隔离性
(1)没有隔离性会发生什么情况
脏读 A事务读取了B事务执行过程中的结果
不可重复读 修改 A事务读取了B事务执行前和执行后两个不同阶段的结果
幻读 insert | delete A事务读取了B事务执行前和执行后两个不同阶段的结果
(2)四个隔离级别
未提交读 脏读 不可重复读 幻读
已提交读 不可重复读 幻读
可重复读 幻读(是用间隙锁解决的) MySQL
可序列化
2.原子性
日志
redo log 事务将要执行的每一步操作
undo log 事务执行过程中的每一个状态点
锁机制
- MyISAM 表锁 (非索引)
- read 读锁 共享读锁
- write 写锁 独占写锁
2.InnoDB 行锁(索引支持)
1.read 读锁 共享锁
2.write 写锁 排它锁
乐观锁和悲观锁
间隙锁
触发器(2*3=6种)
time before after
event Insert delete update
能触发触发器
insert:
insert replace load
delete:
delete
update:
update
存储过程和存储函数