今天,我們來聊聊如何正確地建構 MySQL 資料庫。如果你跟我一樣,剛開始都是手動一行行寫 SQL ,那麼今天這篇文章會徹底改變你的做法!我們從 MySQL Workbench 的安裝開始,再到介紹 Sequelize,最後再深度探討如何用 Migration 和 Seeder 來管理資料庫。透過這些方法,你將能更輕鬆地應對後端開發中的資料庫變更。
首先,我們需要安裝 MySQL 資料庫。到 MySQL 官網 下載並安裝最新版本。安裝過程中,可以選擇預設設定,完成後,你就有了本地的 MySQL 伺服器。
接著,我們要安裝 MySQL Workbench 這個好用的工具,像是我就覺得超級方便。到 MySQL Workbench 官網 下載並安裝。完成安裝後,你就能用它來視覺化地操作資料庫,輕鬆建立資料表、執行查詢和管理資料。
如果你曾經手動一行行地寫 SQL 來建立資料表,那麼你應該懂得這種方式有多耗時、繁瑣。我還記得剛開始學習後端開發的時候,對資料庫的概念也不是很清楚。當時覺得,啊,這不就是寫 SQL 嗎?一行一行地把資料表建立起來,然後 INSERT 資料,更新、刪除,好像挺簡單的。
這種想法,很快就讓我掉入了一個巨大的坑裡。
剛開始你可能覺得,反正我只有幾個資料表,手動寫幾條 SQL 也沒什麼大不了的。但是隨著專案變得越來越複雜,你的資料庫也開始膨脹,這時候問題就出現了。
手動寫 SQL 的第一個問題是當你需要對資料庫結構進行變更時,整個過程會變得非常混亂。比如,突然需要在某個資料表中新增一個欄位、修改一個欄位類型或刪除一個已經不需要的欄位。這些看似簡單的操作,實際上需要你仔細核對所有的資料表,然後手動撰寫對應的 ALTER TABLE 語句。如果你的 SQL 寫錯了,可能還會導致資料遺失或數據錯誤!
我還記得自己曾經花了大半天的時間,去修改一個資料表的結構,為每個欄位對應不同的需求寫 SQL。過程中反覆改錯,又要重新執行,完全浪費了我的開發時間。
當你的專案變大,開始有團隊成員加入時,手動寫 SQL 的問題就更加明顯了。每個人可能都在自己的分支上手動修改 SQL,這意味著當你需要合併大家的內容時,SQL 的版本差異會變得無比混亂。
Sequelize 是一個用 JavaScript 操作 MySQL 資料庫的 ORM 工具,讓你不用一行行手寫 SQL,就能管理資料庫。透過 Sequelize,你可以用程式碼來處理資料庫操作,讓操作更直觀。
當我們用 Sequelize 管理資料庫時,Migration 和 Seeder 是不可或缺的工具:
首先,安裝 Sequelize 和 Sequelize CLI 工具:
npm install sequelize sequelize-cli
接著,使用以下指令來初始化專案,這樣就會自動生成所需的資料夾結構:
npx sequelize-cli init
設定好 config/config.json
檔
透過 Migration,我們可以輕鬆建立資料表。首先,用 CLI 生成 Migration 檔案:
npx sequelize-cli migration:generate --name create-users-table
然後打開生成的 Migration 檔案,撰寫資料表的結構:
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
},
username: {
type: Sequelize.STRING,
allowNull: false,
},
email: {
type: Sequelize.STRING,
allowNull: false,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
Seeder 可以幫助你快速插入假資料,讓開發過程更加順利。生成 Seeder 的指令如下:
npx sequelize-cli seed:generate --name demo-user
打開生成的 Seeder 檔案,插入測試用的假資料:
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.bulkInsert('Users', [
{
username: 'testuser',
email: 'test@example.com',
createdAt: new Date(),
updatedAt: new Date(),
},
]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.bulkDelete('Users', null, {});
}
};
最後,我們來執行 Migration 和 Seeder,將資料表和假資料寫入資料庫:
npx sequelize-cli db:migrate
npx sequelize-cli db:seed:all
執行完畢後,資料庫就會按照你定義的結構建立,並插入測試資料,這樣開發過程就更加輕鬆了。
透過 Sequelize 以及 Migration 和 Seeder,你可以徹底擺脫手動撰寫 SQL 的繁瑣過程,讓資料庫管理變得有條不紊,維護也更為簡單。掌握這些工具,不僅能大幅提升你的開發效率,還能避免許多資料庫常見的錯誤與陷阱。希望今天的分享能夠幫助你在資料庫建構的路上,輕鬆進階!
參考資料:
https://github.com/dean9703111/sequelize-mysql-migration-seeder