一文整理新手最常犯的SQL高頻語法錯誤和避坑合集
前言
新手學(xué)SQL,最頭疼的不是記不住語法,而是「寫了語句報錯,卻找不到原因」——可能是一個分號沒寫、一個字段名拼錯、一個括號漏了,就導(dǎo)致整個SQL執(zhí)行失敗。
本篇整理了 新手最常犯的10類SQL語法錯誤,每類都包含「錯誤示例+正確示例+避坑提示」,幫你快速排查報錯、養(yǎng)成規(guī)范寫SQL的習慣,少走彎路。
一、基礎(chǔ)語法錯誤(最高頻)
1. 遺漏分號(;)
SQL語句以分號結(jié)尾,遺漏分號會導(dǎo)致語句無法執(zhí)行,甚至后續(xù)語句報錯。
-- ? 錯誤:遺漏分號 SELECT name FROM user SELECT age FROM user -- ? 正確:每條語句結(jié)尾加英文分號 SELECT name FROM user; SELECT age FROM user;
避坑:寫完一條語句,立刻加英文分號,不要等到全部寫完再補。
2. 字段名/表名拼寫錯誤
最常見的錯誤,字段名、表名和創(chuàng)建時不一致(大小寫敏感,取決于數(shù)據(jù)庫配置)。
-- 假設(shè)表名是user,字段名是name、age -- ? 錯誤:表名拼錯(user寫成users)、字段名拼錯(age寫成agee) SELECT name, agee FROM users; -- ? 正確:和創(chuàng)建時的表名、字段名完全一致 SELECT name, age FROM user;
避坑:寫SQL時,先確認表結(jié)構(gòu)(desc 表名; 可查看字段),避免憑記憶拼寫。
3. 關(guān)鍵字拼寫錯誤
SQL關(guān)鍵字(SELECT、FROM、WHERE、INSERT等)拼寫錯誤,MySQL會無法識別。
-- ? 錯誤:SELECT寫成SELEC、INSERT寫成INSER
SELEC name FROM user;
INSER INTO user (name) VALUES ('張三');
-- ? 正確:關(guān)鍵字拼寫完整
SELECT name FROM user;
INSERT INTO user (name) VALUES ('張三');避坑:關(guān)鍵字可大寫(推薦,區(qū)分字段和關(guān)鍵字),比如 SELECT、FROM,不容易拼錯。
二、CRUD操作類錯誤
4. INSERT 語句字段和值不匹配
字段數(shù)量、順序和VALUES后面的值數(shù)量、順序不一致,會直接報錯。
-- ? 錯誤1:字段3個,值2個(數(shù)量不匹配)
INSERT INTO user (name, age, gender) VALUES ('張三', 20);
-- ? 錯誤2:字段順序和值順序不一致(name對應(yīng)20,age對應(yīng)'張三')
INSERT INTO user (name, age) VALUES (20, '張三');
-- ? 正確:字段和值數(shù)量、順序完全一致
INSERT INTO user (name, age, gender) VALUES ('張三', 20, 1);5. UPDATE/DELETE 忘記加 WHERE 條件
新手最危險的錯誤,忘記加WHERE會修改/刪除全表數(shù)據(jù),無法恢復(fù)(無備份)。
-- ? 錯誤:無WHERE條件,修改全表用戶年齡 UPDATE user SET age = 20; -- ? 錯誤:無WHERE條件,刪除全表數(shù)據(jù) DELETE FROM user; -- ? 正確:加WHERE條件,精準操作 UPDATE user SET age = 20 WHERE id = 1; DELETE FROM user WHERE id = 1;
避坑:寫UPDATE/DELETE時,先寫WHERE條件,再寫SET/DELETE,養(yǎng)成習慣。
三、查詢類錯誤
6. WHERE 條件中使用聚合函數(shù)
WHERE 用于過濾行,不能使用聚合函數(shù)(COUNT、SUM、AVG等),過濾聚合結(jié)果需用HAVING。
-- ? 錯誤:WHERE中使用COUNT(*) SELECT name FROM user WHERE COUNT(*) > 2; -- ? 正確:用HAVING過濾聚合結(jié)果(需搭配GROUP BY) SELECT gender, COUNT(*) AS user_count FROM user GROUP BY gender HAVING user_count > 2;
7. GROUP BY 和 SELECT 字段不匹配
SELECT 中只能出現(xiàn)「分組字段」和「聚合函數(shù)」,不能出現(xiàn)其他無關(guān)字段。
-- ? 錯誤:name不是分組字段,也不是聚合函數(shù) SELECT name, gender, COUNT(*) FROM user GROUP BY gender; -- ? 正確1:將name加入分組 SELECT name, gender, COUNT(*) FROM user GROUP BY gender, name; -- ? 正確2:用聚合函數(shù)包裹name SELECT MAX(name), gender, COUNT(*) FROM user GROUP BY gender;
8. 模糊查詢 LIKE 遺漏通配符
LIKE 用于模糊查詢,若不搭配 % 或 _,等價于 =,無法實現(xiàn)模糊匹配。
-- ? 錯誤:LIKE后面無通配符,等價于 WHERE name = '張' SELECT name FROM user WHERE name LIKE '張'; -- ? 正確:搭配%,匹配包含“張”的所有名字 SELECT name FROM user WHERE name LIKE '%張%';
四、其他常見錯誤
9. 字符串值未加引號
字符串類型(varchar、char等)的字段,賦值或條件匹配時,必須加英文單引號。
-- ? 錯誤:字符串值未加引號
INSERT INTO user (name) VALUES (張三);
SELECT name FROM user WHERE name = 張三;
-- ? 正確:字符串值加英文單引號
INSERT INTO user (name) VALUES ('張三');
SELECT name FROM user WHERE name = '張三';避坑:數(shù)值類型(int、decimal)不加引號,字符串類型必須加英文單引號。
10. 括號、逗號遺漏或多余
多條件、多字段、子查詢中,容易遺漏或多余括號、逗號,導(dǎo)致語法錯誤。
-- ? 錯誤1:INSERT語句VALUES后面遺漏括號
INSERT INTO user (name, age) VALUES '張三', 20;
-- ? 錯誤2:多條件AND連接時,多余逗號
SELECT name FROM user WHERE gender = 1, AND age > 20;
-- ? 正確
INSERT INTO user (name, age) VALUES ('張三', 20);
SELECT name FROM user WHERE gender = 1 AND age > 20;五、新手避坑通用技巧
1. 寫SQL時,關(guān)鍵字大寫、字段名/表名小寫,區(qū)分明顯,減少拼寫錯誤;
2. 復(fù)雜語句(如多表關(guān)聯(lián)、分組查詢),分多行寫,縮進對齊,便于排查;
3. 執(zhí)行SQL前,先檢查:分號、引號、括號、逗號是否完整;
4. 報錯時,重點看報錯信息的「最后一行」,MySQL會提示錯誤位置和原因。
結(jié)尾
新手犯SQL語法錯誤很正常,不用慌,記住上面的錯誤類型和避坑技巧,寫得多了,自然就能避免。建議每次報錯后,記錄下來,下次就不會再犯同樣的錯。
到此這篇關(guān)于一文整理新手最常犯的SQL高頻語法錯誤和避坑合集的文章就介紹到這了,更多相關(guān)SQL高頻語法錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql中l(wèi)eft join設(shè)置條件在on與where時的用法區(qū)別分析
這篇文章主要介紹了mysql中l(wèi)eft join設(shè)置條件在on與where時的用法區(qū)別,結(jié)合實例形式分析了mysql中l(wèi)eft join設(shè)置條件在on與where時的相關(guān)用法區(qū)別與操作注意事項,需要的朋友可以參考下2020-02-02
mysql中 ${param}與#{param}使用區(qū)別
這篇文章主要介紹了mysql中 ${param}與#{param}使用區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-08-08
mysql 操作總結(jié) INSERT和REPLACE
用于操作數(shù)據(jù)庫的SQL一般分為兩種,一種是查詢語句,也就是我們所說的SELECT語句,另外一種就是更新語句,也叫做數(shù)據(jù)操作語句。2009-07-07
mysql正確刪除數(shù)據(jù)的方法(drop,delete,truncate)
這篇文章主要給大家介紹了關(guān)于mysql正確刪除數(shù)據(jù)的相關(guān)資料,DELETE語句是MySQL中最常用的刪除數(shù)據(jù)的方式之一,但也有幾種其他方法來實現(xiàn),需要的朋友可以參考下2023-10-10
如何使用分區(qū)處理MySQL的億級數(shù)據(jù)優(yōu)化
mysql在查詢上千萬級數(shù)據(jù)的時候,通過索引可以解決大部分查詢優(yōu)化問題。但是在處理上億數(shù)據(jù)的時候,應(yīng)該怎么解決,本文就是用分區(qū)來優(yōu)化一下,感興趣的一起來了解一下2021-06-06

