SQL基礎——DML(插入、修改和刪除)

孫冠俊發表於2020-11-15

SQL基礎——DML(插入、修改和刪除)

DML 是資料操作語言,可以對資料進行插入、修改、查詢 和 刪除。因為查詢所涉及到的知識點有點繁雜,因此之後特意單獨拿出來講下,現在我們來講下插入(insert),修改(update),刪除(delete)。

還是以student 表為例。

先建立表格,點左上角的齒輪(execute)來執行,就可以建立好表格了

create table student(
	s_id number(4)  primary key ,	
    s_name varchar2(5 char)  not null,
    s_gender  char(3)  check(s_gender in ('男','女')),
    s_age  number(2)   check(s_age between 15 and 45),
    s_date date,
    s_dept  varchar2(20) default('計算機系')
)

插入 insert

我們先來插入兩條資料。注意:我們要輸入字串的時候要用單引號引起來。

insert into student values (1001,'張三','男',20,sysdate,'數學系');
insert into student values (1002,'小紅','女',18,sysdate,'計算機系');

插入資料的語法是 insert into 表名 values(欄位的值列表);所謂欄位值列表就是我們建立表格給出的表頭的值,所以傳的值列表要滿足建立表時的資料型別和約束條件。然後點選小齒輪就新增進去了。這是可以點選齒輪旁邊的按鈕,一個綠色的commit提交按鈕,一個是紅色的rollback回滾按鈕。回滾後資料就回到沒有新增的狀態。

也可以指定欄位賦值。如insert into 表名(欄位列表) values(欄位列表對應的值列表);

insert  into student(s_id,s_name,s_age) values(1003,'王五'19); 

這樣也可以新增表格,沒有新增的顯示為空值,但因為s_dept有預設值,所以s_dept顯示 計算機系。需要注意的是主鍵primary 和 notnull約束的欄位列以及與其他表格有外來鍵約束的欄位列 是必須要填寫的,否則會報錯。

插入之後可以用**select * from student;**用來檢視所有的資料。

修改update

插入好資料後,我們總會遇到資料需要修改更新的情況,這時就需要使用update來解決了。

update 表名 set 欄位名=欄位值,欄位名=欄位值… where 滿足條件才修改;

沒有where 條件就是所有的資料都更改。

下面我們把張三的年齡改為21。

update student set s_age = 21 where s_name = '張三';

這樣就把張三的成績改好了,之後點下齒輪執行,然後在輸入 **select * from student;**就可以看改好的資料了。

刪除 delete

這裡的刪除是刪除表格的資料,和我們之前的drop(刪除表)還是有區別的。

我們可以刪除整張表的資料,也可以刪除某個欄位所在行的資料。用delete from 表名 where 滿足條件的刪除來刪除資料。

我們先來刪除‘王五’所在行的資料。

delete from student where s_name='王五';

也可以直接刪除student表的資料

delete from student;

有主從表約束

上面的是一般表格的刪除,但有些表格是通過主外來鍵約束,有主從表關係的,這種就不可以隨便刪除主表了。

首先,刪除的資料是主表中沒有被從表中資料關聯的主表資料,可以直接刪除。

其次,刪除的資料是主表中被從表資料引用的主表資料時候,不能刪除,3中處理解決方案

1>預設先刪除從表中引用了當前主表的從表資料,再刪除主表中當前資料。

2>直接刪除主表中資料的同時,為從表中引用了當前主表的資料外來鍵欄位設定為null 。 on delete set null

3>直接刪除主表中資料的同時,級聯刪除從表中引用了當前主表資料的那些從表資料。on delete cascade

create table clazz(
       cid number(5) primary key,
       cname varchar2(15)
);

create table student1(
       sid number(5) primary key,
       sname varchar2(15),
       sage number(3),
       --外來鍵約束  
       cid number(5) constraint fk_cid  references clazz(cid) on delete cascade --on delete set null
)      

相關文章