MySQL-如何使列成为来自不同表的其他两列的总和?

MySQL-如何使列成为来自不同表的其他两列的总和?,mysql,sql,Mysql,Sql,我是MySQL和数据库的新手。是否可以创建一个表,其中一列是来自另外两个表的另外两列的总和。 例如,如果我有数据库书籍: CREATE TABLE `books` ( `book_id` int(100) NOT NULL, `book_name` varchar(20) NOT NULL, `book_author` varchar(20) NOT NULL, `book_co-authors` varchar(20) NOT NULL, `book_edition` ti

我是MySQL和数据库的新手。是否可以创建一个表,其中一列是来自另外两个表的另外两列的总和。 例如,如果我有数据库书籍:

CREATE TABLE `books` (
  `book_id` int(100) NOT NULL,
  `book_name` varchar(20) NOT NULL,
  `book_author` varchar(20) NOT NULL,
  `book_co-authors` varchar(20) NOT NULL,
  `book_edition` tinyint(4) NOT NULL,
  `book_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `book_amount` int(100) NOT NULL COMMENT 'Amount of book copies in both University libraries'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如何使列
book\u amount
成为
library1
library2
表中
book\u id=book\u id
的两列
book\u amount
的总和? 图书馆1:

CREATE TABLE `library1` (
  `book_id` int(11) NOT NULL,
  `book_amount` int(11) NOT NULL,
  `available_amount` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

只要列是有效的,就可以使用任何类型定义列,然后使用其他表中的数据填充它。这通常被称为“非规范化”,因为在理想情况下,您需要将数据存储在其他表中,并根据需要进行计算,这样就不会出现保存的值与源数据不同步的情况

您还可以定义一个
视图
,它类似于一个保存的查询,其行为类似于一个表。这可以做各种事情,比如动态查询其他表,并将结果显示为列。“物化视图”是一些数据库支持的一种视图,它根据一些隐式触发器自动更新和保存视图。非物化视图速度较慢,但在您的情况下,速度差异可能不是什么大问题

所以你可以选择如何表达它


需要注意的一点是,您应该使用
INT
作为默认的“整数”字段,而不是像
INT(100)
这样不可靠的东西。整数字段的数字指定了您期望的有效数字的数量,并且由于
INT
最多只能存储11个,这是非常不符合要求的。

不是直接的,但是有几种方法可以实现您想要的

在select子句中创建一个psuedo列,该列将添加其他两列

select *, columna+columnb AS `addition` from books
不要忘记将
columna
columnb
替换为列的名称,并将
添加到您希望psuedo列具有的名称

或者,您可以使用视图以相同的方式自动添加psuedo字段。但是,视图没有索引,因此在视图中执行查找和加入索引可能会变得非常缓慢


您还可以使用触发器在插入和更新时设置值,或者简单地计算插入数据库的语言中的值。

如果
library1
library2
表具有与表
books
类似的模式,则以下查询将起作用:

Insert into books
    select l1.book_id,
           l1.book_name,
           l1.book_authors,
           l1.book_co_authors,
           l1.book_edition,
           l1.book_creation,
           (l1.book_amount + l2.book_amount)
    from library1 l1
    inner join library2 l2
    on l1.book_id = l2.book_id
    group by l1.book_id
    ;

因此,所有其他列都位于具有samme数据类型的表
library1
library2
中?请参阅