SQL點滴系列之插入數據(四)

【SQL從一點一滴分析系列文章】爲實際開發中的點點滴滴的總結,從最最簡單的SQL 查詢 到 綜合分析查詢 在分析 SQL 時,也會同時分析 mybatis 、Hibernate 中的相關操做 點擊查看詳情sql

本節講述 在數據庫中插入數據數據庫

1 插入新的記錄

向表中插入一條新的記錄。 例如 向用戶表中添加一條新的數據,能夠這樣寫mybatis

insert into t_user (user_id,user_name,user_age,user_address,user_phone)
values(32,'小不點',18,"龍城大街一號院",192303023994)
複製代碼

在 MySQL 和DB2 中,能夠選擇一次插入一行,或者一次插入多行ui

insert into t_user (user_id,user_name,user_age,user_address,user_phone)
values
(32,'小不點',18,"龍城大街一號院",192303023994),
(33,'小李子',20,"龍城大街二號院",192303023995)
複製代碼

insert 語句容許在數據庫表中建立新行,在全部類型的數據庫系統中,插入語句的語法徹底相同,固然還有簡便的寫法就是spa

insert into t_user 
values('山西省','小不點',"龍城大街一號院",18,32,192303023994,)
複製代碼

須要注意的是若是沒有列出插入行中的目標字段,則必須插入表中的全部的列。.net

2 插入默認值

定義表時,能夠爲某些列定義默認值,如今要以默認值插入一行,而無需指定各列的值。code

2.1 建立表時指定列的默認值
creat table t_user (user_id default 0)
複製代碼

全部的數據庫系統都支持使用 default 關鍵字顯式的指定某列插入值,有些數據庫還支持其餘的方法來解決這個問題blog

2.2 插入數據時使用默認值
insert into t_user (user_id,user_name,user_age,user_address,user_phone)
values(32,'小不點',18,default,default)
複製代碼

當不須要將表中全部列都插入值時,能夠明確的指定要使用默認值的列名稱,如上述寫 到的 user_address,user_phone 使用的 default開發

Oracle8i 數據庫及其之前版本不支持 default 關鍵字,在 Oracle9 c之前的數據庫中 沒法顯示地插入默認值get

在 MySQL 中,若是表中全部的列都定義了默認值,能夠用一個空的值來解決問題

insert into t_user values()
複製代碼

在這種狀況下,全部的列將設置爲其默認值

在 PostgreSQL 和 SQL Service 中支持 default values 子句

insert into t_user default values 
複製代碼

default values 子句將全部的列設置爲其自己的默認值。

在值列表中的 default 關鍵字爲相應列插入默認值,默認值在建立表時定義,全部的數據庫中均可以使用些關鍵字。

3 使用 NULL 代替默認值

在一個定義了默認值的列插入數據,而且須要無論該列的默認值是什麼,能夠將這個值設置爲 NULL

create table t_user (user_id defalut 0,user_flag varchar(100))
複製代碼

如今插入一條數據

insert into t_user (user_id,user_flag) values (null,"今天心與心的交流了一下")
複製代碼

在上述插入的語句中,明確指定了 null,可是在實際開發中,並非全部的人都知道能夠在 insert 語句中明確指定 null 值,全部經常使用的作法是在插入數據時,不須要插入某列數據時,就不指定某列,如上述的插入 null 能夠修改成

insert into t_user (user_flag) values ("今天心與心的交流了一下")
複製代碼

4 從一個表向另一個表中複製行

將一個表中的數據複製到另外一個表中,第一步 先查詢第一個表中的數據,第二步 複製,在這個過程當中 查詢數據可能複雜也可能簡單,可是最終的結果就是複製 例如 將表 t_user 中的數據複製到表 t_dep_user 表中

insert into t_dep_user (dep_user_name,dep_user_flag)
select user_name,user_flag from t_user 
複製代碼

在這裏使用的方法就是在 insert 語句後面緊跟一個查詢,該查詢用來返回想要獲得的行。

5 從一個表向另外多個表中複製行

與上述不一樣的是,從一個表中查詢出數據,而後將這些數據複製到多具表中,例如將表 t_user 中的數據複製到 t_user_2 、t_user_3 、t_user_4 中:

在 MySQL 、PostgreSQL 和 SQL Server 中還不支持這種多表插入操做

在 Oracle 中能夠這樣寫

insert all 
    when user_age < 18 then 
        into t_user_2(user_name,user_age,user_flag) values (dep_user_name,dep_user_age,dep_user_flag)
    when user_age >60 then 
        into t_user_3(user_name,user_age,user_flag) values (dep_user_name,dep_user_age,dep_user_flag)
    else 
        into t_user_4(user_name,user_age,user_flag) values (dep_user_name,dep_user_age,dep_user_flag)
    select dep_user_name,dep_user_age,dep_user_flag from t_user 
複製代碼

在 DB2 中能夠將全部的目標用 union all 聯接

///先建立表
create table t_user_2(user_name varchar(10),user_age integer check (user_age <18),user_flag varchar(44))
create table t_user_3(user_name varchar(10),user_age integer check (user_age >=18 and user_age <=60),user_flag varchar(44))
create table t_user_4(user_name varchar(10),user_age integer check (user_age >60),user_flag varchar(44))

///插入數據 

insert into (
 select * from t_user_2 union all
 select * from t_user_3 union all
 select * from t_user_4 
) select * from t_user 
複製代碼

6 複製表結構

在實際中,想要建立新表,該表與已有的表的結構設置相同,就能夠考慮只複製表結構 在 DB2 中,使用帶有 like 子句的 create table 命令

create table t_user_2 like t_user
複製代碼

在 Oracle 、MySQL 和 PostgreSQL 中,使用一個不返回任何行的子查詢

create table t_user_2 as select * from t_user where 1=0
複製代碼

在這裏 where 1=0 致使了查詢不返回任何行,這樣最終建立的表就是根據查詢中select 子句中的列名產生的空表


完畢

相關文章
相關標籤/搜索