2013-02-20 72 views
-2

我對MySQL有點新。我嘗試使用set命令來計算列來計算新列,但它不是執行(1064錯誤)。MySQL上的計算列創建表查詢字符串

所以我的問題是: -

是否有可能添加查詢與創建計算列創建表查詢字符串?如果是,那麼如何?如果沒有,那麼爲什麼。什麼應該是這個最好的選擇。

我想,我也可以使用TRIGGER來實現這個,但我試圖避免這個。 Here就是一個很好的例子,但這不適用於要插入的數據。

我曾試圖以此爲遵循

create table `call_detail` (`service_key` integer not null, 
`called` datetime not null, 
`called_stamp` integer not null 
     SET (1 if HOUR(`called`)<10 else 2 if HOUR(`called`)<16 else 3 if HOUR(`called`)<24 
      else -1), 
PRIMARY KEY (`service_key`) 
); 

回答

0

這是

  1. 不可能
  2. 和你的語法是完全錯誤的
  3. _date從哪裏來?

我建議你爲此使用VIEWs。通過這種方式,您不會丟失以後可能需要的信息,並且仍然可以獲得所需的信息。

CREATE VIEW v_call_detail AS 
SELECT 
c.*, 
CASE WHEN HOUR(created_modified) < 10 THEN 1 
    WHEN HOUR(created_modified) BETWEEN 10 AND 15 THEN 2 
    WHEN HOUR(created_modified) BETWEEN 16 AND 23 THEN 3 
    ELSE -1 
END AS called_stamp 
FROM 
call_detail c 

這假定您的表中有一列created_modified,指示何時插入或修改了行。創建該表是這樣的:

create table `call_detail` (`service_key` integer not null, 
`called` datetime not null, 
created_modified timestamp default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`service_key`) /*changed primary key, since you don't have a column `_ID`*/ 
); 
+0

但由此我必須在向父表添加數據後頻繁地執行視圖維護,如果可能避免... – nKandel 2013-02-20 12:41:04

+0

查看維護?不是當你添加行時。當您經常添加列時,您肯定應該重新考慮您的數據庫設計。 – fancyPants 2013-02-20 12:53:12

0

MySQL沒有計算列這樣的,線程要鏈接到是MSSQL。

你有幾個選擇這裏,因爲我看到它

  • 使用觸發器來更新列
  • 創建一個視圖
  • 設置一個cron作業定期更新表
+0

是的,我知道......其實我提供不計算列中的鏈接,它改變表並添加列...反正感謝的答案,雖然我我就不會想到這是答案 – nKandel 2013-02-20 12:33:45

+0

您正在鏈接的線程會更改表格並添加計算列。這在MySQL中是不可能的。 – hank 2013-02-20 12:38:11