常用的SQL語句,除了select用於查詢,還有insert、update、delete等。
一、insert
insert:用來插入(或添加)行到數據庫中,常見方式有以下幾種:
①插入完整的行;
②插入行的一部分;
③插入多行;
④插入某些查詢的結果;
1、插入完整的行
例如:insert into usertable
values(null,
'zhangsan',
'25',
'1992-05-20',
null,
null);
這條SQL語句插入一條新的個人信息到usertable表,存儲在每個表列中的數據在values中給出,對每個列必須提供一個值,如果某個列沒有值,應使用null(假定表允許對該項指定空值);
各個列必須以它們在表定義中出現的次序填充;缺點在於;高度依賴表中列的定義次序,如果表結構出現變動,難免出現問題。
更安全的方法如下(相對比較麻煩):
例如:insert into usertable(user_id,
user_name,
user_year,
user_birthday,
user_address,
user_email)
values(null,
'zhangsan',
'25',
'1992-05-20',
null,
null);
這條SQL語句與上面的SQL語句完成同樣的工作,但給出了列名,valuse必須以指定的次序匹配指定的列名,不一定按照列出現在表中的實際次序;優點是:即使表結構改變,此insert語句仍然正確工作。
insert使用注意事項:
①無論使用哪種insert語法,都必須給出values的正確數目,如果不提供列名,則必須給每個表列提供一個值;如果提供列名,則必須對每個列出的列給出一個值;
②如果表定義允許,則可以在insert操作中省略某些列,列必須滿足這兩個條件(1.改列定義為允許null值;2.在表定義中給出默認值【如果不給出值,則使用默認值】);
③數據庫被多個用戶訪問,一般檢索是最重要的,可以通過在insert和into中間添加關鍵字low priority,指示MySQL降低insert語句的優先級(同樣適用於update和delete語句);
2、插入多個行
例如:insert into usertable(user_id,
user_name,
user_year,
user_birthday,
user_address,
user_email)
values(null,
'zhangsan',
'25',
'1992-05-20',
null,
null);
或者只要每條insert語句中的列名(和次序)相同,可以只在insert語句后面輸入一次列名就可以(單個insert語句由多組值,每組值用一堆圓括號包含,用逗號隔開)
PS:MYSQL用單條insert語句處理多個插入比使用多個insert語句快。
3、插入檢索出的數據
例如:insert into usertable(user_id,
user_name,
user_year,
user_birthday,
user_address,
user_email)
select user_id,
user_name,
user_year,
user_birthday,
user_adress,
user_email
from newtablebase;
這條SQL語句中,select從newtablebase表中檢索出要插入的數據,select列出的每個列對應tablebase表名后所跟的列表中的每個列。
PS:insert select語句中,不一定要求列名匹配,實際上select中的第一列將用來填充表列中指定的第一列;insert select語句中select語句可包含where子句過濾插入的數據。
二、更新數據
如果要更新(修改)表中的數據,可以使用update語句,有以下兩種方法:
①更新表中特定行;
②更新表中所有行;
update語句由三部分構成:
①要更新的表;
②列名和它們的新值;
③確定要更新行的過濾條件;
例如:update usertable
set user_email = '3033310371@qq.com'
where user_id = '10086';
這條SQL語句中,要更新的表名為usertable,set命令用來將新值賦給被更新的列user_email;
PS:update語句總是以要更新的表的名字開始,以where子句結束,它告訴MySQL更新哪一行。
更新多個列:update usertable
set user_name = 'zhangsan',
user_email = '3033310371@qq.com'
where user_id = '10086';
更新多個列時,只需要使用單個set命令,每個“列=值”對之間用逗號分隔(最后一列不用逗號)。
PS:如果用update更新多個行,且更新中一行或多行出現錯誤,則update操作將被取消(錯誤發生前執行的動作將被回滾到最初狀態。即已更新的被恢復原來的值);
如果希望出錯誤,更新繼續執行,可以使用ignore關鍵字:update ignore tablebase......
如果希望刪除一個值,可以將它設置為null(如果表定義允許null值),例子如下:
update usertable
set user_email = null
where user_id = '10086';
三、刪除數據
從一個表匯總刪除數據,使用delete語句;有以下兩種方式:
①從表中刪除特定行;
②從表中刪除所有行;
例如:delete from usertable where user_id = '10086';
這條SQL語句中,delete from要求指定從中刪除數據的表名,where子句過濾要刪除的行。
PS:delete不需要列名或者通配符,delete刪除整行而不是整列,為了刪除指定的列,可使用update語句(delete從表中刪除行甚至表中所有行,但不刪除表本身);
如果想刪除表中所有行,可使用truncate table語句,它的執行效率比delete更快(truncate實際上是刪除原來表並重新新建一個表,而不是逐行刪除表中數據)。
更新和刪除規則:
①除非確實打算更新或刪除每一行,否則決不能使用不帶where子句的update或delete語句;
②保證每個表都有主鍵,盡可能像where子句那樣使用;
③對update和delete語句使用where子句前,最好先select進行測試,保證過濾的數據是正確的;
④使用強制實施引用完整性的數據庫(這樣MySQL將不允許刪除具有與其他表相關聯的數據的行)。