我有一个 PHP/MySQL 应用程序。我正在寻找一种自动方式升级应用程序背后的数据库。 升级后我不需要兼容旧版本。
我已阅读 jeff's和 K. Scott Allen's这方面的文章。
我仍然不确定如何为 PHP/MySQL 应用程序实现这一点。
有没有什么简单又好的流程呢?
最佳答案
我有一个我使用的“Schema”对象——但是你可以在没有类的情况下做同样的事情..
您要做的是创建一个“db_schema_versions
”表:
CREATE TABLE db_schema_versions (
`table` varchar(255) NOT NULL PRIMARY KEY,
`version` INT NOT NULL
)
在您的数据库可以跟踪它所处的版本之后 - 它可以自动进行 SQL 升级。
您应该在升级模式时锁定您的模式表。这样您就不会同时有两个请求来尝试升级您的架构。
所以 - 跟踪您要升级的版本 - 构建一个大开关 - 像这样:
class SNTrack_Db_Schema extends MW_Db_Schema_Abstract {
protected $table = "sntrack_db_schema";
protected $version = 5;
protected function upgrade($fromVersion) {
// don't break
switch($fromVersion) {
case 0:
$this->db->query('CREATE TABLE sntrack_inbound_shipment (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`from` VARCHAR(255) NOT NULL,
`date` DATE NOT NULL,
`invoice` VARCHAR(255) NOT NULL,
`notes` TEXT
)');
$this->setVersion(1);
case 1:
$this->db->query('ALTER TABLE sntrack_details ADD `shipment_id` INT');
$this->db->query('ALTER TABLE sntrack_product ADD `inventory` INT NOT NULL DEFAULT 0');
$this->db->query('CREATE TABLE sntrack_inventory_shipment (
`shipment_id` INT NOT NULL,
`product_id` INT NOT NULL,
`qty` INT NOT NULL,
PRIMARY KEY (`shipment_id`, `product_id`)
)');
$this->setVersion(2);
...etc
关于php - 如何为 PHP/MySQL 应用程序自动迁移(架构和数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825787/