异常或者错误数据进入系统会对系统运行的稳定性产生重大影响,本节将阐述如何保证进入数据库的数据是符合要求的,即表的约束。
1 以系统管理员启动cmd命令行
以系统管理员启动cmd
2 约束有5类,分别是非空、唯一、检查、主键、外键2.1 非空 执行以下命令: # 在windows命令行下连接scott sqlplus scott/tiger # 创建之前先删除、确保创建成功 drop table t_user; # 创建一张表,name不能为空 create table t_user(id int, name varchar(20) not null); # 测试1 insert into t_user(id) values(1); --报错 insert into t_user(id,name) values(2,'wanhe'); --正确 # 在创建表之后加入非空约束 drop table t_user; create table t_user(id int, name varchar(20)); alter table t_user modify name constraint t_user_nn not null; # 测试2 insert into t_user(id) values(1); --报错 insert into t_user(id,name) values(2,'wanhe'); --正确 # 删除约束 alter table t_user drop constraint t_user_nn; # 测试3 insert into t_user(id) values(1); --正确 2.2 唯一 执行以下命令: # 创建之前先删除、确保创建成功 drop table t_user; # 创建一张表,name值要唯一 create table t_user(id int,name varchar(20) unique); # 测试1 insert into t_user(id,name) values(1,'wanhe');--正确 insert into t_user(id,name) values(1,'wanhe');--错误,wanhe已经存在 # 在创建表之后加入唯一约束 drop table t_user; create table t_user(id int,name varchar(20)); alter table t_user add constraint nn unique(name); # 测试2 insert into t_user(id,name) values(1,'wanhe');--正确 insert into t_user(id,name) values(1,'wanhe');--错误,wanhe已经存在 # 删除约束 alter table t_user drop constraint nn ; # 测试3 insert into t_user(id,name) values(1,'wanhe');--正确 insert into t_user(id,name) values(1,'wanhe');--正确 2.3 检查【值必须在某个范围以内】 执行以下命令: # 创建之前先删除、确保创建成功 drop table t_user; create table t_user(id int,name varchar(20),age int check(age>18)); # 测试1 insert into t_user values(1,'wanhe',25);--正确 insert into t_user values(2,'xiaoli',2) --错误 # 在创建表之后加入check约束 drop table t_user; create table t_user(id int,name varchar(20),age int); alter table t_user modify (age int check(age>18)); # 测试2 insert into t_user values(1,'wanhe',25);--正确 insert into t_user values(2,'xiaoli',2) --错误 2.4 主键【非空唯一索引】 执行以下命令: # 创建之前先删除、确保创建成功 drop table t_user; create table t_user(id int primary key,name varchar(20); # 测试1 insert into t_user(id,name) values(1,'ali'); --正确 insert into t_user(id,name) values(2,'ali'); --正确 insert into t_user(name) values('ali'); --错误,主键为空 insert into t_user(id,name) values(2,'ali'); --错误,主键重复 # 在创建表之后加入主键约束 drop table t_user; create table t_user(id int, name varchar(20); alter table t_user add constraint pk primary key(id); # 测试2 insert into t_user(id,name) values(1,'ali'); --正确 insert into t_user(id,name) values(2,'ali'); --正确 insert into t_user(name) values('ali'); --错误,主键为空 insert into t_user(id,name) values(2,'ali'); --错误,主键重复 # 删除主键约束 alter table t_user drop constraint pk ; # 测试3 insert into t_user(id,name) values(1,'ali'); --正确 insert into t_user(id,name) values(2,'ali'); --正确 insert into t_user(name) values('ali'); --正确,id可以为空 insert into t_user(id,name) values(2,'ali');--正确,id可以重复 2.5 外键【外键所取的值必须在另一个表的主键中存在】 执行以下命令: # 创建一个班级表,初始化几条记录 drop table t_class; create table t_class(id int,name varchar(20)); insert into t_class(id,name) values(1,'java'); insert into t_class(id,name) values(2,'python'); insert into t_class(id,name) values(3,'cpp'); # 创建学生表,在创建表的时候就添加外键约束 create table t_student(id int, name varchar(20) ,classid int, constraint fk foreign key (classid) references t_class(id) ) # 测试1 insert into t_student(id,name,classid) values(1,'ali',1);--正确 insert into t_student(id,name) values(2,'zhangli');--正确,外键可以为空 insert into t_student(id,name,classid) values(2,'xiaoli',8);--错误,外键的值必须在student表的主键中出现 delete from t_class where id=1;--错误,因为这个1被学生表中记录关联外键以上就是oracle中表的约束。