Bird
Raised Fist0
NestJSframework~5 mins

Migrations in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a migration in the context of NestJS and databases?
A migration is a script that changes the database schema in a controlled way. It helps keep track of changes like creating or modifying tables, so the database structure matches the app's needs.
Click to reveal answer
beginner
Why should you use migrations instead of manually changing the database?
Migrations keep changes organized and repeatable. They let you update databases safely across different environments and help avoid mistakes or data loss.
Click to reveal answer
beginner
Which NestJS package is commonly used to handle migrations?
TypeORM is often used with NestJS for migrations. It provides commands to create, run, and revert migrations easily.
Click to reveal answer
intermediate
What command do you use to generate a new migration file with TypeORM CLI?
You use the command: typeorm migration:create -n MigrationName to create a new migration file with a given name.
Click to reveal answer
beginner
How do migrations help when working in a team?
Migrations let everyone apply the same database changes in the same order. This keeps the database consistent for all developers and avoids conflicts.
Click to reveal answer
What is the main purpose of a migration in NestJS projects?
ATo manage user authentication
BTo write frontend UI code
CTo deploy the app to a server
DTo update the database schema safely
Which tool is commonly used with NestJS for database migrations?
AReact
BTypeORM
CExpress
DWebpack
What does the command typeorm migration:run do?
ARuns all pending migrations to update the database
BCreates a new migration file
CDeletes the database
DStarts the NestJS server
Why is it important to commit migration files to version control?
ASo all team members can apply the same database changes
BTo speed up the app
CTo improve frontend styling
DTo reduce server costs
If you want to undo the last migration, which command would you use?
Atypeorm migration:run
Btypeorm migration:create
Ctypeorm migration:revert
Dnpm start
Explain what migrations are and why they are useful in NestJS projects.
Think about how you keep your database organized and consistent.
You got /4 concepts.
    Describe the typical workflow for creating and running migrations using TypeORM in NestJS.
    Consider the steps from writing to applying migrations.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of migrations in a NestJS project using TypeORM?
      easy
      A. To handle HTTP requests and responses
      B. To safely update the database schema step-by-step
      C. To write business logic for the application
      D. To manage user authentication

      Solution

      1. Step 1: Understand what migrations do

        Migrations help change the database structure safely without losing data.
      2. Step 2: Identify the correct purpose in NestJS context

        They are not for business logic or HTTP handling but for database schema updates.
      3. Final Answer:

        To safely update the database schema step-by-step -> Option B
      4. Quick Check:

        Migrations = safe database updates [OK]
      Hint: Migrations change database structure safely [OK]
      Common Mistakes:
      • Confusing migrations with business logic
      • Thinking migrations handle HTTP requests
      • Assuming migrations manage authentication
      2. Which command correctly runs all pending migrations in a NestJS project using TypeORM?
      easy
      A. npx typeorm migration:create
      B. npx typeorm migration:revert
      C. npx typeorm migration:generate
      D. npx typeorm migration:run

      Solution

      1. Step 1: Recall commands for migrations

        migration:run applies pending migrations to the database.
      2. Step 2: Differentiate from other commands

        migration:create creates a new migration file, migration:generate generates migration from schema changes, and migration:revert undoes the last migration.
      3. Final Answer:

        npx typeorm migration:run -> Option D
      4. Quick Check:

        Run migrations = migration:run [OK]
      Hint: Run migrations with migration:run command [OK]
      Common Mistakes:
      • Using migration:create to run migrations
      • Confusing migration:generate with migration:run
      • Using migration:revert to apply migrations
      3. Given this migration class, what will happen when up() is run?
      export class AddAgeColumn1678901234567 {
        async up(queryRunner) {
          await queryRunner.query(`ALTER TABLE users ADD COLUMN age int`);
        }
        async down(queryRunner) {
          await queryRunner.query(`ALTER TABLE users DROP COLUMN age`);
        }
      }
      medium
      A. Creates a new table called 'age'
      B. Removes the 'age' column from the 'users' table
      C. Adds a new integer column 'age' to the 'users' table
      D. Throws a syntax error because of missing semicolons

      Solution

      1. Step 1: Analyze the up() method

        The up() method runs SQL to add a column named 'age' of type integer to the 'users' table.
      2. Step 2: Understand the effect of the query

        This modifies the existing 'users' table by adding the new column; it does not remove columns or create new tables.
      3. Final Answer:

        Adds a new integer column 'age' to the 'users' table -> Option C
      4. Quick Check:

        up() adds column 'age' [OK]
      Hint: up() applies changes like adding columns [OK]
      Common Mistakes:
      • Confusing up() with down() method
      • Thinking it creates a new table
      • Assuming syntax error due to semicolons
      4. You wrote this migration but get an error when running npx typeorm migration:run. What is the likely problem?
      export class RemoveEmailColumn1678901234568 {
        async up(queryRunner) {
          await queryRunner.query(`ALTER TABLE users DROP email`);
        }
        async down(queryRunner) {
          await queryRunner.query(`ALTER TABLE users ADD email varchar(255)`);
        }
      }
      medium
      A. The SQL syntax for dropping a column is incorrect
      B. The migration class name is invalid
      C. Missing async keyword in down() method
      D. The migration file is not saved

      Solution

      1. Step 1: Check the SQL in up() method

        The query ALTER TABLE users DROP email is incorrect SQL syntax for dropping a column.
      2. Step 2: Correct SQL syntax for dropping a column

        The correct syntax is ALTER TABLE users DROP COLUMN email. Missing 'COLUMN' causes the error.
      3. Final Answer:

        The SQL syntax for dropping a column is incorrect -> Option A
      4. Quick Check:

        DROP COLUMN keyword required in SQL [OK]
      Hint: Use DROP COLUMN to remove columns in SQL [OK]
      Common Mistakes:
      • Omitting COLUMN keyword in DROP statement
      • Assuming class name causes error
      • Forgetting async keyword (not the cause here)
      5. You want to create a migration that renames a column 'username' to 'user_name' in the 'accounts' table and can be reverted. Which up() and down() methods are correct?
      hard
      A.
      async up(queryRunner) {
        await queryRunner.query(`ALTER TABLE accounts RENAME COLUMN username TO user_name`);
      }
      async down(queryRunner) {
        await queryRunner.query(`ALTER TABLE accounts RENAME COLUMN user_name TO username`);
      }
      B.
      async up(queryRunner) {
        await queryRunner.query(`ALTER TABLE accounts CHANGE username user_name varchar(255)`);
      }
      async down(queryRunner) {
        await queryRunner.query(`ALTER TABLE accounts CHANGE user_name username varchar(255)`);
      }
      C.
      async up(queryRunner) {
        await queryRunner.query(`ALTER TABLE accounts DROP COLUMN username`);
        await queryRunner.query(`ALTER TABLE accounts ADD COLUMN user_name varchar(255)`);
      }
      async down(queryRunner) {
        await queryRunner.query(`ALTER TABLE accounts DROP COLUMN user_name`);
        await queryRunner.query(`ALTER TABLE accounts ADD COLUMN username varchar(255)`);
      }
      D.
      async up(queryRunner) {
        await queryRunner.query(`RENAME COLUMN username TO user_name`);
      }
      async down(queryRunner) {
        await queryRunner.query(`RENAME COLUMN user_name TO username`);
      }

      Solution

      1. Step 1: Identify correct SQL syntax for renaming columns

        The standard SQL syntax supported by many databases is ALTER TABLE table_name RENAME COLUMN old_name TO new_name.
      2. Step 2: Check each option's SQL correctness and revert logic

        async up(queryRunner) {
          await queryRunner.query(`ALTER TABLE accounts RENAME COLUMN username TO user_name`);
        }
        async down(queryRunner) {
          await queryRunner.query(`ALTER TABLE accounts RENAME COLUMN user_name TO username`);
        }
        uses correct syntax for both up() and down() to rename and revert the column name.
        async up(queryRunner) {
          await queryRunner.query(`ALTER TABLE accounts CHANGE username user_name varchar(255)`);
        }
        async down(queryRunner) {
          await queryRunner.query(`ALTER TABLE accounts CHANGE user_name username varchar(255)`);
        }
        uses MySQL-specific CHANGE syntax which may not be portable.
        async up(queryRunner) {
          await queryRunner.query(`ALTER TABLE accounts DROP COLUMN username`);
          await queryRunner.query(`ALTER TABLE accounts ADD COLUMN user_name varchar(255)`);
        }
        async down(queryRunner) {
          await queryRunner.query(`ALTER TABLE accounts DROP COLUMN user_name`);
          await queryRunner.query(`ALTER TABLE accounts ADD COLUMN username varchar(255)`);
        }
        drops and adds columns, losing data.
        async up(queryRunner) {
          await queryRunner.query(`RENAME COLUMN username TO user_name`);
        }
        async down(queryRunner) {
          await queryRunner.query(`RENAME COLUMN user_name TO username`);
        }
        misses the table name in the query, causing error.
      3. Final Answer:

        ALTER TABLE accounts RENAME COLUMN username TO user_name -> Option A
      4. Quick Check:

        Rename column with ALTER TABLE RENAME COLUMN [OK]
      Hint: Use ALTER TABLE RENAME COLUMN for renaming columns [OK]
      Common Mistakes:
      • Dropping and adding columns instead of renaming
      • Omitting table name in ALTER TABLE
      • Using database-specific syntax without checking compatibility
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard