这一章主要总结约束方面的知识点。
约束主要有以下几种:

  1. NOT NULL
  2. UNIQUE
  3. PRIMARY KEY
  4. FOREIGN KEY
  5. CHECK
  6. 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 默认值”属性;

下面是创建表的时候使用约束:

sql server 非空表中添加主键id sql非空怎么设置_字段

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;

sql server 非空表中添加主键id sql非空怎么设置_sql_02


**

  • //显示表的创建语句

**

sql server 非空表中添加主键id sql非空怎么设置_字段名_03

**

  • //重命名表
  • //复制表,仅复制了表结构

**

sql server 非空表中添加主键id sql非空怎么设置_字段名_04

**

  • //显示表结构

**

//创建索引
create index suoying on test(test_name);
//删除索引
drop index suoying on test;

sql server 非空表中添加主键id sql非空怎么设置_表名_05

**

  • //与上表对比发现test_name多了一个索引
  • //这里出了点问题,发现添加,删除索引的时候命名一定要相同,要么都加引号,要么都没有。

**

后面开始正式对那几条修改表的命令解释:

alter table 表名 add [column] 新字段名 字段类型 [字段属性列表];
    alter table test add column test_a int unique key;
    desc test;
    //中括号表示可写,或者选择

sql server 非空表中添加主键id sql非空怎么设置_字段_06

alter table 表名 change [column] 旧字段名 新字段名 新字段类型 [新字段属性列表];
alter table test change  test_a test_b varchar(20) default 18;
desc test;
//修改字段,可改名

sql server 非空表中添加主键id sql非空怎么设置_sql_07

修改字段(只改属性):
    alter table 表名 modify [column] 字段名 新字段类型 [新字段属性列表];
    alter table test modify test_b int default 20;
    desc test;

sql server 非空表中添加主键id sql非空怎么设置_sql_08

alter table 表名 drop [column] 字段名;
alter table test drop test_b;
desc test;

//删除字段

sql server 非空表中添加主键id sql非空怎么设置_字段_09

添加普通索引:
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);
    //主键的比较麻烦,
    //第一:主键只能一个,所以要删除之前的主键属性
    //第二:删除之前的删除自增
    //第三:创建主键

sql server 非空表中添加主键id sql非空怎么设置_sql_10

sql server 非空表中添加主键id sql非空怎么设置_sql_11

sql server 非空表中添加主键id sql非空怎么设置_sql_12

sql server 非空表中添加主键id sql非空怎么设置_sql_13

//外键等就不说了,主要要知道的是外键必须是另外一个表的主键,且字段类型得一致(int,varchar等)

总结

到这里,约束的常用基本上就总结完了
~~~~~~~~~~~~~~~~~~~~~~