序言
資料表的插入、更新、刪除非常簡單,但是簡單的也要學習,細節決定成敗。
---WH
一、插入資料
格式:INSERT INTO 表名(欄位名...)VALUES(值...);
建立環境
使用person表
CREATE TABLE person
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT '',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL,
PRIMARY KEY(id)
);
1.1、為表的所有欄位插入資料
方式一:INSERT INTO person(id,name,age,info) VALUES(1,'Green',21,'Lawyer');
方式二:INSERT INTO person VALUES(2,'aaa',18,'MAN');
方式三:INSERT INTO person (name,id,age,info) VALUES('bbb',3,17,'haha');
總結:
方式一和方式三說明插入資料時可以不用按照表結構中的順序來,只要給的值與前面欄位名一一對應即可,
方式二表明可以忽略欄位名,但是其值必須跟表結構中的欄位順序一樣。
使用這三種方式去為所有欄位插入資料都可以。
1.2、為表的指定欄位插入資料
在有時候,給表中插入記錄行時,欄位值不一定要全部都需要手動插入,可能id自動增長的,也有時某個欄位使用預設值,不用插入值也行,這時候就需要為表指定欄位來插入資料了。
INSERT INTO person(name,age,info) VALUES('Willam',20,'sports man');
這裡就缺少了id欄位,但是id欄位是AUTO_INCREMENT,不用我們手動插入值
1.3、同時插入多條記錄
格式:INSERT INTO 表名(欄位名) VALUES(記錄行值1),(記錄行值2),...;
解釋:也就是相當於一條語句插入多條記錄,就不用每次只插入一條資料了
INSERT INTO person(name,age,info) VALUES('qqq',19,'haha'),('eee',14,'heihei'); //插入兩條資料。
同時插入多條記錄時,會出現三個名詞 Records:表明插入的記錄條數 Duplicates:表名插入時被忽略的記錄,原因可能是這些記錄包含了重複的主鍵值 Warnings:表明有問題的資料值,例如發生資料型別轉換。 上面提示的是 2個Records,確實是插入了兩條記錄數
1.4、將查詢結果插入到表中
在有的時候,可能需要將一張表中的資料搬到另一張表中,但是一條條輸入記錄,很慢,所以就有了這個將查詢結果插入到表中,也就是說,將一張表中查詢到的結果,全部一次性插入到另一張表中,這樣就很方便了,但是也有前提條件,那就是查詢的結果的欄位個數和插入到目標表的欄位個數是一樣的,並且資料型別也要相同。具體下下面這個例子。
上面一張person表不夠用,現在在建立一張表。
CREATE TABLE person_old
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT '',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL,
PRIMARY KEY(id)
);
增加兩條記錄
INSERT INTO person_id VALUES(11,'Harry',20,'studeng'),(12,'Beck',18,'polic');
現在將person_old表中的所有資料轉移到person表中。
INSERT INTO person(id,name,age,info) SELECT id,name,age,info FROM person_old;
這樣看一下,id中間就好像斷了一塊,其實可以不用新增id欄位,只新增後面三個欄位的值
INSERT INTO person(name,age,info) SELECT name,age,info FROM person_old;
不指定id,那麼就會按照person表中id的規則,AUTO_INCREMENT,這裡說明一下AUTO_INCREMENT的原理,先檢查表中最大的id值,然後往上面加1,每次做就會先檢測最大的id值是多少。
二、更新資料
格式:UPDATE 表名 SET 欄位名=值,欄位名=值... WHERE 條件;
解釋:通過條件找到要更新資料的那一行記錄,然後通過SET 欄位名=值這樣的形式,寫出要更改哪個欄位,並更改為什麼值。
UPDATE person SET name = 'xxx' WHERE name='aaa'; //將person表中name=aaa的記錄行更新為name=xxx。
解釋:原本第二行的記錄name=aaa。現在改為了xxx。可以同時改好多個值,不一定就只更改名字。主鍵id也能更改,只要主鍵不衝突,隨便改成什麼值
UPDATE person SET id = 7 WHERE id = 14; //將id=14的記錄行的id改為7
三、刪除資料
格式:DELETE FROM 表名[WHERE <condition>];
解釋:條件如果沒有的話,那麼就把表中所有資料度給刪除了。如果有條件的話,就將符合條件的記錄行刪除。
DELETE FROM person WHERE id = 13; //將person表中id=13的記錄行給刪除。
DELETE FROM person; //將person表中所有資料度刪除
四、綜合案例
下面這個例題想做的人可以做一下,環境已經教大家搭建好了,這些由於比較簡單,我就不在這裡一一解答了。
4.1、建立實驗環境
建立books表
CREATE TABLE books
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40) NOT NULL,
author VARCHAR(200) NOT NULL,
PRICE INT(11) NOT NULL,
pubdate YEAR NOT NULL,
note VARCHAR(255) NULL,
num INT NOT NULL DEFAULT 0
);
4.2、將下表中的路基插入books表中,分別使用不同的方法插入記錄。
4.2.1、指定所有欄位名稱插入記錄
4.2.2、不指定欄位名稱插入記錄
4.2.3、同時插入多條記錄
4.3、將小說型別novel的書的價格度增加5
4.4、將名稱為趙六的書的價格改為40,並將庫存量num改為26
4.7、刪除庫存為5的記錄