資料庫第5天

2021-07-29 23:26:01 字數 4769 閱讀 5443

--約束(constraint)

--約束就是在資料表上強制執行的一些資料校驗規則

--在執行dml操作時,資料必須符合這些規則,若不符合則無法進行操作

--約束種類(5個)

--1.非空約束  not null      簡稱nn    不能是null值

--2.唯一約束  unique        簡稱uk    不能重複,可以有null

--3.主鍵約束  primary key   簡稱pk    非空且唯一

--4.外來鍵約束  foreign key   簡稱fk    要麼是null,要麼是主表關聯字段內容

--5.檢查約束  check         簡稱ck    根據條件進行約束

--1.非空約束

--建表時新增非空約束

create table  my_emp(

empno number(4),

ename varchar(50) not null,

hiredate date,

salary number(6,2)

);insert into my_emp values(null,'lls',null,null);

--建表之後新增非空約束

delete from my_emp;

alter table my_emp modify(hiredate date not null);

--建表之後取消非空約束

alter table my_emp modify(hiredate date null);

--2.唯一約束

--建立表時新增約束

drop table my_emp;

create table my_emp(

empno number(4) constraint myemp_empno_uk unique,

ename varchar(50),

job varchar(50),

constraint myemp_ename_uk unique(ename,job)

);insert into my_emp values(1,'lls1','pe');

insert into my_emp values(3,'lls2','pe');

select * from my_emp;

--建立表之後新增約束

alter table my_emp add constraint myemp_job_uk unique(job);

--建立表之後取消約束

alter table my_emp drop constraint myemp_job_uk;

--3.主鍵約束

--做主鍵的字段,應該新增主鍵約束

--主鍵的作用是唯一確定一條資料記錄

--主鍵字段選取規則:

--主鍵應對系統無意義的資料,只做唯一標識用,再無其他用途

--永遠不會更新主鍵字段

--主鍵應該自動生成,不要人為干預,oracle序列實現

--主鍵不應該包含動態編號的資料:如:時間戳

--建立表時定義約束

drop table my_emp;

create table my_emp(

-- id number constraint myemp_id_pk primary key,

id number,

empno number(4),

ename varchar(50),

sal number(6,2)

--  ,constraint myemp_empnoid_pk primary key(empno,ename)

);create sequence myemp_seq;

insert into my_emp values(1,2,null,9999.88);

--建立表之後新增約束

alter table my_emp add constraint my_emp_id_pk primary key(id);

--建立表之後取消約束

alter table my_emp drop constraint my_emp_id_pk;

--5.檢查約束

--建立表時新增約束

drop table my_emp;

create table  my_emp(

id number constraint my_emp_pk primary key,

ename varchar(50) not null,

job varchar(50) constraint my_emp_job_uk unique,

sal number(6,2),

constraint my_emp_sal_ck check(sal>2000)

);insert into my_emp values(myemp_seq.nextval,'lls','lrs',2800);

--建表之後新增和刪除約束同 unique/primary key

--5.外來鍵約束

--外來鍵約束條件定義在兩個表的字段或乙個表中兩個不同字段,

--用於保證相關兩個欄位的關係。

--比如:emp表中的deptno列參照dept表的deptno列

--則dept稱為主表(父表),emp稱為從表(子表),外來鍵約束需要加在emp的deptno欄位上

--emp的deptno欄位要麼存放的null,要麼是dept的deptno列的內容

--主表關聯字段必須是唯一字段(unique/primary key)

--外來鍵約束字段取值,受限於主表中某個唯一欄位的取值

--先建立主表,再建立從表/先插入主表,再插入從表

create table my_dept(

deptno number(4) primary key,

dname varchar2(50),

loc varchar2(50)

);insert into my_dept values(10,'開發部','dalian');

insert into my_dept values(20,'財務部','shenyang');

insert into my_dept values(30,'行政部','beijing');

select * from my_dept;

drop table my_emp;

create table my_emp(

empno number(4),

ename varchar2(50),

deptno number(4) constraint my_emp_deptno_fk references my_dept(deptno)

);insert into my_emp values(1001,'lls',10);

insert into my_emp values(1002,'lls2',20);

insert into my_emp values(1003,'lls3',null);

insert into my_emp values(1001,'lls3',40);

--當主表參照列的值被從表參照時,主表的該行記錄不允許被刪除

delete from my_dept where deptno=10;

--也不能修改參照欄位已被參照記錄的值

update my_dept set deptno=40 where deptno=10;

--未參照的字段可以被刪除或修改

delete from my_dept where deptno=30;

--不能直接刪除主表,一般,先刪除從表,再刪除主表

--但是可以通過 cascade constraints 強制刪除主表及關聯外來鍵約束

drop table my_dept cascade constraints;

--cascade 級聯 一併 和 and

--也可以強制刪除主表資料,通過在外鍵約束定義上新增級聯刪除或級聯置空

--級聯刪除 on delete cascade

--在刪除主表記錄時,會關聯刪除從表對應的資料記錄

drop table my_emp;

create table my_emp(

empno number(4),

ename varchar2(50),

deptno number(4),

constraint my_emp_deptno_fk

foreign key(deptno)

references my_dept(deptno)

on delete cascade --級聯刪除

);--級聯置空 on delete set null

--刪除主表的內容時,會將從表中關聯的資料字段置空

drop table my_emp;

create table my_emp(

empno number(4),

ename varchar2(50),

deptno number(4),

constraint my_emp_deptno_fk

foreign key(deptno)

references my_dept(deptno)

on delete set null --級聯置空

);insert into my_emp values(1001,'lls',10);

insert into my_emp values(1002,'lls2',20);

delete from my_dept where deptno=20;

select * from my_emp;

資料庫第5天

二叉樹排序樹 include includetypedef struct nodebstnode 1.待刪除樹沒有孩子 直接刪除free 2.待刪除數有左孩子 子承父業繼承法 3.待刪除數有左右孩子 用前驅或者後繼代替這個數然後在進行刪除 bstnode findmin bstnode bt bst...

第18天 資料庫基礎

資料庫的操作 表的操作 表中的資料 表中資料的查詢 int 整數型別 age int,double 小數型別 score double 5,2 date 日期,只包含年月日,yyyy mm dd datetime 日期,包含年月日時分秒 yyyy mm dd hh mm ss timestamp 時...

資料庫原理之資料庫(修改,刪除)(第8天)

解密昨天的問題,邏輯名稱 指定該檔案的檔名 檔案型別 用來區分當前檔案是資料檔案還是日誌檔案 檔案組 顯示當前檔案的所屬的檔案組 初始化大小 指定該檔案的初始化容量 自動增長 用於設定在檔案的容量不足時。自動增長 路徑 指定檔案存放該檔案的目錄 資料庫檔案 主資料檔案 資料庫的起點,指向資料庫中的其...