MySQL(九)插入、更新和刪除


常用的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將不允許刪除具有與其他表相關聯的數據的行)。

 


免責聲明!

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



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