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----------------------
推薦閱讀: