Chuyển tới nội dung
Trang chủ » Rollback Last Rails Migration: Undoing Database Changes With Ease

Rollback Last Rails Migration: Undoing Database Changes With Ease

Rails Quick Tips - Rolling Back Database Migrations

Rails Rollback Last Migration

Rails Rollback Last Migration: A Comprehensive Guide

If you’re a developer working with Ruby on Rails, chances are you’ll encounter the need to rollback a migration at some point. Migrations are an integral part of the Rails framework, allowing you to manage database schema changes over time. In this article, we’ll explore what a migration is in Rails, how it works, why you might want to rollback a migration, and various methods to rollback the last migration.

What is a migration in Rails?

In Rails, a migration is a way to make changes to the database schema in a structured and organized manner. It allows you to add or remove tables, modify column attributes, normalize data, and handle other database-related tasks. Migrations are written in Ruby and stored as files in the db/migrate directory of your Rails application.

How does a migration work in Rails?

When you run a migration, Rails creates a new version of the database schema based on the changes specified in the migration file. This version information is stored in a table called “schema_migrations”, allowing Rails to keep track of which migrations have been applied and which ones are pending. This mechanism enables smooth collaboration between developers and ensures consistency across different environments.

What is a rollback in Rails?

A rollback is the process of reverting a migration that has already been applied to the database. It is useful when you want to undo the changes made by a migration, either due to an error or a change in requirements. Rails provides several methods to rollback migrations, allowing you to easily revert the database back to a previous state.

Why would you want to rollback a migration?

There are several reasons why you might want to rollback a migration in Rails. Some common scenarios include:

1. Mistakes or errors: If a migration contains a mistake or causes unexpected issues, rolling it back can help restore the previous state of the database.

2. Change in requirements: Sometimes, requirements change during the development process. Rolling back a migration allows you to undo the changes made by a migration and make the necessary adjustments.

3. Testing and debugging: During the testing phase, you might want to rollback a migration to analyze the impact on the database or troubleshoot issues.

How to rollback the last migration in Rails?

Rails offers multiple methods to rollback migrations, depending on your specific needs. Let’s explore some of the most commonly used methods:

1. Using the `rake db:rollback` command to rollback the last migration:
– Open your terminal or command prompt.
– Navigate to the root directory of your Rails application.
– Enter the command `rake db:rollback` and press Enter.
– Rails will initiate the rollback process and revert the last migration. The `schema_migrations` table will be updated accordingly.

2. Using the `rails db:rollback:step` command to rollback a specific number of migrations:
– As with the previous method, open your terminal or command prompt and navigate to your Rails application’s root directory.
– Enter the command `rails db:rollback:step[n]`, replacing [n] with the number of migrations you want to rollback.
– Rails will rollback the specified number of migrations starting from the most recent ones.

3. Rolling back a migration using the version number:
– To rollback a specific migration based on its version number, use the following command: `rake db:migrate:down VERSION=[version_number]`.
– Replace [version_number] with the actual version number of the migration you want to rollback.
– Rails will identify the migration and revert it, updating the `schema_migrations` table accordingly.

4. Rolling back a migration that has already been run on production:
– If a migration has already been applied to a production environment, rolling it back requires additional steps to ensure data consistency.
– Create a new migration specifically for rolling back the changes introduced by the previous migration.
– Include the necessary revert commands in the new migration file to undo the changes made by the previous migration.
– Run the new migration using the appropriate rollback command discussed earlier.
– This approach ensures that the rollback process is well-documented and can be easily repeated, even on production environments.

Best practices for using rollback in Rails:

1. Backup your data: Before performing any rollback, it is crucial to back up your data to avoid potential data loss.

2. Understand the consequences: Always analyze the impact of rolling back a migration and assess its implications on your application.

3. Communicate changes: If you’re working as part of a team, make sure to communicate any changes or rollbacks you make to maintain synchronization among team members.

4. Version control: Use a version control system such as Git to keep track of your migrations and easily revert any changes if needed.

5. Comprehensive testing: After a rollback, thoroughly test your application to ensure it functions as expected in the previous state.

6. Document rollback processes: Create detailed documentation that outlines the rollback process for each migration, making it easier for the entire team to understand and repeat if necessary.


Q: How can I delete a migration in Rails?
A: To delete a migration file, locate the corresponding file in the db/migrate directory and simply delete it. However, keep in mind that deleting a migration file won’t automatically rollback the associated changes. You’ll need to run the appropriate rollback command after deleting the migration file.

Q: Can I rollback all migrations in Rails?
A: Yes, you can rollback all migrations in Rails by running the `rake db:rollback` command without any additional arguments. This will revert all applied migrations and leave the database in its initial state.

Q: Can I rollback a migration in Django?
A: Yes, Django also provides a mechanism to rollback migrations. You can use the `python migrate [app_name] [migration_name]` command to rollback a specific migration or the `python migrate [app_name] zero` command to revert all applied migrations.

Q: What is ActiveRecord UnknownMigrationVersionError?
A: The `ActiveRecord UnknownMigrationVersionError` is an error that occurs when Rails attempts to migrate or rollback a migration with an unknown version. This error usually occurs when a migration file has been deleted or renamed without following the appropriate rollback process.

Q: What is an up-down migration in Rails?
A: An up-down migration, also known as reversible migration, allows you to define the changes to be applied to the database schema and the corresponding revert actions in a single migration file. This eliminates the need for separate “up” and “down” methods, simplifying the rollback process.

In conclusion, rollback migrations play a vital role in managing and maintaining the database schema in Rails applications. Understanding how to rollback and utilize various rollback methods ensures the flexibility and safety of your database changes. By following best practices and documenting your rollback processes, you can navigate migration-related challenges with ease, promoting smooth collaboration and efficient development.

Rails Quick Tips – Rolling Back Database Migrations

How To Rollback Deleted Migration In Rails?

How to Rollback Deleted Migration in Rails?

When working with Ruby on Rails, migrations play a pivotal role in managing database schema changes. They allow developers to create, update, and delete database tables, columns, and indexes. While migrations are a powerful tool, mistakes can happen along the way. One such mistake is accidentally deleting a migration. However, fear not! Rails provides mechanisms to roll back these deleted migrations, ensuring the stability and integrity of your application’s database.

In this article, we will explore step-by-step instructions on how to rollback deleted migrations in Rails, as well as common FAQs related to this process.

Step 1: Access the Rails Console
To begin the process, open your terminal and access the Rails console. You can do this by typing the command `rails console` or `rails c` in your project’s root directory.

Step 2: Retrieve Deleted Migration Information
Once you are in the Rails console, use the following command to obtain information about the deleted migration:

ActiveRecord::Migrator.migrations_paths = ActiveRecord::Migrator.migrations_paths, ActiveRecord::Migrator.migrations_paths).pending_migrations

Executing these commands will display a list of deleted migrations, including their version numbers.

Step 3: Generate the Deleted Migration File
Now that you have the information about the deleted migration, you can generate its file again. You can do this by using the `rails generate migration` command followed by the desired migration name and version number:

rails generate migration [migration_name] version=[version_number]

Replace `[migration_name]` with the name you want to give to the migration, and `[version_number]` with the version number of the deleted migration. Ensure that the version number matches the deleted migration to maintain consistency.

Step 4: Edit the Generated Migration File
The newly generated migration file will open automatically after running the previous command. Inside the file, you need to copy the contents of the deleted migration. Retrieve the deleted migration by finding the original migration file using a version control system or referring to a previous backup of your codebase.

Paste the contents into the new migration file and save the changes.

Step 5: Run the Rollback
Now that the migration file has been generated and edited, it is time to roll back the deleted migration. Execute the following command in the Rails console:

rake db:migrate:down VERSION=[version_number]

Replace `[version_number]` with the specific version number of the deleted migration.

Congratulations! You have successfully rolled back the deleted migration in Rails. Your database schema has been restored to its previous state. It is important to note that certain precautions should be taken while rolling back migrations, especially if your application is in a production environment. Ensure that you have a complete understanding of the database changes and their implications before proceeding.

Frequently Asked Questions:

Q1: Can I rollback multiple deleted migrations at once?
A1: Yes, you can rollback multiple deleted migrations at once. Simply repeat steps 3 to 5 for each deleted migration you want to restore.

Q2: What are the consequences of not rolling back a deleted migration?
A2: If a deleted migration is not rolled back, it can lead to inconsistencies within the database schema, potentially causing errors and issues in your application.

Q3: Is it possible to permanently lose data due to a deleted migration?
A3: Yes, it is possible to lose data if the deleted migration is not properly restored. This emphasizes the importance of maintaining regular backups of your database.

Q4: Can I roll back deleted migrations in a production environment?
A4: Yes, you can roll back deleted migrations in a production environment. However, extreme caution is advised as it can have significant consequences. It is recommended to thoroughly test the rollback on a non-production environment first.

Q5: Are there any alternative approaches to rollback deleted migrations?
A5: Yes, if you are using a version control system, you can revert your codebase to a previous commit where the migration was not deleted. This will effectively restore the deleted migration. However, be cautious as this will affect other code changes made after that commit.

In conclusion, mistakes happen, and it is not uncommon to accidentally delete a migration while working with Rails. However, with the steps outlined in this article, you now have the knowledge to effectively roll back deleted migrations, restoring your database schema to its previous state. Keep in mind the importance of backups and thorough testing to maintain the stability and integrity of your application’s data.

Which Command Is True To Rollback Migration In Rails?

Which Command is True to Rollback Migration in Rails?

In Rails, migrations are used to manage the changes in the database schema over time. They allow developers to create, modify, and delete database tables and columns by writing Ruby code. Migrations also ensure that changes are applied consistently across all development environments.

While migrating forward is a common practice in Rails development, there are instances when you may need to rollback a migration. Rollback means reverting the changes made by a specific migration file. In this article, we will explore the various techniques and commands available in Rails to rollback migrations.

Rollback Migration Using the “rollback” Command:

The most straightforward way to rollback migrations in Rails is by using the “rollback” command. Simply open up your terminal, navigate to your Rails application directory, and type the following command:

rails db:rollback

By default, this command will rollback the last migration applied to the database. If you want to rollback multiple migrations, you can specify the number of steps using the “STEP” parameter:

rails db:rollback STEP=3

This command will rollback the last three applied migrations. You can adjust the value based on your specific requirements.

Rollback Migration by Version Number:

Another way to rollback migrations is by specifying the version number of the migration you want to rollback to. First, you need to list all the migrated versions along with their status using the “db:migrate:status” command:

rails db:migrate:status

This will display a list of all the migrated migrations along with their version numbers and status. Find the version number of the migration you want to rollback to and use the following command:

rails db:migrate:down VERSION=

Replace `` with the desired version number you obtained from the previous command. This will rollback the specified migration and all the migrations that were applied after it.

Rollback Migration to a Specific Date:

In some cases, rather than specifying a version number, you may find it easier to rollback to a specific date. Rails keeps track of migration timestamps, making it possible to specify a specific date as well. Use the following command to rollback to a specific date:

rails db:migrate:down VERSION=

Replace `` with the date you want to rollback to. Ensure the format is in YYYYMMDDHHMMSS.

Rollback Migration Using the “db:rollback:step” Command:

An alternative command to rollback migrations is the “db:rollback:step” command. This command allows you to rollback multiple migrations in a single step. Simply use the following command and specify the number of steps:

rails db:rollback:step[]

Replace `` with the desired number of migrations you want to rollback.


Q: What happens when I rollback a migration?
A: When you rollback a migration, the changes made by that migration file are reversed. For example, if you added a column to a table in a migration and you rollback that migration, the added column will be removed.

Q: Can I rollback all migrations at once?
A: Yes, you can rollback all migrations at once using the following command:
rails db:migrate:reset
However, be cautious, as this will clear all data in your database and revert it to its initial state.

Q: Can I rollback only a specific part of a migration?
A: No, when you rollback a migration, it reverts all the changes made by that migration file. If you want to rollback only a specific part, you may need to create a new migration that undoes the specific changes made by the previous migration.

Q: Will rolling back a migration affect existing data in the database?
A: Yes, rolling back a migration can potentially affect existing data. If the migration you are rolling back includes deletion or modification of data, that data will be lost or altered.

Q: Can I rollback migrations in a production environment?
A: Yes, you can rollback migrations in a production environment. However, be cautious as rolling back migrations may cause data loss or inconsistencies. Always take proper backups and ensure you thoroughly understand the impact of rolling back a migration before doing it in a production environment.

In conclusion, Rails provides various commands and techniques to rollback migrations, giving developers the flexibility to revert changes made to the database schema. Whether you need to rollback a single migration, multiple migrations or rollback to a specific date, Rails offers the necessary commands to facilitate the process. It is important to exercise caution and understand the implications of rolling back migrations, especially in production environments, to avoid potential data loss or inconsistencies.

Keywords searched by users: rails rollback last migration Rollback migration rails, Delete migration rails, Rails rollback all migrations, Rollback migration Django, Rails migration, Rollback migration Laravel, ActiveRecord UnknownMigrationVersionError, Up down migration Rails

Categories: Top 70 Rails Rollback Last Migration

See more here:

Rollback Migration Rails

Rollback Migration in Rails: A Comprehensive Guide

Rollback migration is an essential feature in Ruby on Rails that allows developers to revert changes made to a database schema. Whether you accidentally applied a faulty migration or made changes that resulted in undesirable consequences, the rollback migration feature can help you quickly restore your database to its previous state.

In this article, we will explore rollback migration in detail, discuss its benefits, and provide step-by-step instructions on how to effectively utilize this functionality in your Rails application.

Understanding Migrations in Rails

Before delving into rollback migration, let’s briefly recap what migrations are in the context of Ruby on Rails. Migrations are scripts that facilitate database schema changes. They enable developers to modify tables, add or remove columns, and perform various other database operations in a structured and organized manner.

Migrations are created using the `rails generate migration` command, and each migration file contains a pair of `up` and `down` methods. The `up` method defines the modifications to be applied when running the migration, while the `down` method specifies the reverse changes to be made when rolling back the migration.

Benefits of Rollback Migration

Rollback migration offers numerous advantages for developers and software projects. Here are a few key benefits:

1. Error Correction: Mistakes happen, and rollback migration provides a safety net to easily rectify any errors made during the modification of the database schema.

2. Rapid Iteration: During development, it’s common to experiment with schema changes. Rollback migration allows you to iterate quickly by easily reverting unwanted changes without manually fixing the database.

3. Data Integrity Preservation: Rollback migration ensures that data integrity is maintained during schema changes. When rolling back a migration, any inserted or updated data is automatically reverted to its previous state, preventing data corruption.

4. Collaboration and Collaboration: Rollback migration enhances collaboration by providing developers with the ability to conveniently undo changes made by others, ensuring a smooth workflow within a development team.

Using Rollback Migration in Rails

Now that we understand the importance of rollback migration let’s take a closer look at how to use it in Rails applications.

1. Rolling Back the Latest Migration
If you want to revert the most recently applied migration, the following command can be used:
rails db:rollback
This command will execute the `down` method of the last applied migration, effectively rolling back the schema changes.

2. Rolling Back Multiple Migrations
To roll back multiple migrations, the following command syntax can be used:
rails db:rollback STEP=n
Here, `n` represents the number of migrations to roll back. For example, `rails db:rollback STEP=2` will revert the last two migrations.

3. Rolling Back to a Specific Version
Sometimes, rolling back to a specific migration becomes necessary. To achieve this, run the following command:
rails db:migrate:down VERSION=20191125162553
Replace `20191125162553` with the desired migration timestamp.

Frequently Asked Questions

1. Can I rollback a migration and lose data?
No, rollback migration in Rails automatically reverts the database schema while preserving the data integrity. Any inserted or updated data will be reverted to its previous state.

2. Can I rollback a migration in a production environment?
Yes, rollback migration can be used in production environments. However, proceeding with caution and taking backups is advised to avoid any potential data loss.

3. How do I create a new rollback migration?
To create a migration that is reversible, make sure to define both the `up` and `down` methods in the migration file. The `up` method should include the changes you wish to apply, while the `down` method should specify how to reverse those changes.

4. Can I rollback a migration on a specific database?
Yes, rollback migration works with specified databases. To roll back a migration on a specific database, use the following command:
rails db:rollback RAILS_ENV=production

5. Can I roll back multiple migrations at once?
Yes, you can roll back multiple migrations using the `rails db:rollback STEP=n` command. Replace `n` with the desired number of migrations to roll back.

In conclusion, rollback migration in Ruby on Rails is an indispensable tool for maintaining the integrity of your database. Its ability to quickly revert changes and restore previous states provides developers with a safety net during development and enables easy error correction. By following the instructions outlined in this article, you can effectively utilize rollback migration in your Rails application and streamline your development workflow.

Delete Migration Rails

Delete Migration in Rails: A Comprehensive Guide


In the world of web development, data management is an essential aspect of building reliable and scalable applications. In the Ruby on Rails framework, migrations serve as a powerful tool for managing database schema changes during the development lifecycle. While most often used to create new tables and columns, migrations are also crucial for deleting database elements. In this article, we will delve into the topic of delete migration in Rails, exploring its purpose, implementation, and best practices.

What is a Delete Migration?

A delete migration, as the name suggests, is a Rails migration used to delete database elements such as tables or columns. It helps keep your database structure up-to-date by removing unnecessary or deprecated elements. When a database element, such as a table, is no longer needed, it is advisable to delete it using a migration instead of directly dropping it from the database.

Why Use Delete Migrations?

Using delete migrations instead of directly dropping database elements offers several benefits. Firstly, by using migrations, you maintain a track record of your database changes, making it easier to revert or roll back if needed. Secondly, delete migrations ensure that database changes are reflected consistently across multiple environments, such as development, staging, and production. Lastly, delete migrations provide a systematic approach to managing database changes, enhancing collaboration among team members and improving project maintainability.

Implementing Delete Migrations

To implement a delete migration in Rails, follow these steps:

Step 1: Generate a new migration
Open a terminal window, navigate to your Rails project’s root directory, and execute the following command:

rails generate migration RemoveTableName

Replace “TableName” with the name of the table or database element you wish to delete.

Step 2: Define the migration
Open the generated migration file, located in the `db/migrate` directory, and define the `change` method. For example, to delete a table named `users`, your migration file may look like this:

class RemoveUsers < ActiveRecord::Migration[6.1] def change drop_table :users end end ``` Step 3: Execute the migration In the terminal, run the following command: rails db:migrate This command will execute the newly created delete migration and remove the specified element from the database. Best Practices for Delete Migrations To ensure smooth execution and maintainable code, it is advisable to follow these best practices when working with delete migrations: 1. Keep a clear and consistent naming convention for your delete migrations. Prefix your migration names with `Remove` or `Delete` followed by the name of the element being deleted. For example, `RemoveUsers` or `DeleteColumnsFromProjects`. 2. Test your delete migrations thoroughly in a development environment before deploying them to production. This helps identify any potential issues and ensures that the intended elements are deleted. 3. Communicate with your team before executing delete migrations in a production environment. Collaboration and consensus are crucial to ensure that all team members are aware of the changes and potential impact. 4. Consider creating a backup or migration plan before deleting critical database elements. This is particularly important if the deletion may have cascading effects on other parts of the application. 5. Make use of source control systems, such as Git, to keep a version history of your delete migrations. This allows easy rollback or review if needed in the future. Delete Migration FAQs Q1: Can I delete multiple elements within a single delete migration? A: Yes, it is possible to delete multiple elements within a single delete migration. Simply define the necessary deletion methods for each element within the `change` method of the migration. Q2: Can I roll back a delete migration? A: Yes, rollback is possible for delete migrations. By executing `rails db:rollback`, the last executed migration's `down` method will be triggered, effectively undoing the deletion of the database element. Q3: Is deleting a migration file the same as deleting a database element? A: No, deleting a migration file only removes the record of the migration from your project. It does not delete the corresponding database element. To delete a database element, you need to execute the respective delete migration. Q4: Can I delete columns from an existing table using delete migrations? A: Yes, you can delete columns from an existing table by generating a delete migration and using the appropriate ActiveRecord methods, such as `remove_column`. Conclusion Delete migrations in Rails provide a reliable and organized approach to managing database changes. By following the outlined steps and best practices, you can confidently delete unnecessary elements from your database while ensuring code maintainability, collaboration among team members, and easy revert options.

Rails Rollback All Migrations

Rails Rollback All Migrations: A Comprehensive Guide


When developing a Rails application, database migrations are an integral part of the process. Migrations allow developers to modify the database schema and keep the database structure in sync with the application’s codebase. While migrations provide an effective way to handle changes to the database, there may be instances where you need to rollback or undo a series of migrations to a previous state.

In this article, we will explore the concept of rolling back all migrations in a Rails application. We will discuss the process of undoing migrations, the scenarios where rollback may be necessary, and provide step-by-step instructions for executing the rollback. Additionally, we will address commonly asked questions to ensure a thorough understanding of the topic. So, let’s dive in!

Understanding Database Migrations:

Before we delve into rolling back migrations, it is crucial to understand the fundamentals of database migrations in Rails. Migrations are Ruby classes designed to manage database changes. Each migration represents a specific modification to the database schema, such as adding or removing tables, columns, or indexes. Migrations allow developers to evolve the database structure smoothly, versioning each change sequentially.

When executed, migrations make changes to the database schema by creating tables, modifying columns, or adding indexes. These modifications are stored in the schema_migrations table, which keeps track of the executed migrations, ensuring they are not reapplied accidentally. Rails infers the current state of the database by looking at the migrations’ status, making it simple to migrate forward or roll back to a previous state.

Scenarios for Rolling Back Migrations:

Rolling back migrations is necessary in a few scenarios. Some common situations where it may be required are:

1. Accidental or incorrect migration: If a migration contains an error or does not implement the desired change correctly, rolling back allows developers to rectify the mistake.

2. Reverting to a previous version: During development, you may want to go back to a previous database structure temporarily. Rolling back allows you to return to an earlier state of the application.

3. Database cleaning: When performing testing or staging activities, it may be necessary to reset the database to its initial state. Rolling back can help achieve a clean slate by undoing all executed migrations.

Rollback Process:

Now that we understand the importance and need for rolling back migrations, let’s discuss the step-by-step process to execute the rollback in Rails:

1. Open your terminal and navigate to your Rails application’s root directory.

2. Run the following command to view the status of all migrations:
$ bin/rails db:migrate:status

This command lists all migrations, indicating which ones have and have not been executed. Note down the latest migration that has been applied.

3. To rollback all migrations, use the following command:
$ bin/rails db:rollback STEP=

Replace `` with the number of migrations you want to roll back. If you want to rollback all migrations, use the number obtained from the previous step.

4. Confirm the rollback by running the following command:
$ bin/rails db:migrate:status

Now, all the rolled back migrations should appear in the “down” state.

5. To reapply migrations in the future, you can run:
$ bin/rails db:migrate

This will migrate your database to the current version, applying any pending migrations.

Frequently Asked Questions:

Q1. What happens to the data when rolling back migrations?
A: Rolling back migrations only undoes alterations to the database’s structure; it does not alter or delete any data previously added. However, be cautious, as future migrations may expect specific data that was inserted in any rolled back migration.

Q2. Can I selectively rollback specific migrations?
A: Yes, you can use the `db:migrate:down` command followed by the migration’s version number to selectively roll back specific migrations. For example, running `$ bin/rails db:migrate:down VERSION=20220101010101` will roll back the specific migration with the given version number.

Q3. Can I redo rolled back migrations?
A: Yes, by reapplying the migrations using `$ bin/rails db:migrate`, any rolled back migrations will be re-executed, getting your database to the most recent schema state.

Q4. How can I handle data inconsistencies after rolling back migrations?
A: If a rollback leads to data inconsistencies, it is recommended to write a new migration that rectifies the issue. This new migration should address the inconsistencies and bring the data back to a consistent state.

Q5. Can I roll back multiple steps at once?
A: Yes, you can specify the number of migrations to roll back using the `STEP` parameter. For example, `$ bin/rails db:rollback STEP=3` will roll back the last three migrations.


Rolling back migrations in a Rails application is an essential skill for any developer. It allows for the graceful correction of errors, restoring a previous state, or cleaning the database entirely. Understanding the concepts and the step-by-step process provided in this article empowers you to confidently manage migrations in your Rails projects. Remember, while rolling back is a powerful tool, it is crucial to exercise caution and ensure data consistency throughout the process. Happy coding!

Images related to the topic rails rollback last migration

Rails Quick Tips - Rolling Back Database Migrations
Rails Quick Tips – Rolling Back Database Migrations

Found 49 images related to rails rollback last migration theme

Rolling Back Migration In Laravel. - Devopsschool.Com
Rolling Back Migration In Laravel. – Devopsschool.Com
Rails Migrations In A Nutshell
Rails Migrations In A Nutshell

Article link: rails rollback last migration.

Learn more about the topic rails rollback last migration.

See more:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *