標準的插入語法為:為表中的所有的列插入資料,一 一對應。
使用該語句的時候,欄位列和資料值的數量必須相同。
insert into table_name(column_list) values( value_list );
drop table if exists t_person;
create table t_person
( id int(11) primary key auto_increment,
name varchar(255) not null,
age int(11),
*** char(1), -- 1為男,2為女
address varchar(255),
remark varchar(11)
);
insert into t_person (id,name,age,***,address,remark)
values (1,'大宇',23,'1','蘇州','窮小子')
在插入語句中,其實可以不要按照定義表的時候定義column_list的屬性,可以適當的調整,比如把age放到name之前。
若column_list 為 空,此時值列表value_list中需要為表的每乙個字段指定值,並且指定的順序要與資料表中欄位定義時的順序相同。
若主鍵是可以自增的,那麼插入的資料主鍵即使為null,mysql也會自動為其分配乙個主鍵。
insert into t_person values(null,'小大宇',22,'1','suzhou','mysql lover');
忽略插入的列名稱的優劣
好處:可以簡化我們的sql
壞處:一旦表的結構發生變化,那麼這個sql語句就會報錯。比如表的列出現增加,刪除或者列位置改變。
不一定要為所有的字段插入資料,只向部分欄位中插入值,其它沒有指明插入的字段值將會被插入預設值。沒有指明預設值的字段,將插入null。
先將性別預設設計為男,即字串'1'。
insert into t_person(name,age) values('宇師傅',32);
撥雲見日
如上插入結果所示,因為***的預設值是'1',所以插入的資料預設為'1'。主鍵由mysql自動生成。而address與remark屬性沒有預設值,所以用null來補充。name 與 age 屬性由使用者指明。所以,插入語句可以不用提供所有的字段值,只為需要插入的列提供資料,其它列用其預設值填充,沒有預設值的用null填充。
插入時指定多個值列表values_list,每個值列表用逗號分開。
insert into t_person(name,age) values('小雨',22),('大雨',22),('暴雨',22);
一條插入多條記錄的insert語句等同於多個單行插入的insert語句。
對於效能而言,一條插入多條記錄的insert語句,效率高於多個單行插入的insert語句。
語法規範:
insert into table_name(column_list)
select(column_list2) from table_name2 [ where condition ]
drop table if exists t_info;
create table t_info
( id int(11) primary key auto_increment,
accountname varchar(255) not null,
accountaddress varchar(255) not null
);-- 如果忽略主鍵,那麼會報錯,所以要一一對應,及時用null,也要填上
-- 已經錯了一次了!
insert into t_info values(null,'刀鋒之影','諾克薩斯');
為了把其它表中的資料遷移到t_person 表中,可以執行如下sql。
column_list 與 column_list2必須字段個數相同,資料型別相同(?,好像不一定要完全相同),但是不需要名稱完全相同,就像上面的例子那樣。
查詢出來的值如果能夠順利轉型成insert 語句需要的值,就能插入到資料庫中。
如果乙個字段擁有了預設值,但是又顯示的給其賦值為 null,那麼會插入null。
t_tag表中,articleid列已經設計為預設值為5。執行下面的sql後
-- articleid 預設值為 5
從實際結果來看,即使我們為articleid設計了預設值,但是在第一條sql中顯示的指明了它為null,所以在資料庫中實際將會插入null。若像第二條sql語句一樣,沒有指明此列,更沒有此列的值,那麼就用預設值實際插入某條記錄。
我現在遇到的問題是,使用者傳遞的articleid列資料確實是null,但是sql語句又要像第一條sql那樣的寫法,即在插入的引數列表中,有articleid這樣的列。為了防止插入是空,只能用硬編碼。
insert into t_tag(name,articleid) values ("a",ifnull(# , 5)); 這裡的5是articleid的預設值。
mybatis還有一種辦法就是,使用if test 語句來控制列的存在。 在 articleid 這一列上,加上 if test 控制。
,cost_organization_proportion
語法: update table_name set column1 = a , column2 = b [ where conditon ]
同樣,不增加條件,也是全表更新,一定要加條件。(偷偷的告訴你,我坑了一次公司的資料庫)
update t_person set *** = '0' where id between 2 and 6;
刪除記錄將會刪除一整條記錄,也可以通過範圍刪除,比如新增條件 where id between 3 and 5;
若不加條件,則刪除整張表的資料,慎用!
語法:delete from table_name [where condition]
目錄貼:從頭開始學mysql-------目錄帖 從頭開始學JDK String
目錄 string 倒序 string 建構函式 string equals string 記憶體 string hashcode string startswith string endwith string indexof string lastindexof string substring ...
從頭開始學MFC
一 win32專案設計 類似於console控制台程式,win32視窗程式的入口函式類似於main 函式,稱之為winmain函式 int winapi wwinmain hinstance hinstance,例項控制代碼 hinstance hprevinstance,前乙個例項控制代碼 pws...
從頭開始學Redis
第一章 概述 1.1 redis之簡介 1.2 redis之安裝 第二章 api 2.1 redisapi之簡介 2.2 redisapi之string 2.3 redisapi之hash 2.4 redisapi之list 2.5 redisapi之set 2.6 redisapi之zset 第三...