2010-07-26 60 views
1

我在Perl中進行文件解析並插入MySQL數據庫中的表中。例如,我有以下字段:如何在MySQL中保持列的唯一值?

S.No ,PCID,USERNAME, TIME INFORMATION. 
1  203 JANE  22:08 updation 
2  203 JANE  22:09 deletion 
3  203 JANE  22:10 insertion 

在這個表我想有PCID是唯一的,USERNAME是唯一的。 S.No是獨一無二的,因爲我已將它設置爲自動編號並且它是主鍵。現在我的問題是:

如果我添加PCIDUSERNAME作爲複合主鍵,我仍然在表中找到重複項。沒有變化。相同的o/p。應該做些什麼來消除重複?我應該用Perl編碼以在插入之前檢查重複項嗎?

請指導並提供幫助。提前致謝。

回答

1

您希望S.No保持主鍵和PCID + USERNAME是唯一的,所以靠近什麼Hammerite說:

ALTER TABLE MyTable 
    ADD PRIMARY KEY (`S.No`), 
    ADD UNIQUE KEY `PCID_USER_uk` (`PCID`, `USERNAME`); 
2

我假設你希望每列都是唯一的,而不是每個組合鍵都是唯一的。使用列上唯一約束,應該是唯一的:

我不知道,如果你添加一個唯一約束到MySQL對沒有按」一欄會發生什麼已經有獨特的價值。您可能必須先執行手動清理,才能讓您添加約束。

你絕對不應該在Perl中這樣做。良好的數據驅動應用程序旨在使應用程序的所有邏輯儘可能接近數據模型。這一個屬於數據庫端。

+0

我做了清理,並給這個獨特的constraint.?But問題插入不允許在同一行中的不同字段.. ?? 如何解決此問題 – Sreeja 2010-07-26 12:31:34

+0

發佈錯誤消息。 – masonk 2010-07-26 18:52:20

+0

DBD :: mysql :: st執行失敗:在function.pl行55,第17行處鍵2的重複條目'203'。 – Sreeja 2010-07-27 05:00:43

1
ALTER TABLE MyTable DROP PRIMARY KEY 

ALTER TABLE MyTable 
    ADD PRIMARY KEY (`S.No`), 
    ADD UNIQUE KEY `PCID_uk` (`PCID`), 
    ADD UNIQUE KEY `USERNAME_uk` (`USERNAME`) 

如果你想導入的文件包含重複的值,並且要被丟棄的重複值,使用IGNORE關鍵字。如果您使用LOAD DATA INFILE那麼這是使用的語法像這樣實現的:

LOAD DATA INFILE 'file_name' IGNORE INTO TABLE ... 

this documentation page

+0

我已經嘗試使用獨特的鑰匙。問題是隻有第一行從文件插入到表中。之後,我得到一個錯誤sayng重複發現.... – Sreeja 2010-07-26 18:00:36

+0

S.No,PCID,USERNAME,時間信息。 1 203 JANE 22:08更新用 2 22:09刪除 3 22:12修改 它不應該允許PCID和名稱的重複,但SHLD允許類型和時間去插入... – Sreeja 2010-07-26 18:13:04

+0

你有沒有看遍該文件來檢查,實際上沒有任何重複值? – Hammerite 2010-07-26 20:21:49

相關問題