MySQL數(shù)據(jù)庫(kù)INSERT、UPDATE、DELETE以及REPLACE語(yǔ)句的用法詳解_MySQL教程
推薦:解析如何使用Zend Framework 連接數(shù)據(jù)庫(kù)本篇文章是對(duì)如何使用Zend Framework 連接數(shù)據(jù)庫(kù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下 復(fù)制代碼 代碼如下: $db = Zend_Db::factory('Pdo_Mysql', array( 'host' = '127.0.0.1', 'username' = 'root', 'password' = '123456', 'dbname' = 'mysql' )); 直接連接M
本篇文章是對(duì)MySQL數(shù)據(jù)庫(kù)INSERT、UPDATE、DELETE以及REPLACE語(yǔ)句的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下MySQL數(shù)據(jù)庫(kù)insert和update語(yǔ)句
引:用于操作數(shù)據(jù)庫(kù)的SQL一般分為兩種,一種是查詢語(yǔ)句,也就是我們所說(shuō)的SELECT語(yǔ)句,另外一種就是更新語(yǔ)句,也叫做數(shù)據(jù)操作語(yǔ)句。言外之意,就是對(duì)數(shù)據(jù)進(jìn)行修改。在標(biāo)準(zhǔn)的SQL中有3個(gè)語(yǔ)句,它們是INSERT、UPDATE以及DELETE。
用 于操作數(shù)據(jù)庫(kù)的SQL一般分為兩種,一種是查詢語(yǔ)句,也就是我們所說(shuō)的SELECT語(yǔ)句,另外一種就是更新語(yǔ)句,也叫做數(shù)據(jù)操作語(yǔ)句。言外之意,就 是對(duì)數(shù)據(jù)進(jìn)行修改。在標(biāo)準(zhǔn)的SQL中有3個(gè)語(yǔ)句,它們是INSERT、UPDATE以及DELETE。在MySQL中又多了一個(gè)REPLACE語(yǔ)句,因 此,本文以MySQL為背景來(lái)討論如何使有SQL中的更新語(yǔ)句。
一、INSERT和REPLACE
INSERT和REPLACE語(yǔ)句的功能都是向表中插入新的數(shù)據(jù)。這兩條語(yǔ)句的語(yǔ)法類(lèi)似。它們的主要區(qū)別是如何處理重復(fù)的數(shù)據(jù)。
1. INSERT的一般用法
MySQL中的INSERT語(yǔ)句和標(biāo)準(zhǔn)的INSERT不太一樣,在標(biāo)準(zhǔn)的SQL語(yǔ)句中,一次插入一條記錄的INSERT語(yǔ)句只有一種形式。
INSERT INTO tablename(列名…) VALUES(列值);
而在MySQL中還有另外一種形式。
INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;
第一種方法將列名和列值分開(kāi)了,在使用時(shí),列名必須和列值的數(shù)一致。如下面的語(yǔ)句向users表中插入了一條記錄:
INSERT INTO users(id, name, age) VALUES(123, '姚明', 25);
第二種方法允許列名和列值成對(duì)出現(xiàn)和使用,如下面的語(yǔ)句將產(chǎn)生中樣的效果。
INSERT INTO users SET id = 123, name = '姚明', age = 25;
如果使用了SET方式,必須至少為一列賦值。如果某一個(gè)字段使用了省缺值(如默認(rèn)或自增值),這兩種方法都可以省略這些字段。如id字段上使用了自增值,上面兩條語(yǔ)句可以寫(xiě)成如下形式:
INSERT INTO users (name, age) VALUES('姚明',25);
INSERT INTO uses SET name = '姚明', age = 25;
MySQL在VALUES上也做了些變化。如果VALUES中什么都不寫(xiě),那MySQL將使用表中每一列的默認(rèn)值來(lái)插入新記錄。
INSERT INTO users () VALUES();
如果表名后什么都不寫(xiě),就表示向表中所有的字段賦值。使用這種方式,不僅在VALUES中的值要和列數(shù)一致,而且順序不能顛倒。 INSERT INTO users VALUES(123, '姚明', 25);
如果將INSERT語(yǔ)句寫(xiě)成如下形式MySQL將會(huì)報(bào)錯(cuò)。
INSERT INTO users VALUES('姚明',25);
2. 使用INSERT插入多條記錄
看到這個(gè)標(biāo)題也許大家會(huì)問(wèn),這有什么好說(shuō)的,調(diào)用多次INSERT 語(yǔ)句不就可以插入多條記錄了嗎!但使用這種方法要增加服務(wù)器的負(fù)荷,因?yàn)�,�?zhí)行每一次 SQL服務(wù)器都要同樣對(duì)SQL進(jìn)行分析、優(yōu)化等操作。幸好MySQL提供了另一種解決方案,就是使用一條INSERT語(yǔ)句來(lái)插入多條記錄。這并不是標(biāo)準(zhǔn)的 SQL語(yǔ)法,因此只能在MySQL中使用。
INSERT INTO users(name, age)
VALUES('姚明', 25), ('比爾.蓋茨', 50), ('火星人', 600);
上面的INSERT 語(yǔ)句向users表中連續(xù)插入了3條記錄。值得注意的是,上面的INSERT語(yǔ)句中的VALUES后必須每一條記錄的值放到一對(duì)(…)中,中間使用","分割。假設(shè)有一個(gè)表table1
CREATE TABLE table1(n INT);
如果要向table1中插入5條記錄,下面寫(xiě)法是錯(cuò)誤的:
INSERT INTO table1 (i) VALUES(1,2,3,4,5);
MySQL將會(huì)拋出下面的錯(cuò)誤
ERROR 1136: Column count doesn't match value count at row 1
而正確的寫(xiě)法應(yīng)該是這樣:
INSERT INTO t able1(i) VALUES(1),(2),(3),(4),(5);
當(dāng)然,這種寫(xiě)法也可以省略列名,這樣每一對(duì)括號(hào)里的值的數(shù)目必須一致,而且這個(gè)數(shù)目必須和列數(shù)一致。如:
INSERT INTO t able1 VALUES(1),(2),(3),(4),(5);
3. REPLACE語(yǔ)句
我們?cè)谑褂脭?shù)據(jù)庫(kù)時(shí)可能會(huì)經(jīng)常遇到這種情況。如果一個(gè)表在一個(gè)字段上建立了唯 一索引,當(dāng)我們?cè)傧蜻@個(gè)表中使用已經(jīng)存在的鍵值插入一條記錄,那將會(huì)拋出一 個(gè)主鍵沖突的錯(cuò)誤。當(dāng)然,我們可能想用新記錄的值來(lái)覆蓋原來(lái)的記錄值。如果使用傳統(tǒng)的做法,必須先使用DELETE語(yǔ)句刪除原先的記錄,然后再使用 INSERT插入新的記錄。而在MySQL中為我們提供了一種新的解決方案,這就是REPLACE語(yǔ)句。使用REPLACE插入一條記錄時(shí),如果不重 復(fù),REPLACE就和INSERT的功能一樣,如果有重復(fù)記錄,REPLACE就使用新記錄的值來(lái)替換原來(lái)的記錄值。
使用REPLACE的最大好處就是可以將DELETE和INSERT合二為一,形成一個(gè)原子操作。這樣就可以不必考慮在同時(shí)使用DELETE和INSERT時(shí)添加事務(wù)等復(fù)雜操作了。
在使用REPLACE時(shí),表中必須有唯一索引,而且這個(gè)索引所在的字段不能允許空值,否則REPLACE就和INSERT完全一樣的。
在 執(zhí)行REPLACE后,系統(tǒng)返回了所影響的行數(shù),如果返回1,說(shuō)明在表中并沒(méi)有重復(fù)的記錄,如果返回2,說(shuō)明有一條重復(fù)記錄,系統(tǒng)自動(dòng)先調(diào)用了 DELETE刪除這條記錄,然后再記錄用INSERT來(lái)插入這條記錄。如果返回的值大于2,那說(shuō)明有多個(gè)唯一索引,有多條記錄被刪除和插入。
REPLACE的語(yǔ)法和INSERT非常的相似,如下面的REPLACE語(yǔ)句是插入或更新一條記錄。
REPLACE INTO users (id,name,age) VALUES(123, '趙本山', 50);
插入多條記錄:
REPLACE INTO users(id, name, age)
VALUES(123, '趙本山', 50), (134,'Mary',15);
REPLACE也可以使用SET語(yǔ)句
REPLACE INTO users SET id = 123, name = '趙本山', age = 50;
上 面曾提到REPLACE可能影響3條以上的記錄,這是因?yàn)樵诒碇杏谐^(guò)一個(gè)的唯一索引。在這種情況下,REPLACE將考慮每一個(gè)唯一索引,并對(duì)每一 個(gè)索引對(duì)應(yīng)的重復(fù)記錄都刪除,然后插入這條新記錄。假設(shè)有一個(gè)table1表,有3個(gè)字段a, b, c。它們都有一個(gè)唯一索引。
CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);
假設(shè)table1中已經(jīng)有了3條記錄
a b c
1 1 1
2 2 2
3 3 3
下面我們使用REPLACE語(yǔ)句向table1中插入一條記錄。
REPLACE INTO table1(a, b, c) VALUES(1,2,3);
返回的結(jié)果如下
Query OK, 4 rows affected (0.00 sec)
在table1中的記錄如下
a b c
1 2 3
我們可以看到,REPLACE將原先的3條記錄都刪除了,然后將(1, 2, 3)插入。
分享:MySQL中優(yōu)化sql語(yǔ)句查詢常用的30種方法本篇文章是對(duì)MySQL中優(yōu)化sql語(yǔ)句查詢常用的30種方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下 1.對(duì)查詢進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。 2.應(yīng)盡量避免在 where 子句中使用!=或操作符,否則將引擎放棄使用索引而進(jìn)行全
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫(kù)中保留小數(shù)位的問(wèn)題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問(wèn)題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢中使用count)的兼容性問(wèn)題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- 遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)注意點(diǎn)記錄
- 網(wǎng)站模板MySQL timestamp自動(dòng)更新時(shí)間
- MySQL的安全問(wèn)題從安裝開(kāi)始說(shuō)起
- 解析mysql與Oracle update的區(qū)別
- 淺談SQLite時(shí)間函數(shù)的使用說(shuō)明與總結(jié)分析
- MySQL觸發(fā)器學(xué)習(xí)總結(jié)
- 從mysql中導(dǎo)出單個(gè)表結(jié)構(gòu)和數(shù)據(jù)
- 網(wǎng)頁(yè)模板MySQL出現(xiàn)Can't create/write to file 'C:\Windows\TEMP\#sql_990_0.MYI解決辦法
- MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率
- 深入探討:MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較
猜你也喜歡看這些
- 解析SQL Server 2000視圖問(wèn)題
- 詳解Windows Server 2008中的NAP
- 清理SQL Server 2008日志文件Cannot shrink log file 2 的解決方案
- 解析數(shù)據(jù)庫(kù)大戰(zhàn): MS SQL Server IBM DB2
- 用TableDiff產(chǎn)生SQL Server同步腳本
- Sql Server安裝出錯(cuò),安裝程序配置服務(wù)器失敗的解決方法小結(jié)
- asp.net連接查詢SQL數(shù)據(jù)庫(kù)并把結(jié)果顯示在網(wǎng)頁(yè)上(2種方法)
- SQL Server字符串切割
- sql server 中刪除默認(rèn)約束的通用sql腳本
- sql server多行數(shù)據(jù)拼接的實(shí)例方法
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索MySQL數(shù)據(jù)庫(kù)INSERT、UPDATE、DELETE以及REPLACE語(yǔ)句的用法詳解
- 教程說(shuō)明:
MySQL教程-MySQL數(shù)據(jù)庫(kù)INSERT、UPDATE、DELETE以及REPLACE語(yǔ)句的用法詳解
。