表的约束,域,断言

第一部分:表的约束

常见的约束类型:

(1).primary key:主键(用于区分不同元组的唯一标识属性)

(2).unique:独特(表示该属性的分量不能在不同元组中重复出现)

(3).not null:不为空(表示该属性的分类不能为空值)

(4).foreign key ... references ...:外键约束(即如果该表的某一个属性做为从表的外键,则主表中的该属性不能为空,从表的外键一定要在主表对应的属性域中)

(5).auto_increment:自增长(即该值会自动赋值,从1开始,之后依次递增1)

(6).chenck:用于直接给所要的属性灵活的添加所需要的约束方式

 

1.非外键约束添加的方式:

1 create table book(
2 id int primary key auto_increment,
3 name varchar(15) unique,
4 email varchar(30) not null
5 );

添加比较方便,且不是额外附加条件,一般在初始化表时就可以添加确定

 

也可以在最后进行添加:

1 create table if not exists student(
2 sno varchar(10),
3 name varchar (15),
4 grade int ,
5 primary key (sno),
6 unique (name)
7 );

 

也可以在表定义最后再声明(表的外键约束一般都放到最后):

 1 CREATE TABLE employees(
 2 employeeNumber INT(11) PRIMARY KEY AUTO_INCREMENT,
 3 lastName VARCHAR(50) NOT NULL,
 4 firstName VARCHAR(50) NOT NULL,
 5 mobile VARCHAR(25) UNIQUE,
 6 officeCode INT(10) NOT NULL,
 7 jobTitle VARCHAR(50) NOT NULL,
 8 birth DATETIME NOT NULL,
 9 note VARCHAR(255),
10 sex VARCHAR(5),
11 CONSTRAINT fk_emp_ofCode FOREIGN KEY(officeCode) REFERENCES offices(officeCode)
12 );

 

2.外键约束添加的方式:

1 #3. 向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept2表中的id列。
2 alter table dept2 
3 add dept_id int ;
4 alter table dept2 
5 add constraint fforeign foreign key (dept_id) references dept2(id);

此处先加上变量dept_id,在附上外键foreign key(不像其他约束可以边添加属性边添加约束,因为外键添加较为麻烦)

 

3.check约束条件的添加:

1 create table peron(
2 id varchar(20) primary key,
3 name varchar(15) not null,
4 sex varchar(2) check(sex in('',''))
5 );

check既可以定义约束属性的取值域,也可以为元组中属性上的分量进行一些限制

1 grade int check(grade >= 0 and grade <= 100)

也可以有多属性合在一起的限制

1 grade int check(grade >= 0 and grade <= 100)
2 nums int,
3 constraint names check(grade * num < 100)

 

 

4.表创建后更新,增添约束的方式(两种方式):

1 #1.向表emp2的id列中添加PRIMARY KEY约束
2 alter table emp2 
3 modify id int primary key;
4 #2. 向表dept2的id列中添加PRIMARY KEY约束
5 alter table dept2 
6 add primary key(id);#not null约束不能使用该方法,其余都可以使用该方法

 

5.删除约束的方式:

1 alter table sc 
2 drop constraint link_course ;

即alter table 表名 drop constraint 约束名;

 

为了便于删除,除主键外最好为每个约束进行一个命名,主键可以直接删除(因为只存在一个)

1 alter table student 
2 drop primary key;

 

第二部分:域(即属性可选用的取值范围(带类型))

1.域的创建:

1 #创建一个域,名为sexes
2 create domain sexes varchar(2)
3 check (value in ('',''));

2.域的约束条件增添

1 alter domain sexes
2 add check(value in ('1','0');

3.域的约束条件删除

1 alter domain sexes 
2 drop constraint gd;#gd为约束名

 

第三部分:断言 (多表中的约束)

1.断言的创建

1 #限制10号部门最多只能有60个员工
2 create assertion demartment_limit 
3 check (60 >= (select count(*)
4         from employees e,departments d 
5         where e.department_id = d.department_id and d.department_id = 10
6         );

create assertion 断言名

check (所需要的条件,一般为多表连接);

 

2.断言的删除

1 drop assertion demartment_limit ;

 

posted @ 2022-03-24 09:00  jue1e0  阅读(100)  评论(0)    收藏  举报