3分钟短文:书接上回,Laravel数据库迁移的那些个小技巧

简介: 继续深入laravel的数据库迁移功能

引言

使用laravel的数据库迁移功能进行表的创建,和迁移回滚之后,我们继续说说在设计中
表结构的更改之后的处理。以及如何为数据库填充一些伪数据作为测试。

图片

数据约束

上一章说到数据库迁移回滚,可以手动控制回滚到哪一批次的迁移位置。比如我们创建的 events 表,
如果在迁移文件内添加字段,代码如下:

pic

我们在数据库表中间的位置添加了一个 venue 字段。然后使用迁移指令

php artisan migrate

就可以应用这些改变了。

很多时候,并不是说我们创建了表,并且指定了字段名,和字段数据类型就算完事儿了。
我们需要空与非空约束,默认值约束,主键约束,外键约束等等数据库所具有的特性,
这才是关系型数据库的魅力。

比如声明一个布尔类型的值,并声明默认为false:

$table->boolean('confirmed')->default(false);

比如设定一个字符串类型的字段,允许为null:

$table->string('comments')->nullable();

比如设定整型为无符号数:

$table->tinyInteger('age')->unsigned();

在给上面的 age 字段设定默认值:

$table->tinyInteger('age')->unsigned()->default(0);

增删字段

使用迁移功能增删数据库表的字段,与之前讲的创建迁移文件相同,
首先创建一个迁移文件,使用以下脚手架指令:

php artisan make:migration add_enabled_to_events_table --table=events

本迁移文件我们要为表 events 添加一个 enabled 的布尔类型的字段。上述指令输出内容如下:

Created Migration: 2020_09_28_213116_add_enabled_to_events_table

现在为该迁移文件添加 up & down 方法,指定迁移开始和回滚所要执行的动作,
我们仅仅是添加一个字段,或者在回滚的时候,删除一个字段,代码如下图:

pic

完成后在命令行执行迁移指令:

php artisan migrate

输出结果如下:

Migrating: 2020_09_28_213116_add_enabled_to_events_table
Migrated: 2020_09_28_213116_add_enabled_to_events_table

上面我们并没有指定添加的字段在哪个字段的后面,所以laravel所组装的SQL就默认是最后一个字段之后。
大家应该不陌生SQL语句追加字段的语法:

ALTER TABLE contacts ADD last_name varchar(40) NOT NULL AFTER contact_id;

laravel的迁移指令也允许我们指定某个追加的字段位于某个列之后:

$table->boolean('enabled')->after('name');

迁移状态

查看当前数据库的迁移状态,会让我们查看创建的迁移文件中哪些被应用了,
哪些还没有被应用,这样在数据库表比较多的情况下,可以有效地排查问题。

laravel提供了脚手架命令:

php artisan migrate:status

输出内容类似下图:

pic

还有两个高危指令,一个是 magrate:reset 回滚所有的迁移,不同于 migrate:rollback 仅回滚某一批次的迁移;
还有一个是 migrate:refresh,如果你修改了某些迁移过的文件,这个指令会刷新所有修改的变更并应用。

这两个都要慎用!

写在最后

本文是对上一章所述laravel数据库迁移功能的补充。数据库迁移是一个比较大的动作,
特别是已经上线生产的应用数据库,如果非到更新迁移的地步不可,需要预期做好演练,
以应对可能的突发事故。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

相关文章
|
3月前
|
安全 关系型数据库 MySQL
MySQL数据库高效秘籍:10个小技巧,让你轻松应对各种场景!
【8月更文挑战第25天】本文介绍了十个提升MySQL数据库效率与安全性的实用技巧。涵盖查询性能分析、索引优化、慢查询日志利用、图形化工具如MySQL Workbench的应用、性能分析工具、主从复制实现、备份与恢复策略、数据库迁移方法及安全性保障等多个方面。通过具体的示例代码展示每个技巧的实际操作方式,帮助读者深入理解并有效运用MySQL数据库。
117 0
|
3月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
3月前
|
关系型数据库 MySQL 数据库
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
16天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
27 3
|
4月前
|
SQL Java 数据库
使用Spring Boot和Flyway进行数据库迁移
使用Spring Boot和Flyway进行数据库迁移
|
2月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
343 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
37 0
|
2月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
410 1
|
3月前
|
JSON NoSQL Ubuntu
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
88 1