首页
ARTS 05 - 使用 Ecto.Migration 来做数据库迁移

ARTS左耳朵耗子 提出来的一个打卡任务。每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!我希望这个事可以给大家得到相应的算法、代码、技术和影响力的训练。

这是我的第五周打卡。这周使用新的语言Elixir开始在项目中慢慢实践了起来,期间发现由于语言跟整个生态的不熟悉,开发经常受阻。但同时,在实践中有目的性的去学习,整个学习的速度会快很多。

🤖 Algorithm

删除链表中的节点

📖 Review

Preparing for a Tech Talk, Part 1: Motivation

这篇文章是一个关于准备技术演讲系列教程的开篇,主要讲的是技术演讲的动机。

关于动机,作者分为外部动机和内部动机来分别说明。外部动机大家都比较清楚,可以获取业内更多认可以便找到更好的工作或加薪等等。内部动机的话对于每个人来说也许都不尽相同。对于作者的话,他总结了两点:

  • 喜欢分享自己的想法
  • 喜欢以更简单的方式重新解释事物

选择一个与自己动机相符的演讲会对我们有很多帮助:

  1. 选择一个主题比较容易
  2. 在讲台上不那么恐怖
  3. 更令人信服

💡 Tip

使用Ecto.Migration来做数据库迁移

数据库迁移语句在很多后端的框架中基本都有实现。它的好处是实现了数据库的版本控制,可以让团队更容易修改和共享数据库结构。这周主要体验了一下Ecto.Migration在实际生产中的用法。

使用mix ecto.gen.migration xxx 可以生成一个数据库迁移文件,它是以当前创建时间作为前缀来命名的,比如:priv/repo/migrations/20190417140000_add_weather_table.exs

在数据库迁移文件中,主要用到的两个函数是updownup语句负责向前迁移数据库,down负责回滚操作。所以down里面的内容必须保持跟up是完全相反的。比如:

defmodule MyRepo.Migrations.AddWeatherTable do
  use Ecto.Migration

  def up do
    create table("weather") do
      add :city,    :string, size: 40
      add :temp_lo, :integer
      add :temp_hi, :integer
      add :prcp,    :float

      timestamps()
    end
  end

  def down do
    drop table("weather")
  end
end

up语句里创建了一个weather表,那么down里面需要做的就是删除该表。通常对于建表语句框架知道回滚操作就是drop table,所以对于建表语句的话我们只需要实现一个change方法即可

defmodule MyRepo.Migrations.AddWeatherTable do
  use Ecto.Migration

  def change do
    create table("weather") do
      add :city,    :string, size: 40
      add :temp_lo, :integer
      add :temp_hi, :integer
      add :prcp,    :float

      timestamps()
    end
  end
end

当数据库迁移语句写好后,我们执行下面的操作就可以执行迁移和回滚操作了

$ mix ecto.migrate   数据库迁移
$ mix ecto.rollback  回滚

💎 Share

国内版的《硅谷之火》

这是在语雀里发掘的一个很好的专栏,里面分享了国内关于互联网创业的点点滴滴,很值得每个互联网人去阅读。