约束:一种限制,用于限制行或者表中的数据,为了保证表中的数据的准确和可靠性

           create table 表名(字段名   字段类型    约束)

分类:not null   非空,用于保证该字段的值不能为空

           default:默认,用于保证该字段有默认值

           primary key:主键,用于保证该字段的值具有唯一性

            unique:唯一,用于保证该字段的值具有唯一性,可以为空

            check:检查约束,MySQl中不支持

           foreign key:外键,用于限制二个表的关系,用于保证该字段的值必须来自于主表关联列的值

添加约束的时间:创建表或者修改表时

约束的添加分类:列级约束(以上约束都支持,但外键没什么效果),表级约束(除了非空,默认,都支持)

1.添加列级约束:直接在字段名和类型后追加约束类型

CREATE DATABASE students;
USE students;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT REFERENCES major(id)
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);

2.添加表级约束:在各个字段的最下面 【constraint 约束名】 约束类型(字段名)

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,

CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(seat),
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id),

);

通用的写法:

CREATE TABLE IF Not EXISTS stuinfo(
id INT PRIMARY KEY,
stuname VARCHAR(20) NOT NULL,
gender CHAR(1),
seat INT UNIQUE,
age INT DEFAULT 18,
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
);

主键和唯一的比较:保证唯一性        是否允许为空       一个表中可以有几个       是否允许组合

                     主键:是                          不允许                         至多一个               允许,但不推荐

                     唯一:是                            允许                           可以有几个           允许,但不推荐

外键:1.要求在从表设置外键关系   

           2.从表的外键列的类型和主表的关联列类型要求一致,名称无所谓

            3.主表的关联列必须是一个key(一般是主键或唯一)

             4.插入数据时,先插入主表,在插入从表,删除数据时先删从表,在删除主表

3.修改表时添加约束:添加列级:alter table 表名 modify column 字段名 字段类型 新约束;

                                    添加表级:alter table 表名 add [constraint 约束名] 约束类型 (字段名)【外键的引用】

     1.添加非空约束:

ALTER TABLE studio MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

 

    2.添加默认约束:

ALTER TABLE studio MODIFY COLUMN age INT DEFAULT 18;

      3.添加主键:

列级:

ALTER TABLE studio MODIFY COLUMN id INT PRIMARY KEY;

表级:

ALTER TABLE studio add PRIMARY KEY(id);

     4.添加唯一:

列级:

ALTER TABLE studio MODIFY COLUMN seat INT UNIQUE;

表级:

ALTER TABLE studio ADD UNIQUE(seat);

    5.添加外键:

ALTER TABLE studio ADD FOREIGN KEY(majorid) REFEENCES major(id);

4.修改表时删除约束

  1.删除非空约束:

ALTER TABLE studio MODIFY COLUMN stuname VARCHAR(20)  NULL;

2.删除默认约束:

ALTER TABLE studio MODIFY COLUMN age INT;

3.删除主键:

ALTER TABLE studio DROP PRIMARY KEY;

4.删除唯一:
 

ALTER TABLE studio DROP INDEX seat;

5.删除外键:

ALTER TABLE studio DROP FOFEIGN KEY majorid;