数据库中的索引与书籍中的目录类似
数据库索引
优点
缺点
普通索引
唯一性索引
主键
全文索引
单列索引与多列索引
主表中的外键是令一张表的主键
CREATE INDEX加上各个索引关键字便可创建各个类型的索引
普通索引
语法:
create index <索引的名字> on 表名(需要索引的关键字);
mysql> create index name on test(name);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from test\G; #展示test表的索引
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
....省略内容
mysql> desc test; #查看表结构
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(4) | NO | PRI | NULL | |
| name | char(10) | NO | MUL | NULL | | #MUL表示有索引
| address | varchar(50) | YES | | 666666 | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
创建唯一性索引
语法:
create unique index <索引的名字> on 表名(需要索引的关键字);
mysql> create unique index address on test(address);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(4) | NO | PRI | NULL | |
| name | char(10) | NO | MUL | NULL | |
| address | varchar(50) | YES | UNI | 666666 | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
删除索引
mysql> drop index name on test;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> drop index address on test;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
创建组合索引
mysql> create table test2(id int(4) auto_increment,
-> name char(10) not null,
-> address varchar(30) default 'weizhi',
-> age int(3) not null,
-> index test2(id,name,address,age));
Query OK, 0 rows affected (0.01 sec)
mysql> select * from test2;
Empty set (0.00 sec)
mysql> show index from test2\G;
*************************** 1. row ***************************
Table: test2
Non_unique: 1
Key_name: test1
Seq_in_index: 1
Column_name: id
Collation: A
....省略内容
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
如何操作事务
控制事务的方法
控制事务的命令
使用事务处理命令控制事务
使用set命令进行控制
mysql> create database ccc;
Query OK, 1 row affected (0.00 sec)
mysql> begin; #开始事务
Query OK, 0 rows affected (0.00 sec)
mysql> create table ccc(id int(5) primary key auto_increment,name char(10) not null,agr char(100) default 'weizhi');
Query OK, 0 rows affected (0.01 sec
mysql> commit; #提交事务
Query OK, 0 rows affected (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into ccc values(1,'wangwu','22');
Query OK, 1 row affected (0.00 sec)
mysql> select * from ccc; #查看表内容
+----+--------+------+
| id | name | agr |
+----+--------+------+
| 1 | wangwu | 22 |
+----+--------+------+
1 row in set (0.00 sec)
mysql> rollback; #回滚
Query OK, 0 rows affected (0.00 sec)
mysql> select * from ccc; #再查看
Empty set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into ccc values(2,'lisi','33');
Query OK, 1 row affected (0.01 sec)
mysql> savepoint c1; #创建存档点 c1
Query OK, 0 rows affected (0.00 sec)
mysql> select * from ccc;
+----+--------+------+
| id | name | agr |
+----+--------+------+
| 1 | wangwu | 22 |
| 2 | lisi | 33 |
+----+--------+------+
2 rows in set (0.00 sec)
mysql> rollback to c1; #退回到c1
Query OK, 0 rows affected (0.00 sec)
mysql> select * from ccc;
+----+--------+------+
| id | name | agr |
+----+--------+------+
| 1 | wangwu | 22 |
+----+--------+------+
1 row in set (0.00 sec)
MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在
MySQL中称为存储引擎
存储引擎就是 MySQL将数据存储在文件系统中的存储方式或者存储格式
目前 MySQL常用的两种存储引擎
MySQL存储引擎是 MySQL数据库服务器中的组件,负责为数据库执行实际的数据I/O操作
使用特殊存储引擎的主要优点之一在于:
MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储
MyISAM是默认存储引擎(Mysql5.1前)。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。 每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。
MylSAM不支持事务,也不支持外键
访问速度快
对事务完整性没有要求
MyISAM在磁盘上存储成三个文件
表级锁定形式,数据在更新时锁定整个表
数据库在读写过程中相互阻塞
数据单独写入或读取,速度过程较快且占用资源相对少
MylAM支持的存储格式
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
lnnoDB特点
需要考虑每个存储引擎提供的核心功能及应用场景
支持的字段和数据类型
锁定类型:不同的存储引擎支持不同级别的锁定
索引的支持
事务处理的支持
mysql> SHOW CREATE TABLE GAODA(表名);
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GAODA | CREATE TABLE "GAODA" (
"ID" int(3) NOT NULL AUTO_INCREMENT,
"NAME" varchar(20) NOT NULL,
"BRITH" varchar(10) DEFAULT '未知',
PRIMARY KEY ("ID")
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
方法一
直接修改
alter table 表名 engine=引擎;
mysql> ALTER TABLE GAODA ENGINE=MYISAM;
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
方法二
修改配置文件
vim /etc/my.cnf
[mysqld]
……省略部分……
default-storage-engine=InnoDB
方法三
创建表时指定引擎
mysql> CREATE TABLE YINQING(ID INT(3) NOT NULL PRIMARY KEY AUTO_INCREMENT ,
-> NAME VARCHAR(20) NOT NULL,
-> AGE INT(3)
-> )ENGINE=MYISAM;
Query OK, 0 rows affected (0.00 sec)