说说框架的数据库迁移功能

简介:

laravel中有个数据库迁移功能,migration。基本用法就是在database/migrations/的文件夹下面创建迁移数据库的类,在这个类中实现两个方法:

up()down()

up表示运行这个数据库迁移你要做些什么,down表示你回滚这次数据库迁移你要做些什么。

这样你就可以使用 php artisan migrate 就可以进行数据库迁移, php artisan migrate:rollback 就可以进行迁移回滚。

我一直在想,这个东西到底是鸡肋还是银弹呢?

这个功能发明出来的大致功能是为了让各个环境更好同步数据库。比如一个人A开发一个评论模块,需要做两个动作,那么A就创建一个migrate类,在里面用创造一个评论表,然后可能在文章表那里增加一个评论数的字段。当A把代码同步到主干分支的时候,B这个时候获取到了代码,那么就很简单实用php artisan migrate就能使用代码增加评论表和修改文章表字段。甚至于,在测试环境修改后到线上环境运行就可以同步表修改了。

但是总是觉得这里有几个问题:

首先是这个功能在项目上线之后很难使用。他至多只能同步各个人的开发环境,而不能同步线上环境。因为你想啊,我们平时线上修改是先改表还是先上代码?一般是先改表的。才上代码的。那么这样,我们就不大会选择在线上直接运行php artisan migrate的行为。一旦不会选择在上线后使用这个功能,就代表这个功能的使用场景大打折扣了。

其次是,这个行为安全性得不到保障。migrate的行为说到底是使用代码来控制数据库,和php里面执行alter table命令一样。一般来说,改表行为是一个非常危险的行为,越危险行为做的安全路子就是让链条变短。我们使用了php来执行一个改表命令,万一,数据量大的时候,改表非常慢,锁表,甚至于触发到php的命令耗时上限等行为?具体这个改表行为会有何后续行为?你如何回滚?这个时候,你就会懵了...用代码来管理数据库,我的结论就是一个,不纯正!!什么东西都有其专业的领域,用最专业的工具来做最专业的事情。

还有就是,migrate的rollback简直就是一个定时炸弹。我们一般往migrate的down里面写的是droptable的操作。一旦,万一,这种命令在线上被执行了。那么,就相当于是一个rm -rf的命令啊。把所有数据都给删除了。所以,安全起见,还是离这个rollback操作远一点好。

下面来说说开发阶段,在开发阶段我们会频繁修改数据库,那么这个时候,如果你想要维护一个很完善的migrate列表,你会很痛苦地发现你的migrate下的文件何其多啊。但最后,我们真的关注数据库是如何变化的么?其实,不关注。这些migrate的命令到最后确实没有多大用处。笔者的实践经历,到了一个项目准备上线的时候,我都恨不得把这些migrate的文件汇聚成一个migrate文件呢。。所以呢,在开发阶段,维护一个migrate列表,我感觉倒不如维护一个db.sql,外加laravel的初始化数据工具。每次有数据表改动,让大家source表,再初始化数据更好。

所以,综上所诉,结论是:框架的数据库迁移是个鸡肋。


本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/6513328.html,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 Java 数据库连接
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
TDengine 3.3.5.0 版本正式发布,带来多项更新与优化。新特性包括提升 MQTT 稳定性和高并发性能、新增 taosX 增量备份与恢复、支持 JDBC 和 Rust 连接器 STMT2 接口、灵活配置 Grafana Dashboard 等。性能优化涵盖查询内存管控、多级存储迁移、强密码策略等,全面提升时序数据管理的效率和可靠性。欢迎下载体验并提出宝贵意见。
13 5
|
2天前
|
Cloud Native 关系型数据库 分布式数据库
让PolarDB更了解您--PolarDB云原生数据库核心功能体验馆
让PolarDB更了解您——PolarDB云原生数据库核心功能体验馆,由阿里云数据库产品事业部负责人宋震分享。内容涵盖PolarDB技术布局、开源进展及体验馆三大部分。技术布局包括云计算加速数据库演进、数据处理需求带来的变革、软硬协同优化等;开源部分介绍了兼容MySQL和PostgreSQL的两款产品;体验馆则通过实际操作让用户直观感受Serverless、无感切换、SQL2Map等功能。
|
27天前
|
弹性计算 关系型数据库 数据库
自建数据库迁移到云数据库实操
本课程详细介绍了自建数据库迁移到阿里云RDS的实操步骤。主要内容包括:创建实例资源、安全设置、配置自建的MySQL数据库、数据库的迁移、从自建数据库切换到RDS以及清理资源。通过这些步骤,学员可以掌握如何将自建数据库安全、高效地迁移到云端,并确保应用的正常运行。
134 26
|
9天前
|
运维 关系型数据库 MySQL
体验领礼啦!体验自建数据库迁移到阿里云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」上线!本方案介绍如何将自建数据库平滑迁移至云数据库RDS,解决业务增长带来的运维难题。通过使用RDS MySQL,您可获得稳定、可靠和安全的企业级数据库服务,专注于核心业务发展。完成任务即可领取桌面置物架,每个工作日限量50个,先到先得。
|
19天前
|
弹性计算 关系型数据库 数据库
从自建到云端,数据库迁移全攻略
本文详细介绍了将自建数据库迁移至阿里云RDS的全过程,涵盖WordPress网站安装、数据库迁移配置及验证等步骤。通过DTS数据传输服务,实现库表结构、全量和增量数据的无缝迁移,确保业务连续性和数据一致性。方案具备零成本维护、高可用性(最高99.99%)、性能优化及全面的数据安全保障等核心优势。此外,提供了详细的图文教程,帮助用户快速上手并完成迁移操作,确保业务稳定运行。点击文末“阅读原文”了解更多详情及参与活动赢取精美礼品。
|
1月前
|
弹性计算 安全 关系型数据库
活动实践 | 自建数据库迁移到云数据库
通过阿里云RDS,用户可获得稳定、安全的企业级数据库服务,无需担心数据库管理与维护。该方案使用RDS确保数据库的可靠性、可用性和安全性,结合ECS和DTS服务,实现自建数据库平滑迁移到云端,支持WordPress等应用的快速部署与运行。通过一键部署模板,用户能迅速搭建ECS和RDS实例,完成数据迁移及应用上线,显著提升业务灵活性和效率。
|
27天前
|
运维 关系型数据库 MySQL
自建数据库迁移到云数据库RDS
本次课程由阿里云数据库团队的凡珂分享,主题为自建数据库迁移至云数据库RDS MySQL版。课程分为四部分:1) 传统数据库部署方案及痛点;2) 选择云数据库RDS MySQL的原因;3) 数据库迁移方案和产品选型;4) 线上活动与权益。通过对比自建数据库的局限性,介绍了RDS MySQL在可靠性、安全性、性价比等方面的优势,并详细讲解了使用DTS(数据传输服务)进行平滑迁移的步骤。此外,还提供了多种优惠活动信息,帮助用户降低成本并享受云数据库带来的便利。
|
2月前
|
SQL 测试技术 数据库
|
2月前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
65 8
|
1月前
|
安全 关系型数据库 MySQL
体验自建数据库迁移到云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」正式开启!本方案旨在帮助用户将自建数据库平滑迁移至阿里云RDS MySQL,享受稳定、高效、安全的数据库服务,助力业务快速发展。完成指定任务即可赢取桌面置物架等奖励,限量供应,先到先得。活动时间:2024年12月3日至12月31日16点。