ディレクトリ
データテーブルを変更するのMySQL
これは、既存のデータテーブルを変更するために、データベースに変更テーブルの構造を指します。テーブルを変更するには、ALTER TABLE文を使用MYSQL。操作は、一般的に、テーブルを変更するために使用されています、テーブル名を変更し、データのフィールド名やフィールドタイプを変更し、フィールドの追加や削除、フィールドの配置位置を変更するために、変更テーブルのストレージエンジン、外部キーテーブル制約を削除します。
1テーブル名を変更します。
次のようにMySQLがALTER TABLE文のテーブル名を変更することによって達成され、特定の構文規則は以下のとおりです。
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
TOが使用されるオプションとではありませんかない場合は結果に影響を与えます。
[実施例]:データテーブルtb_dept1改名tb_deptment1。
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_dept1 |
| tb_emp1 |
| tb_emp5 |
+-------------------+
3 rows in set (0.00 sec)
mysql> alter table tb_dept1 rename tb_deptment1;
Query OK, 0 rows affected (0.22 sec)
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_deptment1 |
| tb_emp1 |
| tb_emp5 |
+-------------------+
3 rows in set (0.00 sec)
2変更されたデータ・タイプ・フィールド
フィールドのデータ・タイプを変更する、データ・タイプ・フィールドは、別のデータ型に変換されます。
MySQLでの変更構文規則フィールド型のデータは次のとおりです。
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
テーブル「テーブル名」の名前は、単により多くのフィールドのデータ型を変更するには、「フィールド名は、」変更するフィールドのニーズを指し、「データ型は、」変更されたデータフィールドの新しいタイプを指します。
[実施例] VARCHAR VARCHAR(22)によって修正されたデータテーブルtb_deptl名フィールド(30)のデータ型。
テーブル名を変更する操作を実行する前に、DESCのtb_deptテーブルの構造は、以下の結果を表示します:
mysql> desc tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.06 sec)
mysql> alter table tb_dept1 modify name varchar(30);
Query OK, 0 rows affected (0.36 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.89 sec)
3フィールド名を変更します。
次のように変更MySQLのテーブルのフィールド名の構文規則は以下のとおりです。
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
ここで、「古いフィールド名」フィールド名が変更前を意味し、「新しいフィールド名が」修飾フィールド名を指し、「新しいデータ型」に変更されたデータのデータ型を参照する型のフィールドは新しいものかもしれない場合は変更する必要はありませんデータ型は、オリジナルと同じで提供することができるが、データ型は空にできません。
次のように[例]はtb_dept1のLOCにテーブル内の位置データのフィールド名は、データ・タイプは、SQL文、変化しないまま:
ALTER TABLE tb_deptl CHANGE location loc VARCHAR(50);
mysql> desc tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.04 sec)
mysql> alter table tb_dept1 change location loc varchar(50);
Query OK, 0 rows affected (0.38 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
4 [追加]フィールド
ビジネス・ニーズの変化に応じて、既存のテーブルにすでに新しいフィールドを追加する必要があります。フィールド名、データ型、整合性制約を含む完全なフィールド。フィールドの構文を追加し、次のとおりです。
ALTER TABLE<表名> ADD <新字段名> <数据类型> [约束条件] [FIRST|AFTER 已存在字段名];
我々は、フィールドの名前と呼ばれる新しいフィールドを追加する必要があります。
「第一の」は、その役割は、新たにテーブルの最初のフィールドにフィールドセットを追加され、オプションです。
「AFTER」のオプションであり、その役割は、指定「既存のフィールド名」の後ろに追加された新しいフィールドを追加することです。
4.1フィールドのない整合性制約条件を追加していません
[実施例]マネージャーIDは、データテーブルtb_deptlに整合性制約(管理番号)なしで添加INTタイプフィールド、
次のようにSQL文は次のとおりです。
mysql> alter table tb_dept1 add managerId int(10);
Query OK, 0 rows affected (0.35 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.50 sec)
整合性制約条件の4.2の追加フィールド
[実施例]以下のように、データタイプフィールドcolumnIのtb_deptlテーブルにSQL文を非NULL VARCHAR(12)を追加します。
mysql> alter table tb_dept1 add column1 varchar(12) not null;
Query OK, 0 rows affected (0.25 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.03 sec)
4.3テーブルの最初の列のフィールドを追加します
次のようにデータテーブルtb_dept1のCOLUMN2にint型のフィールドを追加し、SQL文は次のとおりです。
mysql> alter table tb_dept1 add column2 int(11) first;
Query OK, 0 rows affected (1.44 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.64 sec)
テーブルの指定された列の後に4.4フィールドを追加します。
次のように[実施例]データテーブルの名前列tb_dept1 COLUMN3 INTタイプフィールドを追加した後、SQL文は次のとおり
mysql> alter table tb_dept1 add column3 int(11) after name;
Query OK, 0 rows affected (0.60 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.02 sec)
5 [削除]フィールド
フィールドを削除するデータテーブルのフィールドがテーブルから削除されている次のように、構文は次のとおりです。
ALER TABLE <表名> DROP <字段名>
「フィールド名は、」テーブルtb_dept1テーブルから必要性のcolumn2のフィールドを参照します
[実施例5]削除フィールドデータテーブルCOLUMN2テーブルtb_dept1
mysql> alter table tb_dept1 drop column2;
Query OK, 0 rows affected (0.66 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.32 sec)
フィールドの6変性配置位置
データ・テーブルの場合は、作成時に、注文テーブルのフィールドが決定されています。
しかし、構造が完全ではないテーブルは、テーブルの相対位置は、ALTER TABLEを介してフィールドで変更でき、変更することができません。構文は次のとおりです。
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
「フィールド1」フィールド単に複数の修飾部位を、「データ種別」と「フィールド1」データ・タイプ、
「最初」はオプションであり、それは、「フィールド1」がテーブルの最初のフィールドに変更したことをいいます
「フィールドの後に2」は、「フィールド2」以下に「フィールド1」を指します。
6.1テーブルの最初のフィールドのフィールドを変更します
[実施例]テーブルの最初のフィールドのフィールドデータテーブルCOLUMN1のtb_dept1修飾、SQL文として次の
mysql> alter table tb_dept1 modify column1 varchar(12) first;
Query OK, 0 rows affected (1.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column1 | varchar(12) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.18 sec)
の指定したフィールド次のリストを変更する6.2
次のように[実施例]ロケーションフィールドの後ろに挿入されたフィールドデータテーブルtb_dept1のCOLUMN1、SQLステートメントがあります:
mysql> alter table tb_dept1 modify column1 varchar(12) after location;
Query OK, 0 rows affected (1.96 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
| column1 | varchar(12) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.02 sec)
テーブルストレージエンジン7つの変更
MySQLのストレージエンジンのサポート
エンジン名 | サポート |
---|---|
FEDERATED | ノー |
MRG MYISAM | それはあります |
MYISAM | それはあります |
BLACKHOLE | それはあります |
CSV | それはあります |
MEMORY | それはあります |
アーカイブ | それはあります |
InnoDBの | それはあります |
パフォーマンスSCHEMA | デフォルト |
[実施例]表データストレージエンジンtb_emp1変更のMyISAM。
mysql> alter table tb_emp1 engine=MyISAM;
Query OK, 0 rows affected (0.18 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table tb_emp1\G;
*************************** 1. row ***************************
Table: tb_emp1
Create Table: CREATE TABLE `tb_emp1` (
`id` int(11) DEFAULT NULL,
`name` varchar(25) DEFAULT NULL,
`deptId` int(11) DEFAULT NULL,
`salary` float DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.01 sec)
ERROR:
No query specified
表8削除外部キー制約
あなたは、もはや必要、データベース内で定義されていない外部キーの場合、あなたはそれを削除することができます。あなたが外部キーを削除すると、主テーブルからテーブル間に持ち上げると関係され、
MySQLは次のように外部キー構文は削除します。
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
「外部キー制約名」は、以下のパラメータ定義テーブルを参照する際に、キーワードCONSTRAINT