表的约束,域,断言
第一部分:表的约束
常见的约束类型:
(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 ;

浙公网安备 33010602011771号