本資料為產(chǎn)品崗位作為日常工作參考私恬,語言口語化
At 2019/4/15 By David.Yang
數(shù)據(jù)操作最近本的4中情況,增炼吴、刪本鸣、改、查缺厉,
即添加數(shù)據(jù)永高、刪除數(shù)據(jù)、修改數(shù)據(jù)提针、查詢數(shù)據(jù)命爬。
增(INSERT語句)
往數(shù)據(jù)表當中插入數(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é)生表么饲宛?
就是準備放楊過的那個表。
我們現(xiàn)在準備在學(xué)生表當中把楊過這小子登記進去嗜价,
表示這小子報名入班艇抠,準備學(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ù)受影響進去了异剥,
如果不放心,想看看數(shù)據(jù)絮重,執(zhí)行select查看就可以了
SQL
mysql>select * from students;
select語句后面會詳細講解
SQL解釋:
INSERT INTO students (name, gender, age,dynasty, address, class)
VALUES
('楊過', 2, '14', '南宋', '', 1);
準備往學(xué)生表插入數(shù)據(jù)冤寿,
疑問:
? 為什么沒有學(xué)號number呢?
我們在設(shè)計數(shù)據(jù)表時使number(學(xué)號)這個字段擁有了自增屬性:
`number` int(11) NOT NULL AUTO_INCREMENT COMMENT '學(xué)號',
這表示數(shù)據(jù)庫會自己把這個字段進行填充青伤,
并且時12345…按照順序自增的督怜,
這樣的好處是我們不需要自己去維護學(xué)生的學(xué)號,
而且數(shù)據(jù)庫能保證每個學(xué)生的學(xué)號是不會重復(fù)狠角,具有唯一性号杠。
所以我們在插入數(shù)據(jù)時,就不需要指定number了丰歌,
當然也就不需要給他賦值了姨蟋,因為數(shù)據(jù)庫幫我們把這件事做了。
當然动遭,你也可以自己維護一個學(xué)生號字段芬探,
插入數(shù)據(jù)時使用自己生成的學(xué)生號,不使用數(shù)據(jù)庫的厘惦。
? 為什么沒有deleted字段呢偷仿?
因為我們在設(shè)計數(shù)據(jù)表的時候,deleted字段指定了默認值呀宵蕉。
`deleted` int(2) NOT NULL DEFAULT '0' COMMENT '是否刪除 0未刪除 1已刪除',
所以數(shù)據(jù)庫自己會默認填寫0進去酝静,
你可以傳值,這樣數(shù)據(jù)庫就以你的數(shù)據(jù)為準了羡玛。
? INSERT插入數(shù)據(jù)時别智,非空值有什么需要注意的么?
如果設(shè)計數(shù)據(jù)表時稼稿,限定字段是NOT NULL薄榛,
但是又沒有給默認值DEFAULT XX,
這時候在插入數(shù)據(jù)時一定要有這個字段以及對應(yīng)的數(shù)據(jù)让歼。
比如
假使有學(xué)生成績表敞恋,設(shè)計了score(分數(shù))是NOT NULL,
這個地方肯定不能給定默認值谋右,
因為業(yè)務(wù)上分數(shù)是學(xué)生真實的考分硬猫,
總不能有默認60分,
這時候在插入數(shù)據(jù)時,需要有score字段啸蜜,且給score字段的分數(shù)值寫上坑雅。
INSERT INTO examsxxx(name, score, xxx)
VALUES
('楊過', 59, 'xxx');
數(shù)據(jù)批量插入
演示:
一條一條插入太累?
我們可以對數(shù)據(jù)庫進行數(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),
('達爾巴', 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ù)插進去了,
如果不放心冕香,想看看數(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ù)刪除是一個敏感的事情,
一般線上進行數(shù)據(jù)操作挫酿,都不會進行數(shù)據(jù)的真刪除构眯,
而是在每一張數(shù)據(jù)表中放一個字段,
專門用來標記數(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ù)進行物理上的刪除将塑,
就是說刪完這條數(shù)據(jù)就不在了,
你就找不到這條數(shù)據(jù)了蝌麸,
也就不能進行簡單的數(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:從目標數(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ù)查詢的偏移量
默認從0開始
比如:
|?????9 |完顏萍??????|? 16 |南宋??? |
|????10 |程英????????|? 14 |南宋??? |
|????11 |陸無雙??????|? 14 |南宋??? |
|????12 |霍都????????|? 20 |南宋??? |
|????13 |達爾巴??????|? 21 |南宋??? |
|????14 |武敦儒??????|? 18 |南宋??? |
|????15 |武修文??????|? 18 |南宋??? |
LIMIT 4 OFFSET 10;
會返回11 12 13 14數(shù)據(jù)
+--------+-----------+-----+---------+
| number | name????? | age | dynasty |
+--------+-----------+-----+---------+
|????11 |陸無雙???|? 14 |南宋??? |
|????12 |霍都?????|? 20 |南宋??? |
|????13 |達爾巴???|? 21 |南宋??? |
|????14 |武敦儒???|?18 |南宋??? |
+--------+-----------+-----+---------+
如果你想返回所有數(shù)據(jù)字段,可以通過*來實現(xiàn)
示范:
SQL
SELECT
?????? *
FROM
?????? students
WHERE
?????? deleted = 0
LIMIT 4 OFFSET2;
SQL解釋:
SELECT * 表示你要求查詢結(jié)果中返回所有數(shù)據(jù)字段
到此為止饥瓷,基本的增剥纷、刪、改呢铆、查就講完了晦鞋。
后續(xù)將需要了解條件查詢、通配符棺克、排序等悠垛。