問題描述
我有一個 PHP/MySQL 應用程序.我正在尋找一種自動方式升級應用程序背后的數據庫.升級后,我不需要與舊版本兼容.
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 應用程序實現這一點.
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..
您要做的是創建一個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
)
在您的數據庫可以跟蹤它的版本后#它可以自動進行 SQL 升級.
After your database can track what version # it is on - it can do SQL upgrades automatically.
您應該在升級架構時鎖定架構表.這樣您就不會同時有兩個請求嘗試升級您的架構.
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.
所以 - 跟蹤你要升級的版本 - 構建一個大開關 - 像這樣:
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
這篇關于如何為 PHP/MySQL 應用程序自動遷移(架構和數據)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!