- 問題1:學號重復了,資料還可以插入成功
使用主鍵約束:學號是唯一標識一條資料的,所以必須唯一且不能為空
-
—(1)、在確定為主鍵的欄位后添加 primary key關鍵字
-
—(2)、在創建表的后面使用:constraints pk_表名_欄位名 primary key(欄位名)
-
–(3)、在創建表后使用 alter table 表名 add constraints pk_表名_欄位名 primary key(欄位名);
- –洗掉主鍵:alter table 表名 drop constraints pk_表名_欄位名
問題2:姓名可以為空,
使用非空約束
-
—(1)、創建表的時候在欄位后面添加not null
-
—(2)、在創建表欄位后使用 constraints ck_表名_欄位名 check(欄位名 is not null) 了解
-
–(3)、在創建表后使用alter table 表名 modify 欄位名 型別 not null;
-
—(4)、修改欄位可以存盤空值:alter table 表名 modify 欄位名 型別 null;
問題3:性別不但可以為空,還可以為其他不知道的字符
使用檢查約束
- —(1)、創建表的時候在欄位后使用 default 值 check(條件),
---------但是會允許空值的出現,并且默認值只有在欄位不宣告的情況下生效
—(2)、在創建表所有欄位后使用:constraints ck_表名_欄位名 check(條件)
—(3)、在創建表后使用:alter table 表名 add constraints ck_表名_欄位名 check(條件)
問題4:年齡可以超過200
–使用檢查約束條件
問題5:qq號一致
- 使用唯一約束
- –(1)、在欄位后直接使用unique關鍵字
–(2)、在所有欄位后使用:constraints uk_表名_欄位名 unique(欄位名)
–(3)、 alter table 表名 add constraints uk_表名_欄位名 unique(欄位名)
–洗掉唯一約束:alter table 表名 drop constraints uk_表名_欄位名
使用外鍵約束
(1)、在欄位后使用 references 參照表表名(參照欄位)
–(2)、在所有欄位后使用 constraints fk_表名_欄位名 foreign key(欄位名) references 參照表名(參照欄位名)
–(3)、在創建表后使用alter table 表名 add constraints fk_表名_欄位名 foreign key(欄位名) references 參照表名(參照欄位名)
–洗掉外鍵 alter table 表名 drop constraints fk_表名_欄位名
在洗掉父表資料的時候需要先洗掉子表資料?
- 解決方式1:先解除主外鍵關聯,然后洗掉資料,再然后添加主外鍵關聯
- 解決方式2:在創建外鍵的時候使用級聯操作,
–在創建外鍵時 on delete cascade
–在創建外鍵時 on delete set null
怎么選取外鍵?
一般將主表的主鍵作為子表的外鍵
外鍵的值能為 not null? 不建議在外鍵后使用非空約束
1、主鍵約束
三種方式主鍵約束方式
1
create table student(
sno number(10) primary key,
sname varchar2(100),
sage number(3),
ssex char(4),
sbirth date,
sqq varchar2(30)
);
2
create table student(
sno number(10),
sname varchar2(100),
sage number(3),
ssex char(4),
sbirth date,
sqq varchar2(30),
constraint pk_student_sno primary key(sno) ---添加主鍵約束
);//加入Java開發交流君樣:756584822一起吹水聊天
3
create table student(
sno number(10),
sname varchar2(100),
sage number(3),
ssex char(4),
sbirth date,
sqq varchar2(30)
);alter table student add constraint pk_student_sno primary key(sno);alter table student drop constraint pk_student_sno;
select * from student for update;
drop table student;
非空約束
三種方式
1
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3),
ssex char(4),
sbirth date,
sqq varchar2(30)
);//加入Java開發交流君樣:756584822一起吹水聊天
2
create table student(
sno number(10) primary key,
sname varchar2(100),
sage number(3),
ssex char(4),
sbirth date,
sqq varchar2(30),
constraints ck_student_sname check(sname is not null)
);
3
reate table student(
sno number(10) primary key,
sname varchar2(100),
sage number(3),
ssex char(4),
sbirth date,
sqq varchar2(30)
);
alter table student add constraint ch_student_sname check(sname is not null);
alter table student drop constraint ch_student_sname
檢查約束
`1
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage<150 and sage>0),
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30)
);//加入Java開發交流君樣:756584822一起吹水聊天
2
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3),
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30),
constraint ch_student_sage check(sage<150 and sage>0)
);
3
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3),
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30)
);
alter table student add constraint ch_student_sage check(sage<150 and sage>0);
alter table student drop constraint ch_student_sage;
唯一約束
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>1 and sage < 200) ,
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30) unique
);//加入Java開發交流君樣:756584822一起吹水聊天
插入倆次報錯
insert into student values(6,'關曉彤003',18,'女',to_date('1998-05-26','yyyy-mm-dd'),'989');
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>1 and sage < 200) ,
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30),
constraint ch_student_sqq unique(sqq)
);
第三種
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>1 and sage < 200) ,
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30)
);//加入Java開發交流君樣:756584822一起吹水聊天
alter table student add constraint un_student_sqq unique(sqq);
外鍵約束
選取–一般選取 父表的主鍵做為字表的外鍵
缺點–無法洗掉班級3的資訊
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>1 and sage < 200) ,
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30) unique,
cno number(10) references clazz(cno) --可以起不同的名,是映射關系
);
//加入Java開發交流君樣:756584822一起吹水聊天
create table clazz (
cno number(10) primary key,
cname varchar(100) not null,
cdesc varchar(200)
);
insert into student values(11,'關曉彤003',18,'女',to_date('1998-05-26','yyyy-mm-dd'),'11',1);
insert into student values(12,'關曉彤003',18,'女',to_date('1998-05-26','yyyy-mm-dd'),'22',1);
insert into student values(13,'關曉彤003',18,'女',to_date('1998-05-26','yyyy-mm-dd'),'333',2);
insert into student values(14,'關曉彤003',18,'女',to_date('1998-05-26','yyyy-mm-dd'),'444',2);
insert into clazz values(1,'java','java');
insert into clazz values(2,'pathon','pathon');
//加入Java開發交流君樣:756584822一起吹水聊天
select * from student s inner join clazz c on s.cno = c.cno;
insert into student values(15,'關曉彤003',18,'女',to_date('1998-05-26','yyyy-mm-dd'),'55',3);
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>1 and sage < 200) ,
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30) unique,
cno number(10),--可以起不同的名,是映射關系
constraint fk_student_cno foreign key(cno) references clazz(cno)
);
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>1 and sage < 200) ,
ssex char(4) check(ssex ='男' or ssex = '女'),
sbirth date,
sqq varchar2(30) unique,
cno number(10)--可以起不同的名,是映射關系
);//加入Java開發交流君樣:756584822一起吹水聊天
alter table student add constraint fk_student_cno foreign key(cno) references clazz(cno);
alter table student drop constraint fk_student_cno;
on delete cascade 洗掉父表時候,字表一起洗掉
delete set null 洗掉父表時候,字表設定為null
alter table student add constraint fk_student_cno foreign key(cno) references clazz(cno) on delete cascade;
alter table student add constraint fk_student_cno foreign key(cno) references clazz(cno) on delete set null;

最新2020整理收集的一些高頻面試題(都整理成檔案),有很多干貨,包含mysql,netty,spring,執行緒,spring cloud、jvm、原始碼、演算法等詳細講解,也有詳細的學習規劃圖,面試題整理等,需要獲取這些內容的朋友請加Q君樣:756584822
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/241378.html
標籤:其他
上一篇:資料恢復基礎和進階教程(二)
下一篇:2020-12-27
