这一章主要总结约束方面的知识点。
约束主要有以下几种:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
这些约束我们可以在创建表的时候使用,也可以在创建表之后添加。
下面一个个说:
1.非空约束:not null
非空约束:
就是要求某字段的数据不能为空(null)
其实就是设定字段的“not null”属性;
2.唯一约束:unique
唯一约束:
就是要求某字段的数据是唯一的不可重复的数据;
其实就是设定字段的唯一功能,也是“唯一索引”;
3.主键约束:primary key
主键约束:
就是要求某字段是能够唯一区分每一行的数据;
其实就是设定字段的主键功能,也是前面刚说的“主键索引”;
4.外键约束:foreign key
外键约束:
就是要求某字段的数据,必须是来源于另一个表的主键字段的数据值;
其实就是设定的“外键索引”
5.检测约束:check
检测约束:
就是要求某字段的数据值,必须符合所给定的某种条件;
形式:check (表达式); 要求该表达式的结果为“true”
举例:check ( age >= 18 and age <= 99);其中age是一个字段;
但是:非常遗憾,mysql目前尚不支持该检查约束的功能——但却对该语法形式可识别(不报错,也不起作用);
6.默认约束:default
默认约束:
就是要求某字段的数据值,在没有给数据的时候,自动获得一个“默认值”;
其实就是设定字段的“default 默认值”属性;
下面是创建表的时候使用约束:
create table test (
test_id int auto_increment primary key,
test_name varchar(20) not null,
test_age tinyint default 18,
test_cid varchar(20) unique key,
test_fid int,
unique key(test_fid),
foreign key(test_cid) references course(cid)
);
这里有几个注意点:
第一:使用外键的表必须存在,且值相等
第二:一般情况下只有一个主键,也有双主键一说,但是那是特例。
下面说说在创建表之后添加约束(索引):
其实因为约束和索引存在很多交集,所以我们通常会把他们看成一个概念,但实际上是有一些区别的。
索引是一种物理概念,是为了我们在查找数据时更方便而存在的。
键是一种逻辑概念,他可以在字段创建约束而存在。
而创建了约束,索引通常也自动创建了。
因为有不少交集,所以很容易混淆。
基本说明:
1,基本上,创建表能做的事情,修改表也能做!
2,但应用中,很少有修改表的任务或常规工作,而是,恰恰相反,我们是要尽量避免去修改表;
3,修改表通常都是简短的语句形式,大体包括如下:
3.1 对字段进行:增删改;
3.2 对索引(约束)进行:增删;
3.3 基本形式: alter table 表名 【增 | 删 | 改】 【字段或索引】
添加字段:
alter table 表名 add [column] 新字段名 字段类型 [字段属性列表];
修改字段(并可改名):
alter table 表名 change [column] 旧字段名 新字段名 新字段类型 [新字段属性列表];
修改字段(只改属性):
alter table 表名 modify [column] 字段名 新字段类型 [新字段属性列表];
删除字段:
alter table 表名 drop [column] 字段名;
添加普通索引:
alter table 表名 add key [索引名] (字段名1[,字段名2,...]);
添加唯一索引(约束):
alter table 表名 add unique key (字段名1[,字段名2,...]);
添加主键索引(约束):
alter table 表名 add primary key (字段名1[,字段名2,...]);
添加外键索引(约束):
alter table 表名1 add foreign key (字段1,[,字段名2,...]) references 表名2(字段1,[,字段名2,...]);
添加字段默认值(约束):
alter table 表名 alter [column] 字段名 set default 默认值;
删除字段默认值(约束):
alter table 表名 alter [column] 字段名 drop default;
删除主键:
alter table 表名 drop primay key;#每一个表最多只能有一个主键
删除外键:
alter table 表名 drop foreign key 外键名;
删除索引:
alter table 表名 drop key 索引名;
修改表名:
alter table 表名 rename [to] 新表名;
修改表选项:
alter table 表名 选项名1=选项值1,选项名2=选项值2,...;
为了更好的理解这些方法,这里顺带说说几个对表的查询操作。
• 显示所有表: show tables;
• 显示某表的结构: desc 表名; 或:describe 表名;
• 显示某表的创建语句:show create table 表名;
• 重命名表:rename table 旧表名 to 新表名;
• 从已有表复制表结构:create table [if not exists] 新表名 like 原表名;
• 删除表:drop table 表名;
• 创建索引:create [unique | fulltext] index 索引名 on 表名(字段名1[,字段名2,…])。
这里省略unique或 fulltext,那就是普通索引。实际上此创建索引语句,会在系统内部映射为一条“alter table”的添加索引语句。
• 删除索引:drop index 索引名 on 表名。实际上,此语句同样被映射为一条“alter table”的删除索引语句。
show tables;
//显示创建语句
show create table test;
//显示表结构
desc test;
rename table test to ceshi;
create table test like ceshi;
drop table ceshi;
**
- //显示表的创建语句
**
**
- //重命名表
- //复制表,仅复制了表结构
**
**
- //显示表结构
**
//创建索引
create index suoying on test(test_name);
//删除索引
drop index suoying on test;
**
- //与上表对比发现test_name多了一个索引
- //这里出了点问题,发现添加,删除索引的时候命名一定要相同,要么都加引号,要么都没有。
**
后面开始正式对那几条修改表的命令解释:
alter table 表名 add [column] 新字段名 字段类型 [字段属性列表];
alter table test add column test_a int unique key;
desc test;
//中括号表示可写,或者选择
alter table 表名 change [column] 旧字段名 新字段名 新字段类型 [新字段属性列表];
alter table test change test_a test_b varchar(20) default 18;
desc test;
//修改字段,可改名
修改字段(只改属性):
alter table 表名 modify [column] 字段名 新字段类型 [新字段属性列表];
alter table test modify test_b int default 20;
desc test;
alter table 表名 drop [column] 字段名;
alter table test drop test_b;
desc test;
//删除字段
添加普通索引:
alter table 表名 add key [索引名] (字段名1[,字段名2,…]);
添加唯一索引(约束):
alter table 表名 add unique key (字段名1[,字段名2,…]);
添加主键索引(约束):
alter table 表名 add primary key (字段名1[,字段名2,…]);
添加外键索引(约束):
alter table 表名1 add foreign key (字段1) references 表名2(字段1);
alter table test add column test_a int unique key;
alter table test add column test_b int unique key;
alter table test add column test_c int unique key;
//创建字段
alter table test add key test1 (test_a);
alter table test add unique key test2 (test_b);
alter table test modify test_id int;
alter table test drop primary key;
alter table test add primary key test3 (test_c);
//主键的比较麻烦,
//第一:主键只能一个,所以要删除之前的主键属性
//第二:删除之前的删除自增
//第三:创建主键
//外键等就不说了,主要要知道的是外键必须是另外一个表的主键,且字段类型得一致(int,varchar等)
总结
到这里,约束的常用基本上就总结完了 ~~~~~~~~~~~~~~~~~~~~~~