与表相关的基本概念
什么是表
MySQL中的表类似于文件,其内的一行数据叫做记录,记录所对应的标题称之为字段
cid和caption就是表字段,下面的一行行内容就是记录
存储引擎介绍
与普通的文件一样,MySQL的表也有各种各样的类型,表的类型不同,所对应的存取机制也不同。存储引擎就是存储数据,读取数据,查询数据,建立索引的实现方法,可以将其理解为是存储和操作表的类型
MySQL不同于其它关系型数据库为我们提供了多种存储引擎
MySQL一些常用的存储引擎
1.InnoDB存储引擎
InnoDB是MySQL最为常用的存储引擎,其设计目标主要是面向联机处理事务的应用,该存储引擎采用了聚集的方式,每张表都按照主键的顺序进行存储,如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。
2.Memory存储引擎
该存储引擎的数据都存放在内存中(重启数据库/数据库崩溃都会导致表中记录的丢失)--->常用于存储临时表数据,且默认使用的是哈希索引,而非B+树索引
3.blackhole存储引擎:又称黑洞存储引擎
4.MyISAM存储引擎:不支持事物,其缓冲池内只存储索引文件,而不存储数据文件
show engines\G #查看所有支持的存储引擎 show variables like 'storage_engine%'; #查看正在使用的存储引擎
使用不同的存储引擎
创建一个innodb存储引擎的表
create table t1(id int)engine=innodb;
发现innodb存储引擎将表分为两个文件存储,一个frm表用于存储表结构,一个ibd用于存储表索引和表的数据
创建一个MyISAM存储引擎的表
create table t2(id int)engine=myisam;
发现该存储引擎将表分为三个文件存储,frm为存储表结构,MYD为存储MyISAM的数据,MYI为存储索引
创建一个blackhole存储引擎和Memory存储引擎
create table t3(id int)engine=memory; create table t4(id int)engine=blackhole;
都只有表结构
表的增,删,改,查
创建表
create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); eg: create table t1( id int primary key auto_increment, # 一般将id字段设置为主键 name varchar(15), age int, gender enum('male','female') )
其中
字段名(唯一),类型为必填
宽度,约束条件为可选(约束条件是在数据类型之外对字段添加的额外限制)
查看表
# 查看表结构,没有执行库名,默认当前库 desc 库名.表名; # 查看详细表结构 show create table 库名.表名; show create table\G 库名.表名; # 查看当前库中的所有表名 show tables;
修改表
# 添加一个字段 alter table 表名 add 字段名 字段类型; alter table 表名 add 字段名 字段类型 first; alter table 表名 add 字段名 字段类型 after 字段名; # 修改字段完整性约束宽度 alter table 表名 modify 字段名 类型(); # 修改字段名/类型 alter table 表名 change 原字段名 新字段名 类型(); alter table 表名 change 原字段名 新字段名 新数据类型(); # 删除字段 alter table 表名 drop 字段名; # 修改表名 alter table 表名 rename 新表名
删除表
drop table 表名
复制表
# 复制表结构 + 记录(key不会复制:主键,外键,索引) create table 新建表名 select * from 目标表名; # 只复制表结构 create table 新建表名 select * from 目标表名 where 1=3;