1>存储引擎的概念
如之前所言,mysql中建立的库,其实就是创建文件夹,在库中建立的表,其实就是该文件夹下创建文件。
操作系统上存储数据的文件有不同的类型,每种文件类型对应有各自不同的处理机制:比如处理文本用txt,
处理表格用excel,处理图片用jpg等
数据库中的表也有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
存储引擎其实就是一种如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql
数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据
自己的需要编写自己的存储引擎。
1.1>MySQL支持的存储引擎
其中:InnoDB 存储引擎是MySQL默认存储引擎,亦是最为常用的一种引擎。
其他如 Memory可用于存放临时数据,Blackhole可以处理垃圾数据。
1.2>使用存储引擎
-->可以建表的时候指定
如:create table innodb_t1(id int,name char)engine=innodb;
-->或者更配置文件指定
[mysqld]
default-storage-engine=INNODB
innodb_file_per_table=1
1.3>存储引擎实例
用innodb,myisam,memory,blackhole分别创建表并插入数据,查看结果,如下
-->innodb生成两个文件,.frm存放表结构,.idb(innodb的简写)存放表数据,
-->myisam生成三个文件,.frm存放表结构,另外两个文件是该引擎的数据处理文件
-->memory只有表结构文件,没有存放数据的文件,数据存放在内存里,故没有生成数据文件
-->blackhole也是只有表结构,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录,
所以也没有且不必生成数据文件。
2>表的增删改查
语法:create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件]);
注:同一张表中字段名不能相同,字段名和数据类型必须有,宽度和约束条件可选。
-->查看表
describe 表名; 可简写 desc 表名;
show tables; # 查看当前库下所有表名
show create table t1\G; # 查看表详细结构,可加\G
-->修改表
1. 修改表名
ALTER TABLE 表名 RENAME 新表名;
2. 增加字段(默认增加至末尾,可用first、after指定位置)
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
3. 删除字段
ALTER TABLE 表名 DROP 字段名;
4. 修改字段
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
-->复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;
只复制表结构create table new1_service select * from service where 1=2; # 条件为假,查不到任何记录
mysql> create table t4 like employees; #或者用like
-->删除表
DROP TABLE 表名;