mysql8.0约束性语语句(主码、外码、NOT NULL/NULL、DEFAULT、UNIQUE、CHECK)

本文所有操作都是基于mysql8.0执行的,针对mysql数据库创建表之后的约束语句的添加、删除、修改

文章目录

    • 查看建表信息
    • 实体完整性
      • 创建表时定义实体完整性
      • 创建表后添加主码
      • 创建表以后删除主码
    • 参照完整性
      • 建表时定义外码
      • 建表后定义外码
      • 删除外码
    • 用户自定义完整性
      • NOT NULL/NULL
      • DEFAULT
      • UNIQUE
      • CHECK

查看建表信息

使用语句

show create table 表名

可以查看建表信息

实体完整性

创建表时定义实体完整性

即定义主码,只需要在那个属性背后加一个primary key
举例如下:

CREATE TABLE student
(
    sno CHAR(10) PRIMARY KEY,
    sname CHAR(10),
    sage SMALLINT
);

创建表student,并将sno属性设置为主码
多候选码,举例如下:

CREATE TABLE SC
(
    sno CHAR(10) NOT NULL,
    cno CHAR(10) NOT NULL,
    grade SMALLINT,
    PRIMARY KEY (sno,cno)
   );

创建表后添加主码

假设我们已经建立好了一个表,但是我们建表时忘记设置了主码
可使用命令如下来添加主码

alter table 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(属性名);
约束名可以随便取

举例说明,我们将表course中的属性cno添加为了主码约束

ALTER TABLE course ADD CONSTRAINT C1 PRIMARY KEY(cno);

创建表以后删除主码

alter table 表名 DROP CONSTRAINT;

参照完整性

即定义外码

建表时定义外码

实例如下:

CREATE TABLE SC
(
    sno CHAR(10) NOT NULL,
    cno CHAR(10) NOT NULL,
    grade SMALLINT,
    FOREIGN key (sno) REFERENCES student(sno) ,
    FOREIGN KEY (cno) REFERENCES course(cno) 
);

表SC中的属性sno、cno为外码,分别对应表student和course中的对应属性

建表后定义外码

使用命令:

ALTER TABLE 表名1 ADD CONSTRAINT 约束名 FOREIGN KEY (属性名1) REFERENCES 表名2(属性名2);
约束名可以随便取

举例如下:

ALTER TABLE course ADD CONSTRAINT c2 FOREIGN KEY (cpno) REFERENCES course(cno); 

查看建表信息:
mysql8.0约束性语语句(主码、外码、NOT NULL/NULL、DEFAULT、UNIQUE、CHECK)_第1张图片

删除外码

使用命令:

ALTER TABLE 表名 DROP FOREIGN KEY 约束名;

如果是建表时定义的外码,不知道约束名的话,可以使用命令"show create table 表名;"查看外码约束名。

同时因为在mysql8.0中外码还会以索引的形式存在,所以还要删除索引
使用命令:

DROP INDEX 约束名 ON 表名;

用户自定义完整性

以下用户完整性定义都是在建表后定义的,因为建表时定义不是很难,表建好后再定义,有些坑,所以就写一下,避免大家踩坑。

NOT NULL/NULL

添加not null,命令如下:

ALTER TABLE 表名 MODIFY 属性那一行的信息 NOT NULL;

举例:

ALTER TABLE student MODIFY sname char(10) NOT NULL;

删除同理,只要重新执行上面语句,去掉NULL或者NOT NULL就好了。

DEFAULT

命令如下:

ALTER TABLE 表名 MODIFY 属性那一行的信息 default;
举例:

ALTER TABLE student MODIFY sname char(10) NOT NULL DEFAULT 'SSS';

删除同理,只要重新执行上面语句,去掉default就好了。

UNIQUE

命令如下:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(属性名);

举例:

ALTER TABLE student ADD CONSTRAINT S1 UNIQUE(sname);

删除命令如下:

DROP INDEX 约束名 ON 表名;

接上面的例子举例:

DROP INDEX S1 ON student;

CHECK

添加命令如下:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(约束信息);

举例:

ALTER TABLE student ADD CONSTRAINT S1 CHECK(sage<25);

删除命令如下:

ALTER TABLE 表名 DROP CHECK 约束名;

接上面例子举例:

ALTER TABLE student DROP CHECK S1;

以上所有sql语句都是测试过的,应该问题不大。使用的mysql版本为8.0

你可能感兴趣的:(数据库)