2016-04-13 38 views
1

我試圖通過創建列自動增量來跟蹤點/統計。但是,它不能按我的需要工作。如果行得到更新,我希望它自動增加,而不是如果添加了新行。例如,如果我運行update命令,它將只爲我更新的行添加一個「count」列。 如果我添加一個新行,它將從0開始!MySQL/SQL遞增列

這裏是我的代碼創建一個表:

statement = connection.prepareStatement(
       "CREATE TABLE IF NOT EXISTS stats" + 
         "(" + 
         "id varchar(100) not null," + 
         "count int not null auto_increment," + 
         "PRIMARY KEY (id)," + 
         "KEY (count)" + 
         ")" 
     ); 
     statement.execute(); 

這是我如何更新到一個特定的行:

connection = plugin.getHikari().getConnection(); 
       statement = connection.prepareStatement("INSERT INTO stats (id) VALUES(?) ON DUPLICATE KEY UPDATE id=?"); 
       statement.setString(1, id.toString()); 
       statement.setString(2, id.toString()); 
       statement.execute(); 

感謝, - Nicster

+0

而在更新它不能從表中選擇相同的查詢,所以這可能會有點毛毛。 –

回答

0

1)從`count`列中刪除AUTO_INCREMENT屬性。

AUTO_INCREMENT不適合您試圖實現的目標。

2)DEFAULT 1添加到`count`柱

的定義當一個新的行被插入到表中,併爲`count`柱沒有被提供的值,則默認值將分配給該列。

3)重新編寫INSERT語句遞增當嘗試添加重複的`count`列`id`值

INSERT INTO atickets_stats (id) 
VALUES (?) 
ON DUPLICATE KEY 
UPDATE count = count + 1 ; 
+0

你能幫忙在這個查詢,它是如何工作的? –

+0

當INSERT語句運行時,它會嘗試向表中添加一個新行。如果表中已經存在一個具有「id」值,與INSERT中爲「id」提供的值相匹配的表中的行,由於PRIMARY KEY(唯一約束),INSERT將拋出「重複鍵」異常'id'列。如果發生這種情況,語句的ON DUPLICATE KEY部分將被觸發。並執行相當於「UPDATE atickets_stats SET count = count + 1 WHERE id =?」的操作。 (具有該特定id值的行將被更新。計數列的當前值增加1. – spencer7593

+0

我在ON附近有語法錯誤 –

1

使用在這種情況下更新觸發器。將默認值設置爲1.並在每次更新時使用觸發器更新/增加1。

+0

Whatya是什麼意思? – Nicster15

0

我不知道爲什麼你有這個問題。你很近,恕我直言。所有你需要做的就是讓countINT NOT NULL默認0。然後,你應該總是做INSERT ON DUPLICATE KEY UPDATE象下面這樣:

CREATE TABLE IF NOT EXISTS atickets_stats (
    `id` VARCHAR(100) NOT NULL, 
    `count` INT(11) UNSIGNED NOT NULL DEFAULT 0, 
    PRIMARY KEY (`id`) 
); 

INSERT INTO atickets_stats (id) VALUES(1) ON DUPLICATE KEY UPDATE count = count + 1; 

注意,我改變了count列是INT(11) UNSIGNED,因爲我認爲你永遠不會保存負價值在這裏。如果您有負值,您可以取出UNSIGNED