MySql學習之插入、刪除和更新

來源:互聯網
上載者:User

標籤:多行   記錄   sql   工作   ignore   而且   insert   文法   高度   

一、插入資料

INSERT是用來插入(或添加)行到資料庫表的。插入可

  以用幾種方式使用:
    ? 插入完整的行;
    ? 插入行的一部分;
    ? 插入多行;
    ? 插入某些查詢的結果。

  1、簡單但是不安去

INSERT INTO customersVALUES( NULL,‘person‘);

 此例子插入一個新客戶到customers表。儲存到每個表列中的資料在VALUES子句中給出,對每個列必須提供一個值。如果某個列沒有值(如上面的cust_contact和cust_email列),應該使用NULL值(假定表允許對該列指定空值)。各個列必須以它們在表定義中出現的次序填充。第一列cust_id也為NULL。這是因為每次插入一個新行時,該列由MySQL自動增量。你不想給出一個值(這是MySQL的工作),又不能省略此列(如前所述,必須給出每個列),所以指定一個NULL值(它被MySQL忽略,MySQL在這裡插入下一個可用的cust_id值)。

雖然這種文法很簡單,但並不安全,應該盡量避免使用。上面的SQL語句高度依賴於表中列的定義次序,並且還依賴於其次序容易獲得的資訊。即使可得到這種次序資訊,也不能保證下一次表結構變動後各個列保持完全相同的次序。因此,編寫依賴於特定列次序的SQL語句是很不安全的。如果這樣做,有時難免會出問題。

2、表名後的括弧裡明確地給出了列名

INSERT INTO customers(cust_id,cust_name)VALUES( NULL,‘perso‘);

 注意:不管使用哪種INSERT文法,都必須給出VALUES的正確數目。如果不提供列名,則必須給每個表列提供一個值。如果提供列名,則必須對每個列出的列給出一個值。

使用上述可以省略某些列,但是省略的列必須是可以為空白或有預設值得。

效能:INSERT操作可能很耗時(特別是有很多索引需要更新時),而且它可能降低等待處理的SELECT語句的效能。如果資料檢索是最重要的(通常是這樣),則你可以通過在INSERT和INTO之間添加關鍵字LOW_PRIORITY,指示MySQL降低INSERT語句的優先順序,如下所示:也適用於介紹的UPDATE和DELETE語句。

INSERT LOW_PRIORITY INTO customers(cust_id,cust_name)VALUES( NULL,‘perso‘);

 

3、插入多行

INSERT LOW_PRIORITY INTO customers(cust_id,cust_name)VALUES( NULL,‘perso‘);INSERT LOW_PRIORITY INTO customers(cust_id,cust_name)VALUES( NULL,‘perso‘);

 

INSERT LOW_PRIORITY INTO customers(cust_id,cust_name)VALUES( NULL,‘perso‘),( NULL,‘perso‘);

其中單條INSERT語句有多組值,每組值用一對圓括弧括起來,用逗號分隔。

4、插入檢索出的資料

INSERT INTO custmoerNew(cs_id,cs_name)SELECT cust_id,     cust_name FROM customers;

 

注意:SELECT語句從customers檢索出要插入的值,而不是列出它們。SELECT中列出的每個列對應於custmoerNew表名後所跟的列表中的每個列。這條語句將插入多少行有賴於從customers表中檢索出多少行。如果這個表為空白,則沒有行被插入(也不產生錯誤,因為操作仍然是合法的)。如果這個表確實含有資料,則所有資料將被插入到customerNew。

INSERT SELECT中SELECT語句可包含WHERE子句以過濾插入的資料。

二、更新資料

 使用UPDATE語句

  基本的UPDATE語句由3部分組成,分別是:

    ? 要更新的表;
    ? 列名和它們的新值;

    ? 確定要更新行的過濾條件。

UPDATE customersSET cust_name="立冬"WHERE cust_id=1

 

   注意:IGNORE關鍵字 如果用UPDATE語句更新多行,並且在更新這些行中的一行或多行時出一個現錯誤,則整個UPDATE操作被取消(錯誤發生前更新的所有行被恢複到它們原來的值)。為即使是發生錯誤,也繼續進行更新,可使用IGNORE關鍵字,如下所示:UPDATE IGNORE customers…

為了刪除某個列的值,可設定它為NULL(假如表定義允許NULL值)。

三、刪除操作

DELETE不需要列名或萬用字元。DELETE刪除整行而不是刪除列。為了刪除指定的列,請使用UPDATE語句。

DELETE FROM custmoerNewWHERE cs_id = 5;

 注意:更快的刪除 如果想從表中刪除所有行,不要使用DELETE。可使用TRUNCATE TABLE語句,它完成相同的工作,但速度更快(TRUNCATE實際是刪除原來的表並重新建立一個表,而不是逐行刪除表中的資料)。

下面是許多SQL程式員使用UPDATE或DELETE時所遵循的習慣。

  ? 除非確實打算更新和刪除每一行,否則絕對不要使用不帶WHERE子句的UPDATE或DELETE語句。

  ? 保證每個表都有主鍵,儘可能像WHERE子句那樣使用它(可以指定各主鍵、多個值或值的範圍)。

  ? 在對UPDATE或DELETE語句使用WHERE子句前,應該先用SELECT進行測試,保證它過濾的是正確的記錄,以防編寫的WHERE子句不正確。

  ? 使用強制實施參考完整性的資料庫,這樣MySQL將不允許刪除具有與其他表相關聯的資料的行。

 

MySql學習之插入、刪除和更新

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.