本文所有操作都是基于mysql8.0执行的,针对mysql数据库创建表之后的约束语句的添加、删除、修改
使用语句
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);
使用命令:
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;
如果是建表时定义的外码,不知道约束名的话,可以使用命令"show create table 表名;"查看外码约束名。
同时因为在mysql8.0中外码还会以索引的形式存在,所以还要删除索引
使用命令:
DROP INDEX 约束名 ON 表名;
以下用户完整性定义都是在建表后定义的,因为建表时定义不是很难,表建好后再定义,有些坑,所以就写一下,避免大家踩坑。
添加not null,命令如下:
ALTER TABLE 表名 MODIFY 属性那一行的信息 NOT NULL;
举例:
ALTER TABLE student MODIFY sname char(10) NOT NULL;
删除同理,只要重新执行上面语句,去掉NULL或者NOT NULL就好了。
命令如下:
ALTER TABLE 表名 MODIFY 属性那一行的信息 default;
举例:
ALTER TABLE student MODIFY sname char(10) NOT NULL DEFAULT 'SSS';
删除同理,只要重新执行上面语句,去掉default就好了。
命令如下:
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(属性名);
举例:
ALTER TABLE student ADD CONSTRAINT S1 UNIQUE(sname);
删除命令如下:
DROP INDEX 约束名 ON 表名;
接上面的例子举例:
DROP INDEX S1 ON student;
添加命令如下:
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