文件还在测试中
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
数据库升级包目录(install/upgrades)
|
||||
================================================
|
||||
|
||||
用途
|
||||
----
|
||||
将「升级脚本」(.sql 文件)放入本目录后,进入后台「数据库升级」页面,
|
||||
系统会自动扫描并提示「发现 N 个可升级数据库脚本」,管理员可一键或逐个执行。
|
||||
每次执行都会在 db_upgrades 表中留下记录(文件名、内容指纹 MD5、执行时间、操作人),
|
||||
便于追溯与审计。
|
||||
|
||||
命名建议
|
||||
--------
|
||||
序号_功能描述.sql 例如 001_add_member_level.sql
|
||||
序号便于排序与阅读,文件名(不含路径)作为唯一标识写入 db_upgrades。
|
||||
若同一文件内容被修改后再次放入,系统会识别为「内容已变更」并提示重新升级。
|
||||
|
||||
编写规范
|
||||
--------
|
||||
1. 仅放 DDL / DML 的标准 MySQL 脚本;多条语句以分号(;)分隔,自动拆分执行。
|
||||
2. 优先使用「幂等写法」,避免重复执行报错,例如:
|
||||
CREATE TABLE IF NOT EXISTS xxx (...); -- 全版本支持
|
||||
INSERT INTO ... ON DUPLICATE KEY UPDATE ...; -- 全版本支持
|
||||
注意:ALTER TABLE ... ADD COLUMN IF NOT EXISTS 仅 MySQL 8.0.28+ / MariaDB 10.8+ 支持,
|
||||
旧版本(含多数宝塔默认的 MySQL 5.7 与 MariaDB 10.4/10.6)会直接报 1064 语法错误。
|
||||
跨版本安全的「加列」幂等方式(强烈推荐):
|
||||
SET @db = DATABASE();
|
||||
SET @has = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='yyy' AND COLUMN_NAME='zzz');
|
||||
SET @sql = IF(@has=0, 'ALTER TABLE `yyy` ADD COLUMN `zzz` VARCHAR(16) NOT NULL DEFAULT \'x\'', 'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
3. 不建议在升级包中执行 DROP TABLE / TRUNCATE 等破坏性语句,除非确有必要。
|
||||
4. 升级前请务必备份数据库。
|
||||
|
||||
说明
|
||||
----
|
||||
- 本目录下的 examples/ 子目录为示例,不会被自动扫描(仅扫描本目录根下的 *.sql)。
|
||||
- 想试用示例时,请将 examples/ 中的文件复制到本目录根下再执行。
|
||||
Reference in New Issue
Block a user