oracle插入,更新,刪除數據


插入,更新,刪除數據

oracle提供了功能豐富的數據庫管理語句
包括有效的向數據庫中插入數據的insert語句
更新數據的update語句
以及當數據不再使用時刪除數據的delete語句

更改數據之后一定要使用提交操作,否則只保存在內存中,別人無法查看到更改

  • Rollback;
    • 回滾
  • commit;
    • 提交

1插入數據

准備表

SQL> create table person(
  2  id number(9) not null,
  3  name varchar2(40) not null,
  4  age number(9) not null,
  5  info varchar2(50) null,
  6  primary key(id)
  7  );
表已創建。

1.1表的所有字段插入數據

向表中所有宇段插入值的方法有兩種

  • 一種是指定所有字段名 ,
  • 另一種是完全不指定字段名

語法

INSERT INTO table_name (column_list) VALUES (value_list);

1指定所有字段名

插入數據時,不需要按照表定義的順序插入,只要保證值的順序與列宇段的順序相同就可以

SQL> insert into person(id,name,age,info)
  2  values(1,'Green',21,'lawyer');

已創建 1 行。

2完全不指定 字段名

值列表為每一個字段列指定插入值,並且這些值的順序必須和person表中字段定義的順序相同

SQL> insert into person
  2  values(2,'Mary',24,'Musician');

已創建 1 行。

當需要插入空值時,可以使用null關鍵字或者''

SQL> insert into person
  2  values(3,'meditation',24,null);

已創建 1 行。

1.2為表的指定字段插入數據

在person表中,插入一條新記錄,name值為Willam,age為20

SQL> insert into person(id,name,age)
  2  values(4,'Willam',20);

已創建 1 行。

1.3同時插入多行數據

SQL> insert into person(id,name,age)
  2  select 5,'Harry',21 from dual
  3  union all
  4  select 6,'harriet',19 from dual;

已創建2行。

1.4將查詢結果插入到數據中

語法

insert into table_name1(column_list1)
select (column_list2) from table_name2 where (condition)
  • table_name1 指定待插入數據的表
  • column_list1 指定待插入表中要插入數據的那些列
  • table_name2 指定插入數據是從哪個表中查詢出來的
  • column_list2 指定數據來源表的查詢列.該列表必須和column_list1 列表中的字段個數相同,數據類型相同
  • condition 指定 SELECT 句的查詢條件

准備person_old表

SQL> create table person_old(
  2  id number(9) not null,
  3  name varchar2(40) not null,
  4  age number(9) not null,
  5  info varchar2(50) null,
  6  primary key(id)
  7  );
表已創建。

插入數據

SQL> insert into person_old(id,name,age)
  2  select 7,'Evans',23 from dual
  3  union all
  4  select 8,'Dale',29 from dual;

已創建2行。

將person_old中的兩條數據添加到person中

SQL> insert into person(id,name,age)
  2  select id,name,age from person_old;

已創建2行。
SQL> select id,name,age from person;

        ID NAME               AGE
---------- ----------- ----------
         1 Green               21
         2 Mary                24
         3 meditation          24
         4 Willam              20
         5 Harry               21
         6 harriet             19
         7 Evans               23
         8 Dale                29
  • 從結果可以看到,person表中多了兩條記錄
  • id列一般是自增的主鍵,在插入時要保證該字段的唯一性
  • 如果不能確定,可以插入的時候忽略該字段,只插入其他字段的值

2更新數據

oracle中使用update語句更新表中的記錄,
可以更新特定的行,或者更新所有的行

語法

update table_name
set column_name1=value1,...column_namen=valuen
where (condition);

更新id值為6的記錄,將age字段改為25,將name字段改為LiMing

SQL> update person
  2  set age=25,name='LiMing'
  3  where id=6;

已更新 1 行。

更新age值為19~23的記錄,將info字段值改為student

SQL> update person
  2  set info='student'
  3  where age between 19 and 23;

已更新4行。
SQL> select * from person;

        ID NAME                 AGE INFO
---------- ------------- ---------- ----
         1 Green                 21 student
         2 Mary                  24 Musician
         3 meditation            24
         4 Willam                20 student
         5 Harry                 21 student
         6 LiMing                25
         7 Evans                 23 student
         8 Dale                  29

2.2聯表更新

將person表和person_old表中id列相同的數據的 info列改為person表的info列

SQL> select * from person_old;

        ID NAME                    AGE INFO
---------- ---------------- ---------- -----------
         7 Evans                    23
         8 Dale                     29

update

SQL> update person_old p1
  2  set info=(select info from person p2 where p1.id=p2.id)
  3  where exists(select 1 from person p2 where p1.id=p2.id);

已更新2行。
SQL> select id,name,info from person_old;

        ID NAME          INFO
---------- ------------- ---------
         7 Evans         student
         8 Dale

SQL>

merge into

將person表和person_old表中id列相同的數據的 info列改為person表的info列

SQL> Rollback;
回退已完成。

SQL> select * from person_old;
        ID NAME           AGE INFO
---------- ------- ---------- ------
         7 Evans           23
         8 Dale            29
SQL> merge into person_old p1
  2  using person p2
  3  on(p1.id=p2.id)
  4  when matched then
  5    update
  6    set
  7    p1.info=p2.info;

2 行已合並。
SQL> select * from person_old;

        ID NAME        AGE INFO
---------- -------- ------ ----
         7 Evans        23 student
         8 Dale         29
SQL>
語句 描述
merge into: 關鍵字,后跟主表表名
using: 用,后跟源數據,可以是一個表,也可以是一個結果集
on: 關鍵字, 后面括號內跟關聯條件;
when matched then: 即當滿足on后條件時,執行更新操作,即后面跟的update;
when not matched then: 即當on后的條件不滿足,要執行的操作

3刪除數據

delete語句允許使用where子句指定刪除條件

3.1刪除單行數據

SQL> delete from person
  2  where id=7;
已刪除 1 行。
SQL> select * from person where id=7;
未選定行

3.2刪除多行數據

SQL> delete from person
  2  where info is null;
已刪除3行。
SQL> select * from person where info is null;
未選定行
SQL> delete from person
  2  where id between 4 and 8;
已刪除2行。
SQL> select * from person
  2  where id=4;
未選定行

3.3刪除全部數據

SQL> select count(1) from person;
  COUNT(1)
----------
         2
SQL> delete from person;
已刪除2行。
SQL> select count(1) from person;
  COUNT(1)
----------
         0

3.4truncate清除表中所有數據

SQL> Rollback;
回退已完成。

SQL> select count(1) from person;
  COUNT(1)
----------
         8
SQL> truncate table person;
表被截斷。

SQL> select count(1) from person;
  COUNT(1)
----------
         0

3.5truncate和delete區別

  1. delete是DML語句,需要提交; truncate 是DDL語句,不需要提交;
  2. delete可以刪除一行或者多行數據,truncate是針對全表數據;
  3. 當數據量比較大時,delete會比較慢,因為要寫日志,方便數據恢復.truncate則很快,因為只寫少量日志,因此也難以恢復;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM