mysql - 如何继承mysql表

标签 mysql inheritance

我在一个数据库中有 30 个表,都是 InnoDB。他们有他们的结构。

我想做的实际上是将波纹管列添加到每个表中。

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text COLLATE utf8_unicode_ci NOT NULL,
 `description` text COLLATE utf8_unicode_ci NOT NULL,
 `categoryId` int(11) NOT NULL,
 `imageId` int(11) NOT NULL,
 `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `createdId` int(11) NOT NULL,
 `updatedId` int(11) NOT NULL,
 `allowedEmployeeIds` text COLLATE utf8_unicode_ci NOT NULL,

在编程语言(假设是 PHP)中,通常的方法是创建一个抽象类,将所有公共(public)变量放在那里,然后从中继承。 MySQL呢?我应该怎么做?

由于设计原因,我不可能创建一个commonData 表并使用外键/连接。请注意,我是从头开始编写创建语句的,因此不需要更新。

最佳答案

我会仔细考虑这个问题——它很复杂,并且会为您尝试做的事情增添光彩。以后会增加很多工作。

但如果你真的想这样做,实现它的方法不是把它放在表定义中,而是创建一个脚本,可以将这些列添加到表中。。 p>

类似于:

ALTER TABLE table_name
ADD `id` int(11) NOT NULL AUTO_INCREMENT,
ADD `name` text COLLATE utf8_unicode_ci NOT NULL,
ADD `description` text COLLATE utf8_unicode_ci NOT NULL,
ADD `categoryId` int(11) NOT NULL,
ADD `imageId` int(11) NOT NULL,
ADD `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
ADD `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
ADD `createdId` int(11) NOT NULL,
ADD `updatedId` int(11) NOT NULL,
ADD `allowedEmployeeIds` text COLLATE utf8_unicode_ci NOT NULL;

然后只需为您拥有的每个表执行此脚本。

如果您想编写一个脚本来对所有表执行此操作,请使用以下命令:

SHOW TABLES;

查找所有表。然后循环遍历所有表并对所有表执行更改脚本。

关于mysql - 如何继承mysql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661156/

相关文章:

mysql - 无法更改 MySQL 密码

matlab - 复制子类对象的父类(super class)部分

sql - 数据库设计中的继承

java - 内存如何分配以及什么存储在哪里? : Java Inheritance

php - 如何使用 Join 将最后插入的单列与子表中的多个值进行匹配

mysql - 如何将WordPress的UberMenu中的子菜单直接添加到数据库中(内存不足错误)

python - 查询集合

MySQL触发器如何在项目数量变为0时用current_timestamp更新finished_date

c# - 设计良好的类和层次结构

c++ - 关于多重继承和虚继承