本文地址:http://www.reibang.com/p/96dd3b2560a8
一落塑、插入(INSERT)
使用INSERT
語(yǔ)句可以快速便利的插入一條或多條數(shù)據(jù)到表中参歹。
語(yǔ)法:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tb_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
{VALUES | VALUE} (value_list) [, (value_list)] ...
[ON DUPLICATE KEY UPDATE assignment_list]
關(guān)鍵字:
tb_name
- 插入的表名扩借。-
[(col_name [, col_name] ...)]
要插入數(shù)據(jù)的字段名列表哆窿,如果你需要指定插入某幾個(gè)字段的數(shù)據(jù)拴还,那么你需要將你插入的字段名列出贺拣。并且在插入指的時(shí)候需要順序一一對(duì)應(yīng)。
INSERT INTO tb_name (column1,column2...) VALUES (value1,value2,...);
沒(méi)有插入值的字段將自動(dòng)填充N(xiāo)ULL或默認(rèn)值标锄。
-
{VALUES | VALUE} (value_list) [, (value_list)] ...
插入數(shù)據(jù)的值顽铸。在
col_name
沒(méi)有指定插入的字段名時(shí),需要將所有字段的值按照表中字段的順序一一插入料皇。AUTO_INCREMENT
字段可以忽略跋破,不用插入簸淀。INSERT INTO tb_name VALUES (value1,value2,value3,...);
如果不希望寫(xiě)定字段名瓶蝴,又希望某些字段插入的數(shù)據(jù)為默認(rèn)值的話毒返,那么可以使用
DEFAULT(col_name)
來(lái)生成默認(rèn)值。如果需要一次性插入多行數(shù)據(jù)舷手,那么需要用逗號(hào)分割拧簸。
INSERT INTO tb_name (column1,column2...) VALUES (value1,value2,...), (value1,value2,...);
-
[ON DUPLICATE KEY UPDATE assignment_list]
在插入數(shù)據(jù)時(shí)使用這個(gè)選項(xiàng),那么意味著男窟,如果插入的數(shù)據(jù)與現(xiàn)有的
UNIQUE
或者PRIMARY KEY
字段重復(fù)時(shí)盆赤,將會(huì)更新舊的數(shù)據(jù),而不是拋出重復(fù)的異常歉眷。 [PARTITION (partition_name [, partition_name] ...)]
- 控制插入分區(qū)表牺六。[IGNORE]
- 忽略掉插入語(yǔ)句引發(fā)的異常,只記錄警告汗捡。[LOW_PRIORITY | DELAYED | HIGH_PRIORITY]
- 插入語(yǔ)句的優(yōu)先級(jí)淑际。
INSERT ... SELECT語(yǔ)句
INSERT ... SELECT
是帶有SELECT
字句的INSERT
語(yǔ)句,可以將SELECT
查詢到的多行結(jié)果插入到表中扇住。
語(yǔ)法:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
SELECT ...
[ON DUPLICATE KEY UPDATE assignment_list]
例子:
INSERT INTO tb_name2 (fld_id)
SELECT tb_name1.fld_order_id
FROM tb_name1 WHERE tb_name1.fld_order_id > 100;
二春缕、更新(UPDATE)
語(yǔ)法:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
關(guān)鍵詞:
table_reference
- 要更新的表名-
SET
必備參數(shù),
SET
決定了更新哪些字段艘蹋,更新成什么值锄贼。如下所示:col_name1 = value1, col_name2 = value2,
-
[WHERE where_condition]
如果沒(méi)有
WHERE
子句的話,那么UPDATE
將會(huì)更新表中所有行的數(shù)據(jù)女阀。如果給定了
WHERE
子句宅荤,那么UPDATE
將會(huì)根據(jù)WHERE
子句后面的表達(dá)式來(lái)決定更新哪些行的數(shù)據(jù)。例子:
UPDATE tb_name SET col_name1 = value1,col_name2 = value2 WHERE id=3;
-
[ORDER BY ...]
在沒(méi)有指定
WHERE
子句時(shí)浸策,UPDATE
將更新所有行冯键。如果此時(shí)指定了ORDER BY ...
子句,那么UPDATE
將按照ORDER BY ...
指定的順序進(jìn)行更新的榛。 -
[LIMIT row_count]
一般與
ORDER BY ...
子句配合使用琼了,[LIMIT row_count]
將會(huì)限制更新的條數(shù)。 [IGNORE]
- 忽略掉更新語(yǔ)句引發(fā)的異常夫晌,只記錄警告雕薪。[LOW_PRIORITY]
- 降低更新語(yǔ)句的優(yōu)先級(jí)。
三晓淀、刪除(DELETE)
語(yǔ)法:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tb_name
[PARTITION (partition_name [, partition_name] ...)]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
關(guān)鍵詞:
-
[WHERE where_condition]
如果沒(méi)有
WHERE
子句的話所袁,那么DELETE
將會(huì)刪除表中所有數(shù)據(jù)。如果給定了
WHERE
子句凶掰,那么DELETE
將會(huì)根據(jù)WHERE
子句后面的表達(dá)式來(lái)決定刪除哪些行的數(shù)據(jù)燥爷。 -
[ORDER BY ...]
在沒(méi)有指定
WHERE
子句時(shí)蜈亩,DELETE
將刪除所有行。如果此時(shí)指定了ORDER BY ...
子句前翎,那么DELETE
將按照ORDER BY ...
指定的順序進(jìn)行刪除稚配。 -
[LIMIT row_count]
一般與
ORDER BY ...
子句配合使用,[LIMIT row_count]
將會(huì)限制刪除的條數(shù)港华。[PARTITION (partition_name [, partition_name] ...)]
- 控制刪除分區(qū)表道川。 [IGNORE]
- 忽略掉刪除語(yǔ)句引發(fā)的異常,只記錄警告立宜。[LOW_PRIORITY]
- 降低刪除語(yǔ)句的優(yōu)先級(jí)冒萄。
例子:
DELETE FROM tb_name WHERE col_name=3;
四、清空(TRUNCATE)
TRUNCATE
語(yǔ)句主要用于清空一張表的內(nèi)容橙数。當(dāng)我們需要?jiǎng)h除一張表時(shí)尊流,應(yīng)該使用DROP
,當(dāng)我們想要?jiǎng)h除表中一部分?jǐn)?shù)據(jù)的時(shí)候灯帮,我們應(yīng)該使用DELETE
崖技。
而當(dāng)我們希望保存這張表但是刪除里面所有數(shù)據(jù)的時(shí)候,我們就可以使用TRUNCATE
施流。
語(yǔ)法:
TRUNCATE [TABLE] tbl_name;
TRUNCATE
語(yǔ)句的語(yǔ)法非常簡(jiǎn)單响疚,也與DELETE
刪除所有行非常類(lèi)似,但它們主要有以下區(qū)別:
-
TRUNCATE
實(shí)際上時(shí)刪除并重新創(chuàng)建表瞪醋,所以一般來(lái)說(shuō)會(huì)比DELETE
刪除所有行快很多忿晕,特別是在面對(duì)一張非常大的表的時(shí)候。 -
TRUNCATE
無(wú)法回滾银受。 - 對(duì)于
InnoDB
表践盼,如果表中有FOREIGN KEY
約束,那么TRUNCATE
語(yǔ)句將會(huì)失敗宾巍。 - 對(duì)于
AUTO_INCREMENT
的值將會(huì)重新刷新為初始值咕幻。