前言
我們知道網(wǎng)頁(yè)有他的狀態(tài)碼,比如最常見的404,500。都有他自己的含義,但是,在MySQL數(shù)據(jù)庫(kù)里面也有他們的一個(gè)錯(cuò)誤碼,相信很多同學(xué)見過(guò)但是沒(méi)有注意到吧。很多時(shí)候,進(jìn)行數(shù)據(jù)庫(kù)操作的時(shí)候,會(huì)提示錯(cuò)誤,但是大部分同學(xué)都會(huì)選擇直接重寫語(yǔ)句而不是先考慮如何根據(jù)錯(cuò)誤信息來(lái)修改,其實(shí)學(xué)會(huì)看錯(cuò)誤碼,能夠快速的定位自己的錯(cuò)誤,更容易就能解決問(wèn)題哦
那么,我們現(xiàn)在就介紹一下幾種比較常見的錯(cuò)誤碼吧
常見錯(cuò)誤碼
1.1007
我們創(chuàng)建一個(gè)叫test的數(shù)據(jù)庫(kù)的時(shí)候,發(fā)現(xiàn)創(chuàng)建失敗,顯示錯(cuò)誤代碼為1007,錯(cuò)誤信息是Can't create database 'test'; database exists,這是什么意思呢,通過(guò)翻譯我們知道這個(gè)錯(cuò)誤信息是“無(wú)法創(chuàng)建數(shù)據(jù)庫(kù)test,數(shù)據(jù)庫(kù)存在”,再看看右邊,原來(lái)我們?cè)瓉?lái)是有一個(gè)叫test的數(shù)據(jù)庫(kù),所以創(chuàng)建失敗。

解決方法:
1.更換數(shù)據(jù)庫(kù)名
2.直接使用原來(lái)的數(shù)據(jù)庫(kù)
3.其他方法
總結(jié):1007是數(shù)據(jù)庫(kù)已存在的錯(cuò)誤碼
2.1050
相信很多小伙伴也會(huì)聯(lián)想到,既然創(chuàng)建數(shù)據(jù)庫(kù)時(shí)候存在一個(gè)錯(cuò)誤碼,那我創(chuàng)建一個(gè)存在的表會(huì)不會(huì)也有一個(gè)錯(cuò)誤碼,或者說(shuō)這個(gè)錯(cuò)誤碼是不是一樣的。
我的回答是:確實(shí),的確也是有一個(gè)錯(cuò)誤碼,但是這個(gè)錯(cuò)誤碼跟創(chuàng)建已存在的數(shù)據(jù)庫(kù)那個(gè)錯(cuò)誤碼是不一樣的
那我們來(lái)試試看吧,我提前創(chuàng)了一個(gè)test1的表,然后用命令創(chuàng)建一個(gè)test1的表,運(yùn)行,返回1050的錯(cuò)誤碼,以及表以及存在的錯(cuò)誤

解決方法:
1.把原來(lái)的表刪了重新建
2.把原來(lái)這個(gè)表重新改一下字段
3.換一個(gè)數(shù)據(jù)庫(kù)重新建表
4.更換表名
5.其他方法
總結(jié):1050是表已存在的錯(cuò)誤碼
3.1364
剛剛我提前創(chuàng)建的一個(gè)表是test1,下面是一些相關(guān)數(shù)據(jù)

可以看到我的id和name設(shè)置的是非空,那我插入數(shù)據(jù)的時(shí)候設(shè)置為空會(huì)怎樣?


顯然,兩個(gè)非空的字段,插入數(shù)據(jù)的時(shí)候沒(méi)有設(shè)置數(shù)據(jù),也沒(méi)有默認(rèn)值,那肯定是會(huì)出錯(cuò),返回的錯(cuò)誤碼是1364,返回的錯(cuò)誤信息是xxx字段沒(méi)有默認(rèn)值
解決方法:那么給設(shè)置一個(gè)默認(rèn)值,或者給另外一個(gè)設(shè)置一個(gè)自增就可以不需要設(shè)置了
那么就給id設(shè)置一個(gè)自增吧

再次運(yùn)行插入數(shù)據(jù),只設(shè)置了name這個(gè)數(shù)據(jù),不設(shè)置id,成功了

總結(jié):1364是存在字段沒(méi)有默認(rèn)值
4.1054
我們知道這個(gè)表的字段是id和name,那我要是插入數(shù)據(jù)的時(shí)候,插入的是不同字段名呢
我插入的字段改成username,運(yùn)行

顯然失敗了,返回的錯(cuò)誤碼是1054,錯(cuò)誤信息是未知列username
解決方法:認(rèn)真檢查輸入的字段名,看看是否對(duì)應(yīng)上了
總結(jié):1054是字段名不匹配
5.1062
我們?cè)O(shè)置的id是主鍵,主鍵是唯一標(biāo)識(shí),所以不能重復(fù),那要是我輸入重復(fù)的呢?
剛剛我們插入了一條id為1的數(shù)據(jù),那我再插入一條id為1的數(shù)據(jù)試試

返回的錯(cuò)誤碼為1062,錯(cuò)誤信息是主鍵有重復(fù)內(nèi)容“1”
解決方法:先看看哪些與數(shù)據(jù)庫(kù)原有數(shù)據(jù)的主鍵相同,把這個(gè)字段的數(shù)據(jù)更換成數(shù)據(jù)庫(kù)沒(méi)有數(shù)據(jù)
總結(jié):1062是主鍵重復(fù)
6.1366
我們?cè)O(shè)置的id是int類型的值,那如果我插入的id的數(shù)據(jù)不是int類型呢?
那我把id的數(shù)據(jù)改成字符串類型的,輸入sql語(yǔ)句運(yùn)行

返回了一個(gè)錯(cuò)誤碼1366,錯(cuò)誤信息是id的整數(shù)值不正確,說(shuō)簡(jiǎn)單就是數(shù)據(jù)類型不匹配或者字符編碼不匹配
這里int類型的數(shù)據(jù)結(jié)構(gòu),輸入的是varchar類型,所以會(huì)數(shù)據(jù)類型不匹配
有時(shí)候,定義的varchar類型,但是輸入中文字符的時(shí)候也會(huì)說(shuō)1366的錯(cuò)誤,這是因?yàn)樽址幋a不匹配,很有可能是沒(méi)有設(shè)置為utf-8格式,導(dǎo)致了字符會(huì)出問(wèn)題
解決方法:
1.認(rèn)真檢查輸入的數(shù)據(jù)類型跟該字段的數(shù)據(jù)類型是否一致
2.若數(shù)據(jù)類型限制,可以考慮更換字段的數(shù)據(jù)類型
3.如果是數(shù)據(jù)庫(kù)的字符編碼,可以把表的默認(rèn)字段編碼設(shè)置成 UTF-8
alter table 表名 convert to character set utf8
總結(jié):1366是字符編碼或者數(shù)據(jù)類型不匹配
7.1049
要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的時(shí)候,如果數(shù)據(jù)庫(kù)名寫錯(cuò)了,寫錯(cuò)了一個(gè)不存在的數(shù)據(jù)庫(kù)會(huì)返回什么錯(cuò)誤呢,我原來(lái)的數(shù)據(jù)庫(kù)是test,那我使用的數(shù)據(jù)庫(kù)的名字改成test1會(huì)怎樣?

我把要使用一個(gè)叫test1的數(shù)據(jù)庫(kù),但是我的數(shù)據(jù)庫(kù)叫test,他返回了一個(gè)1049的錯(cuò)誤,并且返回錯(cuò)誤是數(shù)據(jù)庫(kù)xxx不存在
解決方法:
1.檢查數(shù)據(jù)庫(kù)名有沒(méi)有寫錯(cuò),如果寫錯(cuò)了就改成正確的名字
2.如果你就要用這個(gè)名字,可以進(jìn)行數(shù)據(jù)庫(kù)改名
3.如果原本想要使用的(test)數(shù)據(jù)庫(kù)名原本就有其他用途,可以新建一個(gè)(test1)數(shù)據(jù)庫(kù)
總結(jié):1049是數(shù)據(jù)庫(kù)不存在
8.1146
既然數(shù)據(jù)庫(kù)寫錯(cuò)會(huì)報(bào)1049,那表呢?我數(shù)據(jù)庫(kù)test中沒(méi)有user這個(gè)表,那我要執(zhí)行查詢user的表,會(huì)發(fā)生什么呢?

結(jié)果是返回了1146的錯(cuò)誤碼,并且說(shuō)test數(shù)據(jù)庫(kù)下的user表不存在,有人會(huì)多問(wèn)一句,為什么要說(shuō)明是test數(shù)據(jù)庫(kù)下呢,因?yàn)槊總€(gè)數(shù)據(jù)庫(kù)下的表之間是互不干擾的,不同的數(shù)據(jù)庫(kù)是可以有同名的表的,所以可能其他數(shù)據(jù)庫(kù)有user表,但是數(shù)據(jù)庫(kù)test沒(méi)有,你在數(shù)據(jù)庫(kù)test中對(duì)這個(gè)user表進(jìn)行操作的時(shí)候就會(huì)出現(xiàn)這樣的錯(cuò)誤
解決方法:
1.檢查數(shù)據(jù)庫(kù)名有沒(méi)有寫錯(cuò),如果寫錯(cuò)了就改成正確的名字
2.如果表名沒(méi)有,但是你就想用這個(gè)表,可以新建一個(gè)表
3.寫可能想要查的表不在這個(gè)數(shù)據(jù)庫(kù),更換數(shù)據(jù)庫(kù)名并且重新查詢
總結(jié):1146是當(dāng)前數(shù)據(jù)庫(kù)下xxx表不存在
結(jié)語(yǔ)
其實(shí)數(shù)據(jù)庫(kù)的錯(cuò)誤碼不止這么點(diǎn),上面只是提出了一小部分的,完整的錯(cuò)誤碼可是有上萬(wàn)個(gè)呢,所以說(shuō),我們只需要記住幾個(gè)常見的,結(jié)合數(shù)據(jù)庫(kù)的錯(cuò)誤,就可以快速的定位錯(cuò)誤,從而解決問(wèn)題,想要查更多的錯(cuò)誤碼,可以看另一篇的文章,里面有上萬(wàn)個(gè)數(shù)據(jù)庫(kù)錯(cuò)誤碼,可以根據(jù)自己遇到的錯(cuò)誤碼對(duì)照那個(gè)表來(lái)查到對(duì)應(yīng)的錯(cuò)誤,從而分析如何解決問(wèn)題