如果我在MySQL中有一个包含几列的表,并希望创建一个永久列,它是另外两列的总和(类似于每行的预设值的alter table语句),我该怎么做?
E.g。
ColumnA, ColumnB, ColumnC
1, 21, 41
4, 81, 12
我希望D列是A列和B列的总和,并且是永久性的。我知道我可以运行一个只是'选择ColumnA,ColumnB,ColumnA + ColumnB AS ColumnD From MyTable'的查询,但这不会使D列成为表的永久部分。
答案 0 :(得分:3)
为什么不创建如下的视图。好吧,它不会存储数据,除非你把它作为参数化视图,并且每当你说select * from myview
时它会触发select对基表,但仍然是一个有效的选项。
create view myview
as
Select ColumnA, ColumnB, ColumnA+ColumnB AS ColumnD From MyTable
否则,您可以像下面一样完全维护一个单独的表。
create table derivedtable
as
Select ColumnA, ColumnB, ColumnA+ColumnB AS ColumnD From MyTable
或者,在您的表格中设置columnD int null
并创建after insert
触发器并填充该列,如
CREATE TRIGGER `trg_calc`
AFTER INSERT ON `MyTable`
FOR EACH ROW
UPDATE `MyTable` SET `ColumnD` = ColumnA+ColumnB
WHERE `id` = NEW.id;
假设您的表具有唯一的id列。
答案 1 :(得分:0)
在mysql中没有简单的方法可以做到这一点。如果你真的想要列,那么触发器将是你最好的选择。
在查询中添加一些表达式也可能没问题。请记住,DBMS通常花费大部分时间等待磁盘提供更多记录来进行咀嚼。如果处理这些记录需要更长的时间,您可能在查询中看不到任何额外的时间。从本质上讲,如果没有更多的工作要做,DBMS就会一直在睡觉或忙着等待。
最后,如果确实需要提前进行计算,并且您希望比几个触发器更容易使用,则可以切换数据库供应商:
wiki文章了解更多信息:http://en.wikipedia.org/wiki/Virtual_column