標籤:多行 記錄 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學習之插入、刪除和更新