Oracleの研究ノート003(制約)

ここに画像を挿入説明

制約

  • テーブル・レベルの制約は必須であり、範囲の制約に応じて、制約は、テーブルレベルおよび列レベルの制約を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;


レコードを勉強しながら、不備は、メッセージのポインティングを歓迎している場合...

公開された63元の記事 ウォンの賞賛1 ビュー2034

おすすめ

転載: blog.csdn.net/qq_45061361/article/details/104393368