MySQL資料庫應用總結(十)—MySQL資料庫數據的插入、更新和刪除操作

SQL語法預覽:

為表所有欄位插入數據; 【insert into 表名(欄位名1,欄位名2,…) values (值1,值2,…);】

為表指定欄位插入數據; 【insert into 表名(指定欄位名1,指定欄位名2,…) values (值1,值2,…);】

為表同時插入多條數據; 【insert into 表名(欄位名1,欄位名2,…) values (值1,值2,…),(值1,值2,…),…;】

將查詢結果插入數據表中:【insert into 表名1 (表1欄位名1,表1欄位名2,…) select (表2欄位名1,表2欄位名2,…) from 表名2 where 查詢條件;】

更新表數據:【update 表名 set 欄位名1=值1, 欄位名2=值2, …欄位名n=值n where

(更新條件);刪除表數據:【delete from 表名 where 刪除條件;】

詳解:

一、 插入數據

在MySQL中,可以使用insert語句向資料庫表中插入數據記錄,插入數據的方式有:插入完整的記錄、插入記錄的一部分、插入另一個查詢結果,下面將一一進行講解!

1. 為表的所有欄位插入數據

語法結構:insert into 表名(欄位名1,欄位名2,…) values (值1,值2,…);

注意:使用該語句時欄位列和數據值的數量必須相同,本章將以資料庫db_data下表tb_person為例進行介紹,創建語句如下:

命令語句:

查看當前所有資料庫show databases;

創建資料庫:create database db_data;

選擇資料庫:use db_data;

創建包含欄位表:create table tb_person(id int(11) unsigned not null auto_increment,name char(40) not null default , age int(11) not null default 0,info char(50) null,primary key(id));

執行結果如下:

向表中的所有欄位插入值的方法有兩種:一種是指定所有欄位名,另一種是完全不指定欄位名。

案例:在tb_person表中插入一條新紀錄,id值為1,name值為Green,age值為30,info值為Lawyer。

命令語句:

insert into tb_person(id,name,age,info) values(1,Green,30,Lawyer);

執行插入操作之前,使用select語句查看錶中數據,結果顯示當前表為空,沒有數據,接下來執行插入操作,結果如下:

可以看到插入記錄成功。在插入數據時。指定了tb_person表的所有欄位,因此將為每一個欄位插入新的值。

insert語句後面的列名稱順序可以不是person表定義時的順序。即插入數據時,不需要按照表定義的順序插入,只要保證值的順序與欄位的順序相同就可以

使用insert插入數據時,允許欄位名為空,此時,需要為表的每一個欄位制定值,並且值的順序必須和數據表中定義欄位時的順序相同

案例:在tb_person表中分別插入兩條新紀錄,id值為2和3,name值為Suse和Mary,age值為29和28,info值為Dancer和Musician。

命令語句:

insert into tb_person(age,id,name,info) values(29,2,Suse,Dancer);

insert into tb_person values(3,Mary,28,Musician);

執行結果如下:

提示:雖然使用insert插入數據時可以忽略插入數據的列名稱,但是values關鍵字後面的值不僅要求完整並且順序必須和定義表時的順序相同。如果表的結構被修改,如對錶進行增加、刪除或者位置改變等操作,則用這種方式插入數據時的順序也要改變。如果指定列名稱,則不會受到表結構改變的影響。

2. 為表的指定欄位插入數據

為表的指定欄位插入數據,就是用insert語句為部分欄位插入值,而其他欄位的值為定義表時的默認值。

案例:在tb_person表中插入一條新紀錄, name值為Tom,age值為27。

命令語句:

insert into tb_person(name,age) values (Tom,27);

執行結果:

查詢結果顯示,id欄位自動添加了一個整數值4,在這裡,id欄位為表的主鍵,不能為空,系統會自動為該欄位插入自增的序列值。在插入記錄時,如果某些欄位沒有指定插入值,MySQL將插入定義欄位時的默認值。

在本例插入語句中,每有指定info欄位的值,查詢結果顯示,info欄位在定義時默認為null,因此系統自動為該欄位插入空值。

提示:要保證每個插入值的類型和對應列的數據類型匹配,如果類型不同,將無法插入,並且會產生錯誤。

3. 為表同時插入多條記錄

用insert語句可以同時為數據表中插入多條記錄,插入時指定多個值列表,每個值列表之間用逗號隔開,基本語法格式如下:

語法結構:insert into 表名(欄位名1,欄位名2,…) values (值1,值2,…),(值1,值2,…),…;

案例:在tb_person表中,為欄位name、age和info指定插入值,同時插入3條記錄,SQL語句如下:

命令語句:

insert into tb_person(name,age,info) values(Evans,26,Secretary),(Dale,23,Cook),(Edison,25,Singer);

執行結果:

由結果可以看到,inset語句執行後,tb_person表中添加了3條記錄,其中name、age和info欄位分別為指定值,id欄位為MySQL添加的默認的自增值。

使用insert語句同時插入多條記錄時,MySQL會返回一些在執行單行插入時沒有的額外信息,這些信息包含數的字元串的意思分別如下:

  • record:表明插入的記錄條數。
  • duplicates:表明插入時被忽略的記錄,原因可能是這些記錄包含了重要的主鍵值。
  • warnings:表明有問題的數據值,例如發生哦數據類型轉換。

案例:在數據表tb_person,不指定插入欄位,同時插入兩條記錄,SQL語句如下:

命令語句:

insert into tb_person values(8,Harry,21,Magician),(null Harriet,23,Pianist);

執行結果:

由結果可以看到,insert語句執行後,tb_person表中添加了2條記錄。表名tb_person的後面沒有指定插入欄位列表,因此values關鍵字後面的多個值列表都要為每條記錄的每一個欄位指定插入值,並且這些值的順序必須和tb_person表中定義欄位時的順序相同。帶有auto_increment屬性的id欄位插入null值,系統會自動為該欄位插入唯一的自增編號。

提示:一個同時插入多行記錄的insert語句等同於多個單行插入記錄的insert語句,但是一次插入多行記錄的insert語句在處理時效率更高。所以在插入多條記錄時,最好選擇使用一次插入多行記錄的方式插入。

4. 將查詢結果插入表中

insert語句還可以將select語句查詢的結果插入到表中。如果想要從另一個表中合併個人信息到tb_person表,不需要逐個輸入一條記錄的值,只需要使用一條insert語句和一條select語句組合的語句,即可快速地從一個或多個表中 向另一個表中插入多個記錄。

基本語法格式如下:

語法結構:insert into 表名1 (表1欄位名1,表1欄位名2,…) select (表2欄位名1,表2欄位名2,…) from 表名2 where 查詢條件;

先創建表tb_person2,並插入兩條記錄:

命令語句:

create table tb_person2(id int(11) unsigned not null auto_increment,name char(40) not null default , age int(11) not null default 0,info char(50) null,primary key(id));

insert into tb_person2 values (10,Halen,20,Student),(11,Beckham,32,Police);

執行結果如下:

案例:從表tb_person2中查詢所有記錄,並將其插入到表tb_person中,使用SQL語句如下:

命令語句:

insert into tb_person (id,name,age,info) select id,name,age,info from tb_person2;

執行結果:

由結果可以看到,insert語句執行後,tb_person表中多了兩條記錄,這兩條記錄和tb_person2表中的記錄完全相同,數據轉移成功。這裡的id欄位為自增的主鍵,在插入的時候要保證該欄位值的唯一性,如果不能確定,可以在插入的時候忽略該欄位,只插入其他欄位的值。

提示:這個例子中使用的tb_person2表和tb_person表的定義相同,事實上MySQL不關心select返回的列名,它根據列的位置進行插入select的第1列對應待插入表的第1列,第2列對應待插入表的第2列,等等

二、 更新數據

在MySQL中,可以使用update語句更新表中的記錄,可以更新特定的行或者同時更新所有的行。基本語法結構如下:

語法結構:update 表名 set 欄位名1=值1, 欄位名2=值2, …欄位名n=值n where (更新條件);

1. 更新一條記錄

案例:在tb_person表中,更新id值為11的記錄,age欄位值改為11,name欄位改名為Hanmeimei,更新操作執行前可以使用select語句查看當前的數據,使用的SQL語句如下:

命令語句:

select * from tb_person where id=11;

update tb_person set age=11,name=Hanmeimei where id=11;

執行結果如下:

由結果可以看到,id等於11的記錄中的name和age欄位的值已經被成功修改指定值。

提示:update語句以where語句結束,通過where子句指定被更新的記錄所需要滿足的條件,如果忽略where子句,MySQL將更新表中所有的行

2. 更新多條記錄

案例:在tb_person表中,更新age欄位值為6到25的記錄,將info欄位值改為Student,更新操作執行前可以使用select語句查看當前的數據,使用的SQL語句如下:

命令語句:

select * from tb_person where age between 6 and 25;

update tb_person set info=Student where age between 6 and 25;

執行結果如下:

由結果可以看到,update語句執行後,成功將表中符合條件的6條記錄的info欄位值都改為student。

三、 刪除數據

從數據表中刪除數據使用delete語句,delete語句允許用where子句指定刪除條件。delete語句的基本語法格式如下:刪除沒有關聯的數據表

語法結構: delete from 表名 where 刪除條件;

1. 刪除一條記錄

案例:刪除表tb_person中id=11的記錄,使用SQL語句如下:

命令語句:

select * from tb_person where id=11;

delete from tb_person where id=11;

執行結果:

查詢結果為空,說明刪除成功。

2. 刪除多條記錄

案例:刪除表tb_person中age在6到25之間的記錄,使用SQL語句如下:

命令語句:

select * from tb_person where age between 6 and 25;

delete from tb_person where age between 6 and 25;

執行結果:

查詢結果為空,說明刪除成功。

3. 刪除所有記錄

案例:刪除表tb_person2中所有記錄,使用SQL語句如下:

命令語句:

select * from tb_person2;

delete from tb_person2;

執行結果:

查詢結果為空,說明刪除成功。

提示:如果向刪除表中的所有記錄,還可以使用truncate table 語句,truncate可以直接是年初原來的表並重新創建一個表,其語法結構為truncate table 表名。truncate是直接刪除表而不是刪除記錄,因此執行速度比delete語句快。

本文結束,希望對大家有所幫助!

SQL語法總結:

為表所有欄位插入數據; 【insert into 表名(欄位名1,欄位名2,…)

values (值1,值2,…);】

為表指定欄位插入數據; 【insert into 表名(指定欄位名1,指定欄位名2,…)

values (值1,值2,…);】

為表同時插入多條數據; 【insert into 表名(欄位名1,欄位名2,…)

values (值1,值2,…),(值1,值2,…),…;】

將查詢結果插入數據表中:【insert into 表名1 (表1欄位名1,表1欄位名2,…)

select (表2欄位名1,表2欄位名2,…) from 表名2 where 查詢條件;】

更新表數據:【update 表名 set 欄位名1=值1, 欄位名2=值2, …欄位名n=值n where (更新條件);刪除表數據:【delete from 表名 where 刪除條件;】

-------------------------------end----------------------


推薦閱讀:

TAG:MySQL入門 | Oracle資料庫 | 資料庫 |