表结构的管理
数据类型
- 整数类型
- 小数类型
- 字符串类型
- 日期类型
- 复合类型
- 二进制类型
创建表
使用表语句:use table(表名)
约束可分为:
- 主键约束 (primary key)
- 非空约束(not null)
- 检查约束(check)
- 默认约束(defualt)
- 唯一性约束(unique)
- 外键约束(foreign key)
- 主键约束:
1)单个主键: 以student表为例 ->>student_no char(11) primary key
2)复合主键:primary key (字段名1,字段名2)
- 外键约束: 用于定义表语表之间的某种关系
- eg:
表A外键字段的取值,要么是null,要么是表B主键字段的取值(A为B的子表,反之亦然)
语法规范:
constrain 约束名 foreign key (A字段名或字段列表)references B( 字段名或字段列表)[on delete 级联选项] [on update 级联选项]
- 级联选项为四种:
- cascade:父表作删除与更新时,子表与之对应的记录作同样操作
- set null:父表作删除与更新时,子表与之对应的外键值自动设为null
- no action :父表作删除与更新时,子表存在记录则操作失败
- restrict :与 no action 一致,默认选项
ps:事实上MySQL并不支持检查约束,其他的约束基本跟主键约束的设置方式一样,可以百度解决下。。。。
设置自增字段:
字段名 数据类型 auto_increment
eg:
class_no auto_increment primary key
其他设置:
1>engine=存储引擎
2>default charset=字符集类型
3>pack_keys=压缩类型 (1,0,default)->>可以百度下
3.清空表
truncate 表名
4.复制一个表结构
方法一 : create table 新表名 like 源表名
如: create table student1 like student
方法二: create table 新表名 select * from 源表
如: create table student1 select * from student
ps:这条语句可以将源表中的表结构和所有记录都复制到新表
如果仅仅需要复制表结构:create table student1 select * from student where 1=2
以上的复制方法都无法复制表的约束条件,如需要可以借助mysqldump工具
5.修改表结构
对字段的操作:
删: alter table 表名 drop 字段名
添: alter table 表名 add 字段名-数据类型[约束条件][first|after旧字段名]
alter table person_name char(10) not null after person_no
修改:
> 修改字段名和数据类型
alter table 表名 旧字段名 新字段名 数据类型
> 仅修改字段数据类型
alter table 表名 modify 字段名 数据类型
约束条件的操作
添: alter table 表名 add constraint 约束名 约束类型(字段名)
alter table person add constraint name unque (name)
删: alter table 表名 foreign key 约束名
修改表的其他操作
alter table 表名 engine = 新的存储引擎类型
alter table 表名 default charset = 新的字符集
alter table 表名 auto_increment = 新的初始值
alter table 表名 pack_keys = 新的压缩类型 (pack_keys仅对MyISAM存储引擎有效)
修改表名:
rename table 旧表名 to 新表名
对于表的删除这里不再罗列,如果存在约束时,注意删除表的顺序即可。
索引
在已有表创建索引
语法一:create [unique|fulltext] index 索引名 on 表名(字段名[长度] [asc|desc])
语法二:
alter table 表名 add [unique|fulltext] index 索引名(字段名[长度] [asc|desc])
alter table course add fulltext index description_fulltext (description) 等同于 create fulltext index description fulltext on course (description)
删除索引:
drop index 索引名 on 表名