SQL基础(2)-约束

时间:2022-08-11 16:12:14

1. 添加主键约束

 a.创建表时添加主键(默认系统命名主键)

  create table pt_ticket_info(

    id varchar2(50) primary key not null,  --此处的not null可以省略

    ticket_no varchar2(50)

  );

 b.创建表时添加主键(指定主键命名)

  create table pt_ticket_info2(

    id varchar2(50),

    ticket_no varchar2(50),

    constraint pk_ticket primary key(id)

  );

 c.创建表后添加主键

  create table pk_ticket_info3(

    id varchar2(50),

    ticket_no varchar2(50)  

  );

  alter table pk_ticket_info3 add constraint pk_ticket3 primary key(id);

2.添加外键

a.创建表时添加

  create table smi_client_info(

    id varchar2(30) primary key,

    client_no varchar2(50),

    client_name varchar2(100),

    age varchar(1)

  );

  create table smi_ticket_info(

    id varchar2(30) primary key,

    ticket_no varchar2(50),

    client_no varchar2(50),

    constraint fk_client_no foreign key(client_no) references smi_client_info(client_no)

  )

b.创建表后添加

  alter table smi_ticket_info add constraint fk_client_no froeign key(client_no) references smi_client_info(client_no);

3.非空约束(只可以在创建表或修改列时在列上直接添加)

  --a.创建表时

  create table pnn_test(

    id varchar2(30) primary key,

    name varchar2(50) not null,

    sex varchar(1)

  );

  --b.添加或修改列时

  alter table pnn_test add (age height(3,2) not null);

  alter table pnn_test modify(sex varchar2(1) not null);

4.唯一约束

  1)有唯一性约束的列上允许空值;

  2)唯一约束可以建立在一列上,也可以建立多个(最多32个)字段上;

  3)若唯一约束由多列组成,则其中的部分列可以包含空值;

  4)Oracle不允许在相同的列上既创建主键又创建唯一性约束;

  5)Oracle自动为建立唯一性约束的字段创建索引。

  --a.创建表时

  create table unk_test(

    id varchar2(30) primary key,

    name varchar2(50) unique,

    alias_name varchar2(50),

    idno varchar2(20),

    sex varchar(1)

  );

  --b.添加或修改列时

  alter table unk_test add (stu_no varchar2(20) unique);

    --已下语句无法删除stu_no列上的唯一性约束

    --alter table unk_test modify (stu_no varchar2(20));

  -- 为已有列添加唯一性约束

  alter table unk_test add (account varchar2(50) );

  alter table unk_test modify (account varchar2(50)  unique);

  --c.修改表

  alter table unk_test add constraint uk_idno unique(idno);

  --d.联合字段的唯一性约束

  create table unk_union_test(

    id varchar2(50) primary key,

    name varchar2(50),

    age number(3,2),

    idno varchar2(30),

    stu_no varchar2(30),

    account varchar2(30),

    constraint unuq_name_idno unique(name, idno)

  );

  alter table unk_union_test add constraint unuq_stuno_account unique(stu_no, account);

  注:同一个列上可以同时创建单一字段的唯一性约束和联合字段的唯一性约束。

5.查询约束

  select uc.constraint_name from user_constraint uc where uc.table_name ='unk_test';

6.禁用启用约束

   alter table unk_test disable constraint sys_c0011232;

    alter table unk_test enable constraint sys_c0011232;

7.删除约束

  alter table unk_test drop constraint sys_c0011232;