约束
约束:约束就是给字段添加的限制条件
非空约束 not null
字段的值不能为null
create table 表名(字段名 字段类型,字段名 字段类型not null);
唯一约束 unique
字段的值不能重复
create table 表名(字段名 字段类型,字段名 字段类型 unique);
数据重复则插入失败
默认约束 default
给字段设置默认值
触发默认值生效
主键约束 primary key
主键约束: 插入数据必须是唯一且非空的
主键:用于表示数据唯一性的字段称为主键
约束: 就是创建表的时候给字段添加的限制条件
主键约束+自增 primary key auto_increment
自增数值只增不减
从历史最大值基础上+1
外键约束
外键:用于建立关系的字段
外键约束: 为了保证两张表之间建立正确的关系,外键字段的值可以为null,可以重复,不能是另外一张表中不存在的数据,建立好关系后被依赖的数据不能先删除,被依赖的表不能先删除
- 如何使用外键约束
- constraint 约束名称 foreign key(外键字段名) references 被依赖的表名(被依赖的字段名) ;
- 例:
- 先创建部门表
create table dept(id int primary key auto_increment,name varchar(10)); - 创建员工表
create table emp(id int primary key auto_increment,name varchar(10),deptid int,constraint fk_dept foreign key(deptid) references dept(id));
索引
1.索引:索引是数据库中用于提高查询效率的技术,工作原理类似于目录
2.为什么使用索引:如果不使用索引,数据会零散的保存到每一个磁盘块中,查找数据时需要逐个遍历每一个磁盘块 直到找到数据为止,使用索引后磁盘块会以树桩结构保存,查找数据时可以大大减低磁盘块的访问量,从而提高查询效率
3.有索引就一定好吗?
不是,如果数据量比较小,有索引反而会降低查询效率
创建索引
1.创建索引
create index 索引名 on 表名(字段名(?字段长度));
例:create index i_item_title on item2(title);
2.索引是越多越好吗?
不是,只针对常用的查询字段创建索引,因为索引会占磁盘空间
查看索引
show index from 表名;
删除索引
drop index 索引名 on 表名;
复合索引
通过多个字段创建的索引称为复合索引
例:create index i_item_title_price on item2(title,price);
事务
1.数据库中执行同一业务多条SQL语句的工作单元,可以保证多条SQL全部执行成功或全部执行失败
2.事务的ACID特性,此特性是保证事务正确执行的四大基本要素
Atomicity:原子性,最小不可拆分,保证全部成功或全部失败
Consistency:一致性,保证从一个一致状态到另一个一致状态
Isolation:隔离性,多个事务直接互不影响
Durability:持久性,事务提交后数据持久保存到磁盘中
事务相关指令:
1 开启事务 begin;
2 提交事务 commit;
3 回滚事务 rollback; rollback to xxx;
4savepoint; 保存回滚点 savepoint xxx;
SQL分类
DDL: Data Definition Language
数据定义语言,包括:create 、drop 、alter、 truncate ,不支持事务
truncate table 表名:删除表并创建新表 自增数值清零
DML: Data Manipulation Language
数据操作语言,包括:insert、delete、update、select(DQL),支持事务
DQL: Data Query Language
数据查询语言,包括:select
TCL: Transaction Control Language
事务控制语言,包括:begin、commit、rollback、savepoint xxx、rollback to xxx
DCL: Data Control Language
数据控制语言,分配用户权限相关SQL