本資料為產(chǎn)品崗位作為日常工作參考,語言口語化
At 2019/4/15 By David.Yang
數(shù)據(jù)操作最近本的4中情況,增、刪、改、查,
即添加數(shù)據(jù)、刪除數(shù)據(jù)、修改數(shù)據(jù)、查詢數(shù)據(jù)。
增(INSERT語句)
往數(shù)據(jù)表當(dāng)中插入數(shù)據(jù)可以單條插入,也可以批量多條插入,
語法:
INSERT INTO table_name ( field1, field2,...fieldN )
? ? ? ? ? ? ? ? ? ? ? VALUES
? ? ? ? ? ? ? ? ? ? ? ( value1, value2,...valueN );
table_name:要插入數(shù)據(jù)的表名
field*:插入數(shù)據(jù)的字段
value*:插入數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)值
數(shù)據(jù)單條插入
演示:
還記得我們之前設(shè)計的學(xué)生表么?
就是準(zhǔn)備放楊過的那個表。
我們現(xiàn)在準(zhǔn)備在學(xué)生表當(dāng)中把楊過這小子登記進(jìn)去,
表示這小子報名入班,準(zhǔn)備學(xué)武功了。
根據(jù)INSERT語句我們組裝一下把楊過錄入學(xué)生表的SQL語句改怎么寫。
SQL
INSERT INTO students(name, gender, age, dynasty, address, class)
VALUES
('楊過', 2, '14', '南宋', '', 1);
Query OK, 1 row affected (0.01 sec)
看到Query OK,說明執(zhí)行成功了,
1 row affected 代表一條數(shù)據(jù)受影響進(jìn)去了,
如果不放心,想看看數(shù)據(jù),執(zhí)行select查看就可以了
SQL
mysql>select * from students;
select語句后面會詳細(xì)講解
SQL解釋:
INSERT INTO students (name, gender, age,dynasty, address, class)
VALUES
('楊過', 2, '14', '南宋', '', 1);
準(zhǔn)備往學(xué)生表插入數(shù)據(jù),
疑問:
? 為什么沒有學(xué)號number呢?
我們在設(shè)計數(shù)據(jù)表時使number(學(xué)號)這個字段擁有了自增屬性:
`number` int(11) NOT NULL AUTO_INCREMENT COMMENT '學(xué)號',
這表示數(shù)據(jù)庫會自己把這個字段進(jìn)行填充,
并且時12345…按照順序自增的,
這樣的好處是我們不需要自己去維護(hù)學(xué)生的學(xué)號,
而且數(shù)據(jù)庫能保證每個學(xué)生的學(xué)號是不會重復(fù),具有唯一性。
所以我們在插入數(shù)據(jù)時,就不需要指定number了,
當(dāng)然也就不需要給他賦值了,因為數(shù)據(jù)庫幫我們把這件事做了。
當(dāng)然,你也可以自己維護(hù)一個學(xué)生號字段,
插入數(shù)據(jù)時使用自己生成的學(xué)生號,不使用數(shù)據(jù)庫的。
? 為什么沒有deleted字段呢?
因為我們在設(shè)計數(shù)據(jù)表的時候,deleted字段指定了默認(rèn)值呀。
`deleted` int(2) NOT NULL DEFAULT '0' COMMENT '是否刪除 0未刪除 1已刪除',
所以數(shù)據(jù)庫自己會默認(rèn)填寫0進(jìn)去,
你可以傳值,這樣數(shù)據(jù)庫就以你的數(shù)據(jù)為準(zhǔn)了。
? INSERT插入數(shù)據(jù)時,非空值有什么需要注意的么?
如果設(shè)計數(shù)據(jù)表時,限定字段是NOT NULL,
但是又沒有給默認(rèn)值DEFAULT XX,
這時候在插入數(shù)據(jù)時一定要有這個字段以及對應(yīng)的數(shù)據(jù)。
比如
假使有學(xué)生成績表,設(shè)計了score(分?jǐn)?shù))是NOT NULL,
這個地方肯定不能給定默認(rèn)值,
因為業(yè)務(wù)上分?jǐn)?shù)是學(xué)生真實的考分,
總不能有默認(rèn)60分,
這時候在插入數(shù)據(jù)時,需要有score字段,且給score字段的分?jǐn)?shù)值寫上。
INSERT INTO examsxxx(name, score, xxx)
VALUES
('楊過', 59, 'xxx');
數(shù)據(jù)批量插入
演示:
一條一條插入太累?
我們可以對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的批量插入。
根據(jù)INSERT語句我們組裝一下把所有學(xué)生錄入學(xué)生表的SQL語句改怎么寫。
SQL
INSERT INTO students (name, gender, age, dynasty, address, class)
VALUES
('小龍女', 1, '18', '南宋', '', 1),
('公孫綠萼', 1, '16', '南宋', '', 1),
('郭襄', 1, '6', '南宋', '', 1),
('郭芙', 1, '18', '南宋', '', 1),
('郭破虜', 2, '6', '南宋', '', 1),
('耶律齊', 2, '18', '南宋', '', 1),
('耶律燕', 1, '16', '南宋', '', 1),
('完顏萍', 1, '16', '南宋', '', 1),
('程英', 1, '14', '南宋', '', 1),
('陸無雙', 1, '14', '南宋', '', 1),
('霍都', 2, '20', '南宋', '', 1),
('達(dá)爾巴', 2, '21', '南宋', '', 1),
('武敦儒', 2, '18', '南宋', '', 1),
('武修文', 2, '18', '南宋', '', 1),
('趙志敬', 2, '18', '南宋', '', 1),
('洪凌波', 1, '18', '南宋', '', 1);
Query OK, 16 rows affected (0.02 sec)
Records: 16? Duplicates: 0? Warnings: 0
16條數(shù)據(jù)插進(jìn)去了,
如果不放心,想看看數(shù)據(jù),執(zhí)行select查看就可以了
SQL
mysql> select * from students;
再補一些數(shù)據(jù),后面會用到
SQL
INSERT INTOstudents (name, gender, age, dynasty, address, class)
VALUES
('路人1', 1, '18', '南宋', '', 1),
('路人2', 1, '16', '南宋', '', 1),
('路人3', 1, '6', '南宋', '', 1),
('路人4', 1, '18', '南宋', '', 1),
('路人5', 2, '6', '南宋', '', 1),
('路人6', 2, '18', '南宋', '', 1),
('路人7', 1, '16', '南宋', '', 1),
('路人8', 1, '16', '南宋', '', 1),
('路人9', 1, '14', '南宋', '', 1),
('路人10', 1, '14', '南宋', '', 1);
mysql>select * from students;
到此我們已經(jīng)學(xué)會了兩種數(shù)據(jù)的插入方式。
刪(DELETE語句)
數(shù)據(jù)刪除是一個敏感的事情,
一般線上進(jìn)行數(shù)據(jù)操作,都不會進(jìn)行數(shù)據(jù)的真刪除,
而是在每一張數(shù)據(jù)表中放一個字段,
專門用來標(biāo)記數(shù)據(jù)的狀態(tài),
比如我們就使用deleted字段來表述數(shù)據(jù)的刪除狀態(tài)
0未刪除 1已刪除
偽刪除
我們將楊過,這小子的登記狀態(tài)有正常的數(shù)據(jù)狀態(tài),
修改為已刪除。
通過偽刪除來實現(xiàn)本質(zhì)其實是修改楊過這條數(shù)據(jù)deleted的值,
將他有0改成1,
在邏輯上他就是一條已刪除的數(shù)據(jù)了。
語法:
UPDATE `數(shù)據(jù)表名` SET `更新的字段` = 更新的值 [完整的更新條件]
示范
示范:
SQL
mysql> UPDATE `students` SET `deleted` = 1 WHERE `number` = 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1? Changed: 1? Warnings: 0
SQL解釋:
楊過的學(xué)號是1,
即將學(xué)號 = 1的數(shù)據(jù),
deleted改為1
簡單示范,下文會講解UPDATE
mysql> select * from students;
真刪除
真刪除就是把這條數(shù)據(jù)進(jìn)行物理上的刪除,
就是說刪完這條數(shù)據(jù)就不在了,
你就找不到這條數(shù)據(jù)了,
也就不能進(jìn)行簡單的數(shù)據(jù)誤刪除恢復(fù)。
語法:
DELETE FROM `table_name` [WHERE Clause]
table_name:要操作的數(shù)據(jù)表名
WHERE Clause:刪除數(shù)據(jù)的條件(即滿足這個條件,就將數(shù)據(jù)刪除)
WHERE可以接多個條件,用AND拼接,
比如:
WHERE id = 1 AND name=‘金輪法王’
示范
示范:
我們通過沒什么用的test表來操作
先看看有哪些數(shù)據(jù)
SQL
mysql> select * from test;
SQL
mysql>DELETE FROM `test` WHERE `int` = '0001';
Query OK, 1 row affected (0.01 sec)
mysql>select * from test;
SQL解釋:
DELETE FROM `test` WHERE `int` = '0001';
DELETE:是執(zhí)行刪除語句,
FROM `test`:表示‘從’數(shù)據(jù)表‘test’去執(zhí)行刪除
WHERE `int` = '0001':WHERE是刪除條件關(guān)鍵字,后面接刪除數(shù)據(jù)滿足的條件是什么。
改(UPDATE語句)
語法:
UPDATE table_name
SET
? ? column_name1 = expr1,
? ? column_name2 = expr2,
? ? ...
WHERE
? ? condition;
示范
示范:
將學(xué)號>=18的,并且未刪除的學(xué)生,
分配到民兵班去,
并且地址都改為未知
SQL
UPDATE `students`
SET
`address` = '未知',
`class` = 2
WHERE
`deleted` = 0 AND `number` >= 18;
SQL解釋:
查(SELECT語句:基礎(chǔ)查詢)
數(shù)據(jù)的查詢是我們?nèi)粘9ぷ鲬?yīng)用最多的場景,
不管是數(shù)據(jù)的驗證,
統(tǒng)計、分析,
查詢是一切的基礎(chǔ)。
語法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
SELECT column:查詢語句,SELECT 要查詢的字段(1-n)
FROM table_name:從目標(biāo)數(shù)據(jù)表查詢
WHER:滿足查詢的條件
LIMIT OFFSET:查詢偏移量,比如查詢第10 – 20的數(shù)據(jù)
示范
示范:
SQL
SELECT
number, name, age, dynasty
FROM
students
WHERE
deleted = 0
LIMIT 4 OFFSET 2;
SQL解釋:
SELECT結(jié)果只顯示你需要的字段,
所以你指定你想要看到的字段他就給你;
查詢需要指定你查詢的表
WHERE條件如果有需要可以加上
LIMIT表示你想要返回的數(shù)據(jù)量有幾條,查詢時請一定加上LIMIT
OFFSET表示數(shù)據(jù)查詢的偏移量
默認(rèn)從0開始
比如:
|?????9 |完顏萍??????|? 16 |南宋??? |
|????10 |程英????????|? 14 |南宋??? |
|????11 |陸無雙??????|? 14 |南宋??? |
|????12 |霍都????????|? 20 |南宋??? |
|????13 |達(dá)爾巴??????|? 21 |南宋??? |
|????14 |武敦儒??????|? 18 |南宋??? |
|????15 |武修文??????|? 18 |南宋??? |
LIMIT 4 OFFSET 10;
會返回11 12 13 14數(shù)據(jù)
+--------+-----------+-----+---------+
| number | name????? | age | dynasty |
+--------+-----------+-----+---------+
|????11 |陸無雙???|? 14 |南宋??? |
|????12 |霍都?????|? 20 |南宋??? |
|????13 |達(dá)爾巴???|? 21 |南宋??? |
|????14 |武敦儒???|?18 |南宋??? |
+--------+-----------+-----+---------+
如果你想返回所有數(shù)據(jù)字段,可以通過*來實現(xiàn)
示范:
SQL
SELECT
?????? *
FROM
?????? students
WHERE
?????? deleted = 0
LIMIT 4 OFFSET2;
SQL解釋:
SELECT * 表示你要求查詢結(jié)果中返回所有數(shù)據(jù)字段
到此為止,基本的增、刪、改、查就講完了。
后續(xù)將需要了解條件查詢、通配符、排序等。