制約
-
テーブル・レベルの制約は必須であり、範囲の制約に応じて、制約は、テーブルレベルおよび列レベルの制約を2種類に分けることができる。追加した定義を定義するとき、その列レベルの制約は、制約と言うStraightaway現在の列の唯一の役割カラム制約、背後、及び唯一の制約テーブルレベルの第2は、別々に定義され、同時に複数の列に作用しているだけでなく、特定のカラムの役割です。
-
キーワードCONSTRAINTCONSTRAINT定義された制約を使用して、Oracle。
-
制約の6種類でのOracle
1. PRIMARY KEY 主键约束(唯一性、非空性) 2. UNIQOE 唯一性约束 3. NOT NULL 非空约束(只能定义在列上) 4. FOREIGN KEY 外键约束(两个表之间建立关系) 5. DEFAULT 默认约束(数据的默认值) 6. CHECK 检查约束(对数据的格式、范围、长度等等的限制)
1.追加の制約ときテーブルの構築
--给表添加约束条件之后创建表
create table pleatuser(
id varchar2(32),
--列级非空约束
user_name varchar2(32) not null,
--默认约束
user_addr varchar2(64) default '该用户很懒,没有填写地址',
--唯一约束
phone varchar2(11) unique,
--设置主键
constraint pleatuser_id_pk primary key(id)
)tablespace users;
--插入语句报错 ORA-01400: 无法将 NULL 插入 ("ORACLEUSER"."PLEATUSER"."USER_NAME")
insert into pleatuser(id,user_name,phone) values('001',null,'123123456');
--满足非空约束 正确
insert into pleatuser(id,user_name,phone) values('001','Tom001','123123456');
--插入语句报错 ORA-00001: 违反唯一约束条件 (ORACLEUSER.SYS_C006999)
insert into pleatuser(id,user_name,phone) values('002','Tom002','123123123');
--满足唯一约束 正确
insert into pleatuser (id,user_name,phone) values('002','Tom002','123123123');
--查询结果如下,地址没有填写是默认值
チェック制約(CHECK)
create table demo(
id varchar2(8),
name varchar2(32),
--检查约束,性别只能填写 'w' 'm'
sex varchar(32) default 'w'check(sex in ('w','m'))
) tablespace users;
--插入语句报错 ORA-02290: 违反检查约束条件 (ORACLEUSER.SYS_C007000)
insert into demo values ('001','python','男');
--满足检查约束 正确
insert into demo values ('001','python','m');
外部キー制約(外部キー)
--用户表
create table pleatuser(
id varchar2(32),
--列级非空约束
user_name varchar2(32) not null,
--默认约束
user_addr varchar2(64) default '该用户很懒,没有填写地址',
--唯一约束
phone varchar2(11) unique,
--设置主键
constraint pleatuser_id_pk primary key(id)
)tablespace users;
--订单表
create table indent(
id varchar2(32),
user_id varchar2(32) unique not null,
commodity_id varchar2(32) unique not null,
create_date date,
--设置外面约束
constraint pleatuser_indent_user_id foreign key(user_id) references pleatuser(id)
) tablespace users;
--插入数据测试约束条件
insert into pleatuser(id,user_name,phone) values('001','Tom1','123123456');
--插入数据违法外键约束 ORA-02291: 违反完整约束条件 (ORACLEUSER.PLEATUSER_INDENT_USER_ID) - 未找到父项关键字
insert into indent(id,user_id,commodity_id,create_date) values('0001','01','01',to_date('2020-02-19','yyyy-mm-dd'));
--满足外键,插入完成
insert into indent(id,user_id,commodity_id,create_date) values('0001','001','01',to_date('2020-02-19','yyyy-mm-dd'));
--查询结果
select * from pleatuser,indent;
制約の完了の確立後にテーブルを追加します。2.
--为已经建立完成的表添加主键约束
alter table pleatuser add constraint pleatuser_id_pk primary key(id);
--适用于为已经建立好的表添加外键约束
alter table indent add constraint pleatuser_indent_user_id foreign ley(user_id) references pleatuser(id);
--添加非空约束
alter table pleatuser modify user_name not null;
--添加唯一约束
alter table pleatuser add constraint uq_pleatuser_user_name unique(user_name);
3.カスケード操作
--使用该方式,删除的时候,级联删除掉子表中的所有匹配行,创建外键时,通过 on delete cascade 子句指定该外键列可级联删除
alter table ident add constraint pleatuser_indent_user_id foreign key(user_id) references pleatuser (id) on delete cascade;
--使用该方式,删除的时候,会将对应子表中的所有匹配行的外键约束列置为NULL,通过 on delete set null 子句实现
alter table ident add constraint pleatuser_indent_user_id foreign key(user_id) references pleatuser (id) on delete set null;
レコードを勉強しながら、不備は、メッセージのポインティングを歓迎している場合...