一、DDL:数据定义语言
1. 库的相关操作
# 创建库
create database [if not exists] 库名;
# 删除库
drop database [if exists] 库名;
# 设置字符集
CREATE DATABASE [if not exists] 库名 DEFAULT CHARACTER SET utf8;
# 修改库的字符集
ALTER DATABASE 库名 DEFAULT CHARACTER SET GBK
# 查看建表详情语句
SHOW CREATE DATABASE rj2014_1;
# 切换数据库
use 库名;
2. 表的相关操作
创建表
create table 表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
二、DQL:数据查询语言
三、DML:数据操作语言
四、TCL:事务控制语言
**行成功,要么全部失败,不会存在部分成功的情况。
4.1 事务的四大特性(ACID)
原子性(Atomicity)
事务的整个过程如原子操作一样,最终要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。
一致性(Consistency)
事务开始之前、执行中、执行完毕,这些时间点,多个人去观察事务操作的数据的时候,看到的数据都是一致的,比如在事务操作过程中,A连接看到的是100,那么B此时也去看的时候也是100,不会说AB看到的数据不一样,他们在某个时间点看到的数据是一致的。
隔离性(Isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(Durability)
一个事务一旦提交,他对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。
4.2 Mysql中的事务操作
mysql中事务默认是隐式事务,执行insert、update、delete操作的时候,数据库自动开启事务、提交或回滚事务。
是否开启隐式事务是由变量autocommit
控制的。
所以事务分为隐式事务和显式事务。
隐式事务
事务自动开启、提交或回滚,比如insert、update、delete语句,事务的开启、提交或回滚由mysql内部自动控制的。
查看变量autocommit
是否开启了自动提交
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)
autocommit
为ON表示开启了自动提交。
显式事务
4.3 事务的隔离级别
五、索引
5.1 索引介绍
索引是依靠某些数据结构和算法来组织数据,最终引导用户快速检索出所需要的数据。
MYSQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,所以说索引的本质是:数据结构。索引的目的在于提高查询效率。
优点:
- 索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度,这也是创建索引的最主要的原因。
- 索引可以帮助服务器避免排序和创建临时表
- 索引可以将随机IO变成顺序IO
缺点:
- 创建索引和维护索引要耗费时间
- 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
- 对表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度
5.2 索引的分类🤏🏻
主键索引:建立在主键上的索引被称为主键索引,一张数据表只能有一个主键索引,索引列值不允许有空值
普通索引 / 单列索引:每个索引只包含单个列,一个表可以有多个单列索引;
复合索引(多列索引、联合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合;
唯一索引:限制值必须唯一,可以有一个NULL值;
全文索引:空间索引是对空间数据类型的字段建立的索引;
5.3 索引的基本操作
① 查看索引
SHOW INDEX from `表名`
② 删除索引
drop index index_name on table2
③ 创建索引
# 创建主键索引
CREATE TABLE `table` (
`id` int(11) PRIMARY KEY ,
`title` char(255)
);
# 创建普通索引
CREATE TABLE `table2` (
`id` int(11) PRIMARY KEY ,
`title` char(255),
KEY(title)
);
CREATE INDEX index_name on test_int(t1);
#创建唯一索引
CREATE TABLE t_user (
`id` INT ( 11 ) PRIMARY KEY,
`name` VARCHAR(20),
UNIQUE ( name )
)
CREATE unique INDEX index_name on t_user(t1);
#创建复合索引
CREATE TABLE t_user2 (
`id` INT ( 11 ) PRIMARY KEY,
`name` VARCHAR(20),
age INT ( 11 ),
key ( name ,age)
)
CREATE INDEX index_name on t_user2(name,age);