DML和DDL补充
insert插入多条语句
insert into 表名(字段1,字段2) values(值1,值2),
(值3,值4),...,()
快速创建表
将查询的结果当作成新的表
create table xx as select * from emp;
把查询结果插入到
insert into xx select * from xxx
快速删除表中的数据,不可恢复!
truncate table xxx # DDL
删除表
drop table xxx
DDL 不讲,因为不常用,create,drop,alter
约束
- 非空约束 not null
- 唯一性约束 unique
- 主键约束 primary key
- 外键约束 foreign key
create table t_vip(
id int unique,
name varchar(255) not null
)
null不算unique
两个字段联系起来具有唯一性
create table t_vip(
id int,
name varchar(255),
email varchar(255),
unique(name, email) # 表集约束
)
not null只有列级约束,没有表级约束
如果一个字段被unique和not null 同时修饰,那么就自动成为主键(Oracle不是)
主键约束
- 主键约束
- 主键字段
- 主键值
任何一张表都应该有主键。
主键特征:不能空,不能重复
drop table if exists t_vip;
create table t_vip(
id int primary key,
name varchar(255)
)
单一主键和复合之间,建议不使用复合主键
一张表主键约束只能添加一个
主键值建议使用 int,bigint,char,一般都是定长的。
自然主键和业务主键。自然主键是一个int值,与业务没关系。业务主键是业务中的一个字段。建议使用自然主键,不要和业务挂钩。
自增
create table xxx (
int id primary key auto_increment,
name varchar(255)
)
外键约束
foreign key
create table t_class(
classno int primary key,
classname varchar(255)
)
create table t_student(
no int primary key,
name varchar(255),
cno int,
foreign key(cno) references t_class(classno)
)
外键值可以为null。外键不一定是父表的主键,但是一定要有unique约定
存储引擎
-
MyISAM
格式文件
数据文件
索引文件
-
InnoDB
-
Memory
添加了unique或者主键的字段,会自动创建索引
事务
事务是一个完整的业务逻辑。
和事务有关的是DML语句,update delete insert
提交事务:commit
回滚事务:callback
mysql默认自动提交,每次执行一个DML语句就提交一次!
事务特性
- A 原子性
- C 同时成功或者同时失败
- I A和B之间互不影响
- D 事务结束后,保证数据已经保存了
隔离级别
两个事务A和B
- 读未提交:A能读到B还没有提交的数据(脏读)
- 读已提交:A只能读到B已经提交的数据(不可重复读)
- 可重复读:A只能读到A开始时候的数据(幻读)
- 串行化
索引
可以在单个字段,也可以在多个字段上添加。为了缩小扫描范围。
什么情况加索引
- 数据量大
- 某个字段经常出现在where后面(经常被扫描
- 该字段很少进行DML操作
create index emp_ename_index on emp(ename);
drop index emp_ename_index on emp(ename);
索引失效的情况
- 模糊匹配的时候%开头
- or两端有一个没有索引
- 左匹配法
- where中使用了函数
- 发生了类型转换
索引分类
- 单一索引
- 复合索引
- 主键索引
- 唯一性索引
- 聚簇索引
- 非聚簇索引
视图
create view dept2_view as select * from dept;
drop view dept2_view;
对视图对象的增删改查会导致原表被修改
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/287845.html