問題描述
我有一個 PHP/MySQL 應(yīng)用程序.我正在尋找一種自動方式升級應(yīng)用程序背后的數(shù)據(jù)庫.升級后,我不需要與舊版本兼容.
I have an application in PHP/MySQL. I am searching for an automated way upgrading database behind the application. I don't need to have the compatibility with older versions once it is upgraded.
我已閱讀 jeff's 和 K.Scott Allen 的 文章.
I have read jeff's and K. Scott Allen's articles on this.
我仍然不確定如何為 PHP/MySQL 應(yīng)用程序?qū)崿F(xiàn)這一點(diǎn).
I am still not sure how to implement this for a PHP/MySQL application.
有沒有什么簡單又好的流程呢?
Is there any simple and good process for this?
推薦答案
我有一個我使用的Schema"對象 - 但你可以在沒有類的情況下做同樣的事情..
I have a "Schema" object that I use - but you could do the same without classes..
您要做的是創(chuàng)建一個db_schema_versions
"表:
What you want to do is create a 'db_schema_versions
' table:
CREATE TABLE db_schema_versions (
`table` varchar(255) NOT NULL PRIMARY KEY,
`version` INT NOT NULL
)
在您的數(shù)據(jù)庫可以跟蹤它的版本后#它可以自動進(jìn)行 SQL 升級.
After your database can track what version # it is on - it can do SQL upgrades automatically.
您應(yīng)該在升級架構(gòu)時鎖定架構(gòu)表.這樣您就不會同時有兩個請求嘗試升級您的架構(gòu).
You should lock your schema table while upgrading schema. This way you wont have two requests at the same moment trying to upgrade your schema.
所以 - 跟蹤你要升級的版本 - 構(gòu)建一個大開關(guān) - 像這樣:
So - keep track of the version you are upgrading from - build a big switch - something like this:
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
這篇關(guān)于如何為 PHP/MySQL 應(yīng)用程序自動遷移(架構(gòu)和數(shù)據(jù))的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!