1.1.1 数据库索引
1.3.1 普通索引 index
#1 直接创建
mysql> create index index_name on table_name(column(length));
#2 修改表的方式创建
mysql> alter table table_name add index index_name (column(length));
#3 创建表的时候创建
mysql> create table table_name (id int(3) auto_increment,name varchar(10) not null,score decimal(5,2) not null,address varchar(50) default '未知',primary key(id),==index index_name(id)==);
1.3.2 唯一性索引 unique index
#1 直接创建
mysql> create unique index index_name on table_name(某一字段);
#2 修改表的方式创建
mysql> alter table table_name add unique index index_name(某一字段);
#3 创建表的时候创建
mysql> create table table_name (id int(3) not null auto_increment,name varchar(10) not null,score decimal(5,2) not null,address varchar(50) default '未知',primary key(id),unique index index_name(id));
1.3.3 主键索引 primary key
mysql> create table table_name (id int(3) not null auto_increment,name varchar(10) not null,==primary key(id)==);
1.3.4 组合索引 单列索引与多列索引
mysql> create table table_name (name varchar(10),age int(3),==index index_name(name,age)==);
1.3.5 全文索引 fulltext index
#1
mysql> create fulltext index index_name on table_name (column(length));
#2
mysql> alter table table_name add fulltext index index_name (column(length));
#3
mysql> create table table_name (id int(3) not null auto_increment,name varchar(10) not null,score decimal(5,2) not null,address varchar(50) default '未知',primary key(id),==fulltext index index_name(id)==);
mysql> show index from table_name;
mysql> show keys from table_name;
mysql> drop index index_name on table_name;
mysql> alter table table_name drop index index_name;
1.7.1 第一范式(确保每列保持原子性)
1.7.2 第二范式(确保表中的每列都和主键相关)
1.7.3 第三范式(确保每列都和主键列直接相关,而不是间接相关)
9.1 原子性(Atomicity)
9.2 一致性(Consistency)
9.3 隔离性(Isolation)
9.4 持久性(Durability)
MySQL事务默认是自动提交的,当SQL语句提交时事务便自动提交
事务控制语句
BEGIN或START TRANSACTION ===>表示事务的开始
COMMIT ===>提交
ROLLBACK ===>回滚
SAVEPOINT 存档点名称 ===>设置断点,存档点
RELEASE SAVEPOINT 存档点名称 ===>释放存档点
ROLLBACK TO 存档点名称 ===>回滚到某个存档点
SET TRANSACTION ===>设置事务
2.4.1 手动对事务进行控制的方法
begin: 开始一个事务
commit: 提交一个事务
rollback: 回滚一个事务
set autocommit=0: 禁止自动提交
set autocommit=1: 开启自动提交
innodb的存储引擎才支持事务; 5.7以后都是支持事务的
# 使用test数据库
mysql> use test;
# 创建表,引擎是innodb
mysql> create table test_transaction_test(id int(3))engine=innodb;
# 查看表test_transaction_test的信息
mysql> select * from test_transaction_test;
# 开始事务
mysql> begin;
# 添加记录到表中
mysql> insert into test_transaction_test values (1);
mysql> insert into test_transaction_test values (2);
# 提交事务
mysql> commit;
# 查看表中信息
mysql> select * from test_transaction_test;
# 开始事务
mysql> begin;
# 添加记录到表中
mysql> insert into test_transaction_test values (3);
# 回滚
mysql> rollback;
# 查看表中信息
mysql> select * from test_transaction_test;
MyISAM ===>表级锁定,锁定整张表
InnoDB ===>行级锁定,锁定某一行
.frm文件存储表定义 ===>表的定义文件
数据文件的扩展名为.MYD(MYData)
索引文件的扩展名是.MYI(MYIndex)
会在数据写入的过程阻塞用户数据的读取
也会在数据读取的过程中阻塞用户的数据写入
静态表
动态表
压缩表
如:论坛、微博等
如:银行业务
但所有引擎都支持通用的数据类型
但不是所有的引擎都支持其它的字段类型,如二进制对象
表锁定
行锁定
简历索引在搜索和恢复数据库中的数据时能显著提高性能
不同的存储引擎提供不同的制作索引技术
有些存储引擎根本不支持索引
提高在向表中更新和插入信息期间的可靠性
可根据企业业务是否要支持和事务选择存储引擎
alter table table_name engine=引擎;
default-storage-engine=引擎;
create table table_name (字段) engine=引擎;