参考书籍:Mysql核心技术与最佳实践 /孔祥盛编著. -北京:人民邮电出版社,2014.5 ISBN 978-7-115-33769-6
一、数据类型
1、整数
2、小数
- 考虑到数据库移植,尽量用decimal数据类型
3、字符串
- char(n) 为定长字符串类型,表示占用n个字符(注意不是字节)的存储空间。
- varchar(n)、tinytext、text、mediumtext、longtext等为变长字符串类型,字符串占用空间为真实空间,与n无关。
4、日期
- datatime取值范围大于timestamp
- 将null插入timestamp字段后,该字段值实际上是mysql服务器当前的日期和时间
- 当包含timestamp数据记录进行修改时,timestamp数据将自动更新为mysql服务器当前的日期和时间。
5、复合类型
- enum枚举类型,只允许从集合中取一个值,最多包涵65535个元素,enum('男','女')
- set集合类型,允许从集合中取多个值,最多包涵64个元素,set('音乐','电影','动漫')
6、二进制类型
- binary、varbinary、bit、tinyblob、blob、mediumblob、longblob等
7、选择数据类型
- 符合应用要求下,尽量“短”
- 数据类型越简单越好,尽量用整数代替字符串(mysql有IP地址与整数转换的函数)
- 尽量使用精确小数(decimal(4.2)),不采用浮点
- 尽量使用内置的时间或日期类型,不采用字符串
- 避免null字段,建议指定为no null 约束。或使用特殊字符代替NULL
二、创建表
语法形式:
create table 表名( 字段名 数据类型 [约束条件], 字段名 数据类型 [约束条件], ... [其它约束条件], [其它约束条件] )其它选项(如存储引擎、字符集等)
注意:[]表示是可选的
1、设置约束
1.1主键约束(primary key)
主键是单个字段,例如:
student_no char(11) primary key
主键是多个字段组合,例如:
use choose create table monadays( t1 datatime, t2 timestamp, primary key(t1,t2) );
1.2 非空约束
student_name char(19) not null
1.3检查约束
1.4默认值约束
up_limit int default 60
1.5设置唯一性约束
1.6设置外键约束
2、设置自增字段
字段名 数据类型 auto_increment #字段名 数据类型 auto_increment primary key
3、其它
3.1存储引擎
engine=存储引擎
3.2字符集
default charset=字符集类型
3.3压缩索引中关键字
pack_keys=压缩类型
4、复制表结构
create 新表名 like 源表名
create table 新表名 select * from 原表 #复制所有记录
三、修改表结构
1、修改字段
1.1删除字段
alter table 表名 drop 字段名
1.2添加字段
alter table 表名 add 新字段数据类型 [约束条件][first|after 旧字段名]
1.3修改字段名
alter table 表名 change 旧字段名 新字段名 数据类型 #修改字段名及数据类型 alter table 表名 modify 字段名 数据类型 #仅修改数据类型
2、修改约束
2.1添加约束
alter table 表名 add constraint 约束名 约束类型(字段名)
2.1删除约束
alter table 表名 drop primary key #删除主键约束 alter table 表名 drop foreight key #删除外键约束 alter table 表名 drop index 唯一索引名 #删除唯一性约束
3、修改表其它选项
alter table 表名 engine=新存储引擎 alter table 表名 default charset=新字符集 alter table 表名 auto_increment=新初始值 alter table 表名 pack_keys=新压缩类型
4、修改表名
rename table 旧表名 to 新表名
5、删除表
drop table 表名