一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 企業(yè) > > 正文

mysql錯(cuò)誤1064怎么修改?mysql數(shù)據(jù)庫如何處理重復(fù)數(shù)據(jù)?

來源:科技時(shí)報(bào)網(wǎng) 時(shí)間:2023-06-02 11:18:34

mysql錯(cuò)誤1064怎么修改?

01

首先我們?cè)趍ysql數(shù)據(jù)庫中準(zhǔn)備一個(gè)數(shù)據(jù)表,并且往數(shù)據(jù)表中插入數(shù)據(jù)

02

然后我們編寫如下圖所示的查詢語句并且執(zhí)行,你就會(huì)發(fā)現(xiàn)執(zhí)行結(jié)果報(bào)出了1064錯(cuò)誤

03

回到查詢語句中我們發(fā)現(xiàn)Select單詞拼寫錯(cuò)誤了SQL語句的語法錯(cuò)誤都會(huì)導(dǎo)致1064錯(cuò)誤的出現(xiàn)

04

最后解決這個(gè)錯(cuò)誤就很簡單了,我們只需要把SQL語句寫正確即可

mysql數(shù)據(jù)庫如何處理重復(fù)數(shù)據(jù)?

方法一:防止出現(xiàn)重復(fù)數(shù)據(jù)

也就是說我們?cè)僭O(shè)計(jì)表的時(shí)候,就應(yīng)該對(duì)這些數(shù)據(jù)設(shè)置一個(gè)UNIQUE 索引,在插入的時(shí)候就可以保證其唯一性,也就不存在有重復(fù)的數(shù)據(jù)了。當(dāng)然你也可以直接設(shè)置為PRIMARY KEY(主鍵)。效果也是一樣的。我們看一個(gè)案例:下表中無索引及主鍵,所以該表允許出現(xiàn)多條重復(fù)記錄。

CREATE TABLE student

(

first_name CHAR(20),

last_name CHAR(20),

sex CHAR(10)

);

目前first_name,last_name是可以重復(fù)的,如果不想重復(fù)這里有兩個(gè)解決辦法:

1、設(shè)置雙主鍵模式

CREATE TABLE student

(

first_name CHAR(20) NOT NULL,

last_name CHAR(20) NOT NULL,

sex CHAR(10),

PRIMARY KEY (last_name, first_name)

);

現(xiàn)在就無法插入重復(fù)數(shù)據(jù)了。

2、添加unique索引

CREATE TABLE student

(

first_name CHAR(20) NOT NULL,

last_name CHAR(20) NOT NULL,

sex CHAR(10)

UNIQUE (last_name, first_name)

);

這兩種看起來形式好像有一點(diǎn)區(qū)別,但是能起到相同的作用。此時(shí)我們可以插入兩條重復(fù)的數(shù)據(jù),會(huì)發(fā)現(xiàn)報(bào)錯(cuò)。

當(dāng)然我們還可以在數(shù)據(jù)庫中去驗(yàn)證一下:

SELECT COUNT(*) as repetitions, last_name, first_name

FROM student

GROUP BY last_name, first_name

HAVING repetitions > 1;

在這里我們統(tǒng)計(jì)的是 first_name 和 last_name的重復(fù)記錄數(shù),上面已經(jīng)用兩種方法設(shè)置了,這里肯定就是0了。

方法二:在插入時(shí)指定能否插入重復(fù)數(shù)據(jù)

在這里我們使用的是Insert ignore into 與Insert into指令。

(1)Insert ignore into會(huì)忽略數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù),如果數(shù)據(jù)庫沒有數(shù)據(jù),就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過這條數(shù)據(jù)。這樣就可以保留數(shù)據(jù)庫中已經(jīng)存在數(shù)據(jù),達(dá)到在間隙中插入數(shù)據(jù)的目的。

(2)Insert into則直接相反,會(huì)直接插入數(shù)據(jù),不管數(shù)據(jù)庫里面是否含有重復(fù)數(shù)據(jù)。

我們還是舉例說明:

insert ignore into student (last_name, first_name) values ( '張三', '李四');

//結(jié)果

Query OK, 1 rows affected (0.00 sec)

insert ignore into student (last_name, first_name) values ( '張三', '李四');

//結(jié)果

Query OK, 0 rows affected (0.00 sec)

現(xiàn)在我們看出來了吧,也就是說在執(zhí)行第一條插入操作的時(shí)候,看到數(shù)據(jù)庫沒有,則直接插入一條新紀(jì)錄,因此一行記錄受到影響,但是在第二次插入的時(shí)候,數(shù)據(jù)庫已經(jīng)有一條一樣的了,因此便不會(huì)插入了,0行受到影響。 當(dāng)然了還有一個(gè)指令也可以完成類似于insert ignore into相似的功能,那就是replace into。他表示的是如果存在primary 或 unique相同的記錄,則先刪除掉。再插入新記錄。

方法三:過濾重復(fù)數(shù)據(jù)

如果你需要讀取不重復(fù)的數(shù)據(jù)可以在 SELECT 語句中使用 DISTINCT 關(guān)鍵字來過濾重復(fù)數(shù)據(jù)。

SELECT DISTINCT last_name, first_name

FROM student

ORDER BY last_name;

你也可以使用 GROUP BY 來讀取數(shù)據(jù)表中不重復(fù)的數(shù)據(jù):

SELECT last_name, first_name

FROM student

GROUP BY (last_name, first_name);

方法四:刪除重復(fù)數(shù)據(jù)

這種情況其實(shí)就相當(dāng)于,在水的終點(diǎn)處去解決。看下面sql語句:

//根據(jù)student創(chuàng)建一個(gè)臨時(shí)表,并使用group by過濾了重復(fù)數(shù)據(jù)

CREATE TABLE tmp SELECT last_name, first_name, sex

FROM student;

GROUP BY (last_name, first_name);

//刪除原student表

DROP TABLE student;

//給這個(gè)臨時(shí)表重新命名

ALTER TABLE tmp RENAME TO stu;

當(dāng)然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復(fù)記錄。方法如下:

ALTER IGNORE TABLE student

ADD PRIMARY KEY (last_name, first_name);

OK,解決辦法這么多,相信能解決你的問題。

責(zé)任編輯:

標(biāo)簽: mysql錯(cuò)誤1064怎么修改 mysql數(shù)據(jù)庫如

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 肥乡县| 大庆市| 南川市| 留坝县| 广元市| 离岛区| 澄城县| 将乐县| 黄大仙区| 浦东新区| 确山县| 竹北市| 布尔津县| 迁西县| 泾源县| 晋江市| 江陵县| 略阳县| 炎陵县| 延长县| 兴城市| 中阳县| 宕昌县| 房山区| 大名县| 荆州市| 平利县| 临洮县| 宝坻区| 安仁县| 阳城县| 鄂尔多斯市| 平和县| 巧家县| 共和县| 札达县| 镶黄旗| 乐东| 绥化市| 望城县| 高台县|