2013-02-20 41 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