c 更新mysql資料 MySQL插入更新刪除資料

2021-10-17 13:23:46 字數 3744 閱讀 9687

資料插入

插入完整的行

insert into customers

values(null,

'pep e. lapew',

'100 main street',

'los angeles',

'ca',

'90046',

'usa',

'null',

'null');

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

雖然這種語法很簡單,但並不安全,應該盡量避免使用。編寫insert語句的更安全(不過更煩瑣)的方法如下:

insert into customers(cust_name,

cust_address,

cust_city,

cust_state,

cust_zip,

cust_country,

cust_contact,

cust_email)

values('pep e. lapew',

'100 main street',

'los angeles',

'ca',

'90046',

'usa',

'null',

'null');

此例子完成與前乙個insert語句完全相同的工作,但在表名後的括號裡明確地給出了列名。在插入行時,mysql將用values列表中的相應值填入列表中的對應項。values中的第乙個值對應於第乙個指定的列名。第二個值對應於第二個列名,如此等等。

因為提供了列名,values必須以其指定的次序匹配指定的列名,不一定按各個列出現在實際表中的次序。其優點是,即使表的結構改變,此insert語句仍然能正確工作。你會發現cust_id的null值是不必要的,cust_id列並沒有出現在列表中,所以不需要任何值。

不管使用哪種insert語法,都必須給出values的正確數目。如果不提供列名,則必須給每個表列提供乙個值。如果提供列名,則必須對每個列出的列給出乙個值。如果不這樣,將產生一條錯誤訊息,相應的行插入不成功。

如果表的定義允許,則可以在insert操作中省略某些列。省略的列必須滿足以下某個條件。

該列定義為允許null值(無值或空值)。

在表定義中給出預設值。這表示如果不給出值,將使用默

認值。如果對錶中不允許null值且沒有預設值的列不給出值,則mysql將產生一條錯誤訊息,並且相應的行插入不成功。

插入多個行

insert into customers(cust_name,

cust_address,

cust_city,

cust_state,

cust_zip,

cust_country)

values('pep e. lapew',

'100 main street',

'los angeles',

'ca',

'90046',

'usa'),

('m. martian',

'42 galaxy way',

'new york',

'ny',

'11213',

'usa');

插入檢索出的資料

insert into customers(cust_id,

cust_email,

cust_name,

cust_address,

cust_city,

cust_state,

cust_zip,

cust_country)

select cust_id,

cust_country,

cust_email,

cust_name,

cust_address,

cust_city,

cust_state,

cust_zip,

cust_country

from custnew;

這個例子使用insert select從custnew中將所有資料匯入customers。select語句從custnew檢索出要插入的值,而不是列出它們。select中列出的每個列對應於customers表名後所跟的列表中的每個列。這條語句將插入多少行有賴於custnew表中有多少行。如果這個表為空,則沒有行被插入(也不產生錯誤,因為操作仍然是合

法的)。

更新資料

mysql> update customers

set cust_email='[email protected]'

where cust_id=10005;

query ok, 1 row affected (0.02 sec)

rows matched: 1 changed: 1 warnings: 0

update語句總是以要更新的表的名字開始。在此例子中,要更新的表的名字為customers。set命令用來將新值賦給被更新的列。如這裡所示,set子句設定cust_email列為指定的值;

update語句以where子句結束,它告訴mysql更新哪一行。沒有where子句,mysql將會用這個電子郵件位址更新customers表中所有行。

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

update ignore customers…

刪除資料

mysql> delete from customers

where cust_id=10006;

query ok, 1 row affected (0.01 sec)

delete from要求指定從中刪除資料的表名;

where子句過濾要刪除的行;

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

刪除表的內容而不是表 delete語句從表中刪除行,甚至是刪除表中所有行。但是,delete不刪除表本身。

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

更新和刪除的指導原則

如果省略了where子句,則update或delete將被應用到表中所有的行。換句話說,如果執行update而不帶where子句,則表中每個行都將用新值更新。類似地,如果執行delete語句而不帶where子句,表的所有資料都將被刪除。

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

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

在對update或delete語句使用where子句前,應該先用select進行測試,保證它過濾的是正確的記錄,以防編寫的where子句不正確。

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

MySQL更新資料

更新資料,是指對錶中的記錄進行修改,mysql中,更新資料使用update語句 update 表名 set 欄位名1 值1 欄位名2 值2,where 條件表示式 欄位1,欄位2,用於指定要更新的欄位名稱 值1,值2,表示字段更新的新資料 where條件表示式,可選引數,用於指定更新資料需要滿足的條...

mysql程式更新 更新MySQL資料庫

當搞亂mysql的檔案系統時,你必須停止mysql伺服器.為避免在現場計算機上停機,請使用具有same version of mysql伺服器的備份 虛擬機器.當backup mysql伺服器停止時,將表 我假設.frm,myi等?複製到 var lib mysql backup db backup...

MySQL 批量更新資料

最近做的乙個專案有這個乙個需求,就是記錄每個訊息的檢視數。規則是只要客戶端呼叫訊息列表,就把當前介面返回的資料對應的資料庫裡面的檢視欄位 1。做的是後端給前端一次返回20條資料,那麼就存在,後端需要一次跟新這20條記錄的檢視數。這就是設計到mysql的批量更新操作了。訊息表message idcon...