天天看點

列與現有主鍵或unique限制不比對_DML語句 事務 限制

列與現有主鍵或unique限制不比對_DML語句 事務 限制

DML

複制一個測試表格
--複制emp表格, 命名為tmp
create table temp as (select * from emp);
--指派emp表格的表結構, 不複制資料
create table temp2 as (select * from emp where 1=2);
           

新增(insert)

文法 : insert into 表名 [(列1, 列2, ...)] values (值1, 值2, ...);
--向temp2表格插入一條資料
insert into temp2 (empno, ename, job, mgr, hiredate, sal, comm, deptno) 
values (1234, '小明', '學生', 1111, to_date('2008-8-8', 'yyyy-mm-dd'), 3000, 200, 10);
           
當表格的每一列都要插入資料時, 可以省略列名不寫. 需要保證值的順序和列的順序一緻.
insert into temp2 values (1235, '小紅', '學生', 1111, to_date('2008-8-8', 'yyyy-mm-dd'), 3000, 200, 10);
--向表格插入一行資料, 隻有編号和姓名
insert into temp2 (empno, ename) values (1236, '小李');
           

修改(update)

文法 : update 表名 set 列1=值1[, 列2=值2...][where 條件]
--将10部門員工的工資調高10%.
update temp2 set sal=sal*1.1 where deptno=10;
           

删除(delete)

文法 : delete [from] 表名 [where 條件];
--删除編号為1234的員工資訊
delete from temp2 where empno=1234;
           

事務

事務(Transaction)是一個操作序列。這些操作要麼都做, 要麼都不做, 是一個不可分割的工作單元, 是資料庫環境中的最小工作單元。

事務的特性(ACID):

Atomicity(原子性)

原子性是指事務包含的所有操作要麼全部成功, 要麼全部失敗復原, 是以事務的操作如果成功就必須要完全應用到資料庫, 如果操作失敗則不能對資料庫有任何影響.

Consistency(一緻性)

一緻性是指事務必須使資料庫從一個一緻性狀态變換到另一個一緻性狀态, 也就是說一個事務執行之前和執行之後都必須處于一緻性狀态.

Isolation(隔離性)

隔離性是當多個使用者并發通路資料庫時, 比如操作同一張表時, 資料庫為每一個使用者開啟的事務, 不能被其他事務的操作所幹擾, 多個并發事務之間要互相隔離.

Durability(持久性)

持久性是指一個事務一旦被送出了, 那麼對資料庫中的資料的改變就是永久性的, 即便是在資料庫系統遇到故障的情況下也不會丢失送出事務的操作.

事務的送出和復原

commit:

送出, 在確定事務執行成功時, 應該将事務進行送出. 送出後, 資料被永久儲存, 不能進行復原.

rollback:

復原, 當事務執行出現故障時, 應該進行事務的復原操作, 本次事務的所有操作将被還原, 保證資料庫的一緻性.

Oracle中的資料類型

字元類型

varchar2:可變長度的字元串, 效率較低

char:不可變長度的字元串, 效率較高

數值類型

number, 既可以表示整數, 也可以表示浮點數

日期時間類型

date, 存放日期和時間

timestamp, 比date更精确的日期時間類型

lob類型

blob, 用于存放二進制資料, 可以用于存放檔案, 圖檔, 音頻, 視訊等二進制資料.

clob, 用于存放大文本資訊.

建立表格

--建立學生表, 字段包含學号、姓名、性别,年齡、入學日期、班級,email等資訊
create table student (
       sno number(4),
       sname varchar2(12),
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50)
);
           

修改表格

添加字段

alter table 表名 add 字段名 資料類型;
           

修改字段的類型

alter table 表名 modify 字段名 資料類型;
           

重命名字段

alter table 表名 rename column 舊字段名 to 新字段名;
           

删除字段

alter table 表名 drop column 字段名;
           

重命名表格

alter table 表名 rename to 新名字;
           

删除表格

drop table 表名;
           

表格的限制

constraints, 限制, 用于對表格的資料進行限制, 保證表格資料的完整性和一緻性.

文法 : constraints 限制名 限制類型 (限制字段)

主鍵限制(primary key)

主鍵是用于唯一辨別一條記錄的字段, 必須保證既非空又唯一.

一張表中, 隻能有一個主鍵.

在表級别定義主鍵限制, 對限制統一管理

create table student (
       sno number(4),
       sname varchar2(12),
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50),
 constraints pk_student primary key (sno)
);
           

表級别簡化版定義主鍵限制, 省略限制名

create table student (
       sno number(4),
       sname varchar2(12),
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50),
 primary key (sno)
);
           

在列級别定義主鍵限制

create table student (
       sno number(4) constraints pk_student primary key,
       sname varchar2(12),
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50)
);
           

在列級别簡化版定義主鍵限制

create table student (
       sno number(4) primary key,
       sname varchar2(12),
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50)
);
           

聯合主鍵, 隻能在表級别定義, 因為一個表隻能有一個主鍵

create table student (
       sno number(4),
       sname varchar2(12),
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50),
 constraints pk_student primary key (sno, email)
);
           

非空限制(not null)

字段值不允許為空, 非空限制隻能在列級别定義

create table student (
       sno number(4),
       sname varchar2(12) not null,
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50),
 constraints pk_student primary key (sno)
);
           

唯一限制(unique)

要求字段值不能重複.

create table student (
       sno number(4),
       sname varchar2(12) not null,
       gender char(3),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50), -- unique,
 constraints pk_student primary key (sno),
 constraints uk_student_email unique (email)
);
           

檢查限制(check)

用于限定字段值的取值範圍

create table student (
       sno number(4),
       sname varchar2(12) not null,
       gender char(3) check (gender in ('男', '女')),
       age number(3),
       sdate date,
       clazz varchar2(20),
       email varchar2(50),
 constraints pk_student primary key (sno),
 constraints uk_student_email unique (email),
 constraints ck_student_age check (age between 18 and 30)
);
           

外鍵限制(foreign key)

用于限制表和表之間的關系. 兩張表的依賴關系. 以emp表和dept表為例, emp表依賴dept表. 是以, dept表可以被稱之為主表, emp表被稱之為從表.

注意:

Ø 主表中, 隻有主鍵或者唯一鍵才可以被從表參考.

Ø 從表中作為外鍵的列, 類型一定要和主表的被參考列相同.

外鍵中的删除問題:

Ø 主表中的資料在被引用時, 無法直接删除, 預設情況下, 需要先删除從表中對應的所有資料, 再删除主表中的資料.

Ø 可以在定義外鍵時, 設定删除政策為cascade(級聯), 表示當删除主表的資訊時, 同時删除從表中所有關聯的資訊

Ø 可以在定義外鍵時, 設定删除政策為set null(設空), 表示當删除主表的資訊時, 将從表中的相關資料設定為null