2012-02-01 100 views
-2

我已經具有以下屬性下面的模式:MySQL查詢檢索數據

USER(TABLE_NAME) 
USER_ID|USERNAME|PASSWORD|TOPIC_NAME|FLAG1|FLAG2 

我已經基本上兩個問題:

  1. 我怎樣才能讓一個屬性USER_ID作爲主鍵,它應該在每次將值插入到數據庫的 時自動遞增值。它不應該在我的控制之下。

  2. 我怎樣才能從數據庫中檢索的記錄,根據最新的 時間從它被更新。(例如,如果我下午2點和相同的記錄在下午3點更新記錄 ,如果我在下午4點現在檢索我應該得到 這是在下午3點更新記錄,即最新的更新之一。)

請幫助。

+1

您正在使用哪個數據庫? Mysql還是Oracle? – 2012-02-01 16:40:23

回答

2

我假設問題一是在MYSQL的上下文中。所以,你可以使用ALTER TABLE語句來標記字段作爲主鍵,將其標爲自動增量

ALTER TABLE User 
    ADD PRIMARY KEY (USER_ID); 

ALTER TABLE User 
    MODIFY COLUMN USER_ID INT(4) AUTO_INCREMENT; -- of course, set the type appropriately 

對於第二個問題,我不知道我理解正確,所以我只是要繼續前進,在給出一個可能會讓你困惑的答案之前給你一些基本信息。

當您多次更新相同的記錄時,只有最近的更新持久。基本上,一旦你更新記錄,它以前的值不會保留。因此,如果您在下午2點更新記錄,然後在下午3點更新相同記錄 - 當您查詢記錄時,您將自動收到最新值。

現在,如果通過更新你的意思是你會爲相同的USER_ID多次插入新值並且想要檢索最近的值,那麼你需要使用表中的一個字段來存儲每個記錄的時間戳記創建/更新。然後您可以根據時間戳查詢最近的值。

0
  1. 您可以使用這樣的事情:

    CREATE TABLE IF NOT EXISTS userUSER_ID unsigned int類型(8)NOT NULL AUTO_INCREMENT, username VARCHAR(25)NOT NULL, password VARCHAR(25 )NOT NULL, topic_name VARCHAR(100)NOT NULL, flag1 SMALLINT(1)NOT NULL DEFAULT 0, flag2 SMALLINT(1)NOT NULL DEFAULT 0, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(uid) )ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

  2. 對於選擇使用查詢:

    SELECT * FROM user ORDER BY update_time DESC

1

我假設你正在談論甲骨文,因爲你標記它作爲甲骨文。您還將問題標記爲MySQL,其中的方法會有所不同。

可以使USER_ID列主鍵

ALTER TABLE <<table_name>> 
    ADD CONSTRAINT pk_user_id PRIMARY KEY(user_id); 

如果你想要的值自動遞增,你需要創建一個序列

CREATE SEQUENCE user_id_seq 
    START WITH 1 
    INCREMENT BY 1 
    CACHE 20; 

,然後創建一個觸發器使用該序列的表格

CREATE OR REPLACE TRIGGER trg_assign_user_id 
    BEFORE INSERT ON <<table name>> 
    FOR EACH ROW 
BEGIN 
    :new.user_id := user_id_seq.nextval; 
END; 

至於你的第二個任務離子,我不確定我的理解。如果更新一行然後提交該更改,則後續所有查詢都將讀取更新後的數據(除非您設置了可序列化的事務隔離級別,而且您的事務運行了多個小時,在該事務中重新運行該查詢)。您無需執行任何操作即可查看當前數據。

1

(基於MySQL的答案;如果使用Oracle,但SQL可能會是不同的概念上類似的答案。)

  1. 如果USER_ID沒有被定義爲一個主鍵或自動在表的時間遞增創建,那麼你可以使用:

    ALTER TABLE tablename MODIFY USER_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

  2. 要發佈基於記錄日期的查詢,您必須定義一個字段來保存date-related datetypes。記錄修改的日期和時間可以根據您訪問記錄的方式進行管理(例如添加/更改)(某些與PHP相關的方式?根據您的問題,您不清楚正在使用哪些腳本)一旦你有記錄日期,你可以ORDER BY你的SELECT查詢中的日期字段。

0
  1. 檢查了這一點 爲了您的AUTOINCREMENT,Its a question already asked here
    爲您的主鍵使用該 ALTER TABLE USER ADD PRIMARY KEY (USER_ID)

  2. 你能否提供更多的信息。如果價值得到更新,你肯定沒有你在2點輸入的舊值,以dB表示。所以查詢它會很好