Mysql学习笔记-表结构

参考书籍: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 表名