MYSQL – 変更、削除、名前変更、変更
⚡ スマートサマリー
ALTER、DROP、RENAME、MODIFY は MySQL データベースが既に使用されている状態で、その構造を変更するコマンド。これらのコマンドは、既に格納されている行を破棄することなく、テーブルや列などのオブジェクトを追加、削除、名前変更、再定義します。

ALTERコマンドとは何ですか? MySQL?
その 変更する このコマンドは、データベースのライフサイクル中に変更が必要な既存のデータベース、テーブル、ビュー、またはその他のデータベースオブジェクトを変更します。既に作成され、データが格納されたスキーマを進化させるためのコマンドです。
ビジネス要件は常に変化するため、データベース設計もそれに合わせて進化していく必要があります。例えば、Myflixデータベースの設計が実装され、ユーザーが実際に使用し始めた段階で、重要な情報が抜け落ちていたことにチームが気づいたとします。既存のデータ行を失いたくはありません。ただ、新しい情報を既存のデータ行と並べて記録したいだけなのです。
ALTER はまさにそのような状況に対応します。フィールドのデータ型を文字列から数値に変更したり、フィールド名を変更したり、テーブルにまったく新しい列を追加したりすることができ、しかもテーブルに既に格納されているデータはそのまま保持されます。
コマンドの目的が明確になったので、次のステップはそれを実行する構文を作成することです。
MySQL ALTER構文
既存のテーブルに列を追加する際に使用する基本的な構文を以下に示します。
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
Pr_media
- 「ALTER TABLE `テーブル名`」 を伝えるコマンドです MySQL サーバーにアクセスして、「table_name」という名前のテーブルを変更します。
- 「ADD COLUMN `列名` `データ型`」 を伝えるコマンドです MySQL サーバーに、データ型が `data_type` の新しい列 `column_name` を追加する。
Myflixがオンライン請求と決済を導入したとします。これに対応するため、会員テーブルにクレジットカード番号用のフィールドを追加する必要があります。変更を加える前に、現在のテーブル構造を確認することをお勧めします。以下のスクリプトは、その確認を行うものです。
SHOW COLUMNS FROM `members`;
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| フルネーム | varchar(350) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL |
💡 int(11)に関する注記: 括弧内の数字は表示幅のみを表します。 MySQL 8.0.17 では整数型に対して非推奨となったため、最新のサーバーではこの列は単に次のように報告されます。 int型ストレージ容量は変更されていません。
以下のスクリプトは、メンバーテーブルに新しいフィールドを追加します。
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
このスクリプトをmyflixdbに対して実行すると、membersテーブルにデータ型がVARCHARのcredit_card_numberという名前の列が追加されます。SHOW COLUMNSスクリプトを再度実行すると、次の結果が得られます。
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| フルネーム | varchar(350) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL | ||
| クレジットカード番号 | varchar(25) | はい | NULL |
強調表示された行は、credit_card_numberがmembersテーブルに追加されたことを示し、他の列に既に格納されているデータは追加によって変更されていないことを示しています。
列を追加するだけでは半分しか完了しません。スキーマは不要になったオブジェクトを削除する必要もあり、それがDROPコマンドの役割です。
DROPコマンドとは何ですか MySQL?
DROP コマンドはオブジェクトを完全に削除します。
- データベースを削除する MySQL .
- データベースからテーブルや列などのオブジェクトを削除します。
⚠️ 警告: DROP操作は元に戻せません。バックアップがないと、オブジェクトもその中の行も復元できません。そのため、対象に対してSELECTを実行し、バックアップが正常であることを確認してください。
ドロップping 列
上記のALTERの例では、membersテーブルにcredit_card_numberという列が追加されました。オンライン請求機能が延期され、その列を削除する必要が生じたとします。以下のスクリプトでそれが可能です。
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
スクリプトを実行すると、membersテーブルからcredit_card_number列が削除されます。列を再度一覧表示することで、結果を確認できます。
SHOW COLUMNS FROM `members`;
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| フルネーム | varchar(350) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL |
クレジットカード番号が入力欄から削除されました。
ドロップテーブル
データベースからテーブル全体を削除する構文は以下のとおりです。
DROP TABLE `sample_table`;
実際の物体に適用すると、この記述は次のようになります。
DROP TABLE `categories_archive`;
これを実行すると、`categories_archive`という名前のテーブルと、その中のすべての行がデータベースから削除されます。
ドロップデータベース
同じキーワードでスキーマ全体が削除されます。IF EXISTS を追加すると、次のエラーが抑制されます。 MySQL ターゲットが既に存在しない場合に発生する例外で、複数回実行されるスクリプト内で役立ちます。
DROP DATABASE IF EXISTS `myflixdb_backup`;
オブジェクトの削除は最終的な操作です。オブジェクト自体は残しておくべきで、名前だけが間違っている場合は、RENAMEコマンドが適切なツールです。
RENAMEコマンドとは何ですか? MySQL?
RENAMEコマンドは、テーブルや列などの既存のデータベースオブジェクトの名前を新しい名前に変更します。 テーブルの名前を変更しても、テーブルに含まれるデータが失われることはありません。
このコマンドの基本的な構文は以下のとおりです。
RENAME TABLE `current_table_name` TO `new_table_name`;
movierentals テーブルの名前を movie_rentals に変更するには、以下のスクリプトを使用します。
RENAME TABLE `movierentals` TO `movie_rentals`;
このコマンドを実行すると、テーブル名「movierentals」が「movie_rentals」に変更されます。名前の変更はラベルの変更のみなので、同じコマンドを逆に実行すれば元の名前に戻ります。
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE はテーブル名を扱います。 の項目に表示されます。そして、その内容を変えるのは、CHANGEキーワードの働きです。
キーワードを変更する
CHANGEキーワードを使用すると、
- 列名を変更する
- 列のデータ型を変更します
- 列の制約を変更する
例を考えてみましょう。以下のスクリプトで確認できるように、members テーブルの full_names フィールドは、幅 350 の varchar データ型です。
SHOW COLUMNS FROM `members`;
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| フルネーム | varchar(350) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL |
要件が
- フィールド名を「full_names」から「fullname」に変更してください。
- データ型を幅250のchar型に変更してください。
- NOT NULL制約を追加する
これら3つの編集はすべて、1つのCHANGEステートメントによって実行されます。
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
myflixdbに対して実行し、その後SHOW COLUMNSスクリプトを実行すると、次の結果が得られます。
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| 氏名 | char(250) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL |
この列は現在「fullname」という名前で、char(250)型の値を格納し、NULL値は拒否します。
キーワードの変更
MODIFYキーワードを使用すると、
- 列のデータ型を変更します
- 列制約を変更する
上記のCHANGEの例では、フィールド名の変更は目的の一部に過ぎないにもかかわらず、フィールド名を2回指定する必要がありました。 CHANGEステートメントからフィールド名を省略するとエラーが発生します。 データ型と制約のみを調整し、名前は変更しない場合は、MODIFYコマンドで列を一度指定するだけで済みます。
以下のスクリプトは、「fullname」フィールドの幅を250から50に変更します。
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
myflixdbに対して実行し、その後SHOW COLUMNSスクリプトを実行すると、以下に示す結果が得られます。
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| 氏名 | char(50) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL |
⚠️ 警告: 列幅を狭めると、収まらなくなったデータが切り捨てられます。50 文字を超える名前はすべてこのステートメントによって切り捨てられるため、最長の既存の値をチェックしてください。 SELECT フィールドを縮小する前にクエリを実行します。
列の変更、修正、名前変更
これら3つのキーワードは重複しており、間違ったキーワードを選択することが、この分野で最もよくある間違いの原因です。下の表は、それらを並べて表示したものです。
| キーワード | 列名を変更します | 型と制約を変更します | 旧姓(必須) | 典型的な使用 |
|---|---|---|---|---|
| CHANGE | はい | はい | はい、それに加えて新しい名前です | 1つのステートメントで名前と定義を変更 |
| 変更 | いいえ | はい | 名前は一度だけ与えられます | 列の幅を広げる、狭める、または再入力する |
| 列名の変更 | はい | いいえ | はい、それに加えて新しい名前です | 名前のみ変更、 MySQL 8.0年以降 |
MySQL 8.0では、最も単純なケースとして、再定義を一切行わずに名前を変更するという4つ目のオプションが追加されました。
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
型と名前は決定済みです。残る問題は、新しい列がテーブル内のどこに配置されるかであり、これはAFTERキーワードによって制御されます。
AFTERキーワード
デフォルトでは、ALTER TABLE コマンドで追加された列はテーブルの末尾に配置されます。特定の位置に配置するには、ALTER コマンドに AFTER キーワードを組み合わせて使用します。
以下のスクリプトは、メンバーテーブルの「date_of_birth」の直後に「date_of_registration」を追加します。
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
myflixdbに対して実行し、その後SHOW COLUMNSスクリプトを実行すると、以下に示す結果が得られます。
| フィールド | タイプ | ヌル | キー | デフォルト | 余分 |
|---|---|---|---|---|---|
| 会員番号 | int(11) | NO | PRI | NULL | 自動増加 |
| 氏名 | char(50) | NO | NULL | ||
| 性別 | varchar(6) | はい | NULL | ||
| 生年月日 | date | はい | NULL | ||
| 登録日 | date | はい | NULL | ||
| 実在住所 | varchar(255) | はい | NULL | ||
| 郵便住所 | varchar(255) | はい | NULL | ||
| 連絡先番号 | varchar(75) | はい | NULL | ||
| メール | varchar(255) | はい | NULL |
強調表示されている行は、date_of_birth の後に追加された列です。キーワード FIRST も同様に機能し、新しい列をテーブルの先頭に移動します。
