mysql alter table how add column table mysql
例を使用して、列、インデックス、制約、テーブル名の変更などを追加/削除するMySQL ALTERTableコマンドについて学習します。
MySQL ALTER コマンドは、新しい列を追加するか、既存の列を削除するか、列のデータ型を変更することによって、既存のテーブルを変更するために使用されます。
簡単に言うと、ALTERコマンドは、列の追加/削除/更新、テーブルの名前変更などによって、既存のテーブルの構造を変更するために使用されます。
特定のスキーマのすべての要件を事前に利用できるようにすることはほとんど不可能です。したがって、必要に応じてテーブル構造を更新する方法が必要です。
学習内容:
MySQL ALTER TABLE
構文:
ALTER TABLE table_name (alter_option1, alter_option2...)
ここで、table_nameは、変更アクションを実行するテーブルの名前です。 1つ以上のalter_optionsを一緒に指定できます 他の机 コマンド。
MySQLが提供する主に使用されるさまざまなalter_optionsを見てみましょう。
サンプルデータとテーブルの設定
のさまざまな使用法を理解するために 年齢 コマンドでは、2つのサンプルテーブルを使用します–従業員と部門は以下のような構造になっています。
また、両方のテーブルにダミーデータを追加しています。
これらのテーブル間にFOREIGNKEY制約を追加していません。以下のセクションで説明する例では、ALTERコマンドを使用してそれらを追加する方法を学習します。
CREATE TABLE IF NOT EXISTS Employee_Department ( id INT, name VARCHAR(100), PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name VARCHAR(100), id INT, address VARCHAR(100), department_id INT, PRIMARY KEY (id) ); INSERT INTO `employee_department`(`name`,`id`) VALUES ('Information Technology',1),('HR',2),('Finance',3),('Accounting',4),('Housekeeping',5 ),('Security',6),('Support',7),('Contract Staff',8),('Sales',9),('Management',10); INSERT INTO `employee` (`id`,`name`,`address`) VALUES (1,'Alyssa Villarreal','Ap #558-3012 Nulla Street'),(2,'Vanna Parks','103-986 Cursus Rd.'),(3,'Quyn Byers','770 Nulla Avenue'),(4,'Kristen Hall','Ap #622-9967 Nullam St.'),(5,'Chelsea Stone','6017 Elementum St.'),(6,'Sacha Sweeney','239-7402 Etiam St.'),(7,'Sophia Charles','799 -745 Tellus. Rd.'),(8,'Jennifer Joyner','5803 Ligula. Avenue'),(9,'Mercedes Head','Ap #375-7999 Facilisis Rd.'),(10,'Reagan Holland','P.O. Box 625, 5744 Proin Avenue');
ALTERTableコマンドを使用するさまざまな方法
ザ・ MySQL ALTER コマンドは、列の追加/削除、インデックスまたは制約の追加/削除、テーブル自体の更新など、複数の目的で使用できます。例を使用して、さまざまなシナリオを見てみましょう。
列を追加
上記のサンプルテーブルを使用して、テーブルEmployeeにタイプINTの「department_id」という名前の新しい列を追加しましょう。
ALTER TABLE employee ADD COLUMN department_id INT
ドロップ列
新しい列を追加するのと同様に、 MySQL ALTER コマンドを使用して、既存の列をテーブルから削除できます。
上記で追加した列department_idをEmployeeテーブルから削除してみてください。
ALTER TABLE employee DROP COLUMN department_id
COLUMNを削除するときは、データ型ではなく列名を指定するだけでよいことに注意してください。
ALTERコマンドが成功したかどうかを検証するには、SHOWCOLUMNSコマンドを実行できます。
SHOW COLUMNS FROM employee;
出力:
フィールド | タイプ | ヌル | キー | デフォルト | エクストラ |
---|---|---|---|---|---|
名前 | varchar(100) | はい | ヌル | ||
id | int | はい | ヌル | ||
住所 | varchar(100) | はい | ヌル |
現在、「Employee」テーブルにdepartment_id列がないことがわかります。
制約の追加/削除
次に、ALTERを使用して制約を追加する方法を見てみましょう。
ALTERコマンドを使用して、既存のテーブルの制約を追加または削除できます。 2つのテーブルの間に追加する必要があるFOREIGNKEY制約の例を見てみましょう。
ALTERコマンドを使用して、employee_departmentテーブルのEmployeeテーブルにFOREIGN KEYCONSTRAINTを追加します。
Employeeテーブルにdepartment_idという名前の新しい列を追加します。
ALTER TABLE employee ADD COLUMN department_id INT
次に、FOREIGNKEY制約を追加します。
ALTER TABLE employee ADD FOREIGN KEY (department_id) REFERENCES employee_department(id)
この制約を検証するために、SHOWコマンドを使用してテーブル定義を確認できます。
SHOW CREATE TABLE employee;
テーブル | テーブルを作成する |
---|---|
社員 | CREATE TABLE `employee`( `name` varchar(100)DEFAULT NULL、 `id` int DEFAULT NULL、 `address` varchar(100)DEFAULT NULL、 `department_id` int DEFAULT NULL、 KEY `department_id`(` department_id`)、 制約 `employee_ibfk_1`外部キー(` department_id`)参照 `employee_department`(` id`) )ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci |
department_id列にFOREIGNKEY制約が作成されていることがわかります。
次に、ALTERコマンドを使用して、追加したFOREIGNKEY制約を削除する方法を見てみましょう。
ALTER TABLE employee DROP CONSTRAINT employee_ibfk_1
作成された制約の名前を使用する必要があることに注意してください。したがって、上記のSHOWコマンドの出力では、MySQLがFOREIGNKEY制約用に作成した制約名は「」であることがわかります。 employee_ibfk_1 ’
以下に示すように、SHOWコマンドを実行して、制約が削除されているかどうかを確認します。
SHOW CREATE TABLE employee;
テーブル | テーブルを作成する |
---|---|
社員 | CREATE TABLE `employee`( `name` varchar(100)DEFAULT NULL、 `id` int DEFAULT NULL、 `address` varchar(100)DEFAULT NULL、 `department_id` int DEFAULT NULL、 KEY `department_id`(` department_id`) )ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci |
インデックスの追加/削除
MySQL ALTER tableコマンドを使用すると、テーブルに対してINDEXESを作成または削除することもできます。
ALTERTABLEコマンドを使用して追加できるインデックスには4つの異なるタイプがあります。
#1)主キーを追加します: このコマンドは、指定された1つまたは複数の列に対してPRIMARYKEYインデックスを追加します。
以下の例では、Employeeテーブルを使用して、PRIMARYKEYインデックスを「Id」列に追加します。
ALTER TABLE employee ADD PRIMARY KEY (id);
#2)一意を追加: 指定された列に対して一意のインデックスを追加または作成します
仮に、テーブルに一意の名前が必要だとします。以下に示すように、Employeeテーブルの「name」列にUNIQUEインデックスを追加します。
ALTER TABLE employee ADD UNIQUE (name);
#3)インデックスを追加します: 任意の列に対して通常のインデックスを追加します。
Employeeテーブルの「address」フィールドに通常のインデックスを追加します。
ALTER TABLE employee ADD INDEX (name);
#4)フルテキストインデックスを追加します。 これは、テキスト検索の目的で使用される特殊なタイプのインデックスです。
Employeeテーブルの「name」列の値にFULLTEXTインデックスを追加します。
ALTER TABLE employee ADD FULLTEXT(address);
上記の4つの例すべてについて、 CREATETABLEを表示する 作成されたインデックスに関する詳細を取得するコマンド。
SHOW CREATE TABLE employee;
テーブル | テーブルを作成する |
---|---|
社員 | CREATE TABLE `employee`( `name` varchar(100)DEFAULT NULL、 `id` int NOT NULL、 `address` varchar(100)DEFAULT NULL、 `department_id` int DEFAULT NULL、 主キー( `id`)、 ユニークキー `name`(` name`)、 KEY `name_2`(` name`)、 フルテキストキー `address`(` address`) )ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci |
上記の出力では、create_table列の値に従ってすべてのインデックスが作成されていることがわかります。
インデックスの作成と同様に、ALTERコマンドを使用して既存のインデックスをテーブルから削除することもできます。
例:
ALTER TABLE employee DROP INDEX address;
上記のコマンドは、アドレスフィールドに追加したFULLTEXTインデックスを削除します。
名前に注意してください '住所'。 これは、出力のインデックス名と一致する必要があります CREATETABLEを表示する コマンド。
列のデフォルト値を変更する
他の机 このコマンドを使用して、既存の列のDEFAULT値を設定/変更することもできます。
8年の経験のためのoracleplsqlインタビューの質問
department_id列のデフォルト値を「1」に変更する例を見てみましょう。これにより、このテーブルへの新しい挿入により、department_id列の値が1に変更/設定されます。
ALTER TABLE employee ALTER department_id SET DEFAULT 1
Employeeテーブルに新しいレコードを追加します。
INSERT INTO `employee` (`id`,`name`,`address`) VALUES (11,'Saket Sharma','NB 23 Domlur')
次に、department_idにこのレコードを照会して、設定されている値を確認しましょう。
SELECT department_id FROM employee where id=11 //Output department_id 1
テーブル名を更新する
MySQL ALTER tableコマンドを使用して、既存のテーブルの名前を更新することもできます。スキーマ構造の更新が必要になる場合があります。これには、テーブル名の変更/更新が含まれる場合があります。
例– テーブルの名前を `employee`から` Employee_details`に変更します。
ALTER TABLE table_name RENAME TO new_table_name;
よくある質問
Q#1)MySQLでテーブル構造を変更するにはどうすればよいですか?
回答: MySQLは、MySQLの既存のテーブルの構造を変更するためのALTERコマンドを提供します。次のようなALTERコマンドを使用してさまざまな操作を実行できます。
- 列の追加/削除
- インデックスまたは制約の追加/削除
- テーブルの名前を変更する
Q#2)ALTERコマンドはテーブルをロックしますか?
回答: バージョンによって異なる場合があります。古いバージョンのMySQLでは、ALTERステートメントの実行中にテーブルがロックされます。一般に、ロックは発生します。つまり、ALTER中の読み取りと書き込みです。
例えば - 既存のテーブルに新しい列を追加すると、列が追加されているテーブルのすべての行に影響し、テーブルのレコード数が数百万の場合、ALTER操作の実行に時間がかかることがあります。この場合、読み取り/書き込みで発生するロックは、データベースがダウンしてアクセスできなくなるため、コストがかかります。
Q#3)ALTERテーブルに複数の列を追加できますか?
回答: はい、ALTERコマンドを使用して、1つのステートメント内に複数の列を追加できます。
id、name、addressの列を持つEmployeeテーブルがある例を見てみましょう。さらに、highest_education(varchar型)とphone_number(varchar型)という名前の2つの列を追加するとします。
ALTER TABLE employee ADD highest_education VARCHAR(50), ADD phone_number VARCHAR(20);
テーブル情報を見てみましょう
SHOW COLUMNS FROM employee;
出力:
フィールド | タイプ | ヌル | キー | デフォルト | エクストラ |
---|---|---|---|---|---|
名前 | varchar(100) | はい | ユナイテッド | ヌル | |
id | int | しない | PRI | ヌル | |
住所 | varchar(100) | はい | ヌル | ||
department_id | int | はい | 1 | ||
最高の教育 | varchar(50) | はい | ヌル | ||
電話番号 | varchar(20) | はい | ヌル |
上記の出力では、highest_educationとphone_numberの列が追加されています。
結論
このチュートリアルでは、さまざまな使用法について学びました。 MySQL ALTER テーブルコマンド。 ALTERは、MySQLの既存のテーブルの構造をALTERするために複数の目的で使用できるため、重要なコマンドです。
列の追加/削除、インデックスまたは制約の追加/削除などに使用できます。また、既存のテーブルの名前を変更する場合にも使用できます。
MySQLを学習する人は、ALTER tableコマンドを深く理解している必要があります。これは、既存のテーブルスキーマを変更する必要があるデータベースのメンテナンスフェーズで主に使用されるためです。