基本テーブルalter tableの変更

8189 ワード

alter table 

【add[完全拘束]】
【drop 】
【alter column 】;
add句は、新しい属性列を追加するために使用されます.
alter table student add ages smallint;
 
dropは、指定した整合性制約を削除するために使用されます.
なし!
 
alter columnは、指定したカラムのデータ型を変更するために使用されます.
alter table student alter column ages char(3);
or
alter table student modify ages char(3);
 
注意:
alter tableはカラム名を変更できません.
空の値を含む属性列をnot null整合性制約に変更することはできません.
カラムにレコードがある場合は、プロパティ・カラムのデータ幅やデータ型は変更できません.
nullとnot nullコンストレイントのみを変更できます.他のタイプのコンストレイントは、変更後のコンストレイントを再定義する前に削除する必要があります.
 
テーブル名の変更:
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| course            |
| sc                |
| student           |
+-------------------+
3 rows in set (0.00 sec)

mysql> alter table sc rename select_course;
Query OK, 0 rows affected (0.07 sec)

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| course            |
| select_course     |
| student           |
+-------------------+
3 rows in set (0.00 sec)

 
フィールドのデータ型を変更するには、次の手順に従います.
mysql> alter table student modify Sno char(9);
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Sno   | char(9)     | NO   | PRI |         |       |
| Sname | char(20)    | NO   | UNI | NULL    |       |
| Ssex  | char(2)     | NO   |     | NULL    |       |
| Sage  | smallint(6) | YES  |     | NULL    |       |
| Sdept | char(9)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 
mysql> alter table student alter column Sno char(10);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'char(
10)' at line 1

何が起こったのか分かりませんが、知っていることを教えてください.ははは
 
フィールド名の変更
mysql> alter table student change Sage Sages smallint(5);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Sno   | char(10)    | NO   | PRI |         |       |
| Sname | char(20)    | NO   | UNI | NULL    |       |
| Ssex  | char(2)     | NO   |     | NULL    |       |
| Sages | smallint(5) | YES  |     | NULL    |       |
| Sdept | char(9)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

studentテーブルのSageフィールドをSages同時smallint(5)に変更します.
 
完全性のない制約を追加するフィールド
mysql> alter table student add Sages not null;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'not n
ull' at line 1

既存のフィールドで整合性制約を変更することはできません.
mysql> alter table student add Sage smallint(5) not null;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Sno   | char(10)    | NO   | PRI |         |       |
| Sname | char(20)    | NO   | UNI | NULL    |       |
| Ssex  | char(2)     | NO   |     | NULL    |       |
| Sdept | char(9)     | YES  |     | NULL    |       |
| Sages | smallint(5) | YES  |     | NULL    |       |
| Sage  | smallint(5) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

Sageフィールドを追加し、整合性制約をnot nullに追加します.
 
フィールドの削除
mysql> alter table student drop Sages;
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Sno   | char(10)    | NO   | PRI |         |       |
| Sname | char(20)    | NO   | UNI | NULL    |       |
| Ssex  | char(2)     | NO   |     | NULL    |       |
| Sdept | char(9)     | YES  |     | NULL    |       |
| Sage  | smallint(5) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
テーブルの作成中に不行き届きを考慮するのは避けられないため、後でテーブルを変更してテーブルを変更するにはalter table文を使用する必要があります.
表名コードの変更は、mysql>alter table student rename person、Query OK, 0 rows affected (0.03 sec)
ここのstudentは原名で、personは修正した名前をrenameで名前を変更したり、rename toを使用したりすることができます
 
フィールドを変更するデータ型コードは、mysql>alter table person modify name varchar(20);Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0
ここでmodifyの後ろのnameはフィールド名で、元のvarchar(25)をvarchar(20)に変更します.
フィールド名コードの変更は、mysql>alter table person change stu_name name varchar(25); Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0
ここでstu_nameは元の名前で、nameは新しい名前です注意しなければならないのはデータ型を変えるかどうかにかかわらず、後のデータ型はすべて書きますデータ型を修正しなければ元のデータ型だけを書くことができますtips:私達は同様にchangeを使ってmodifyの効果を達成することができて、後で同じフィールド名を書くだけです
完全性のない制約条件を追加するフィールドコードは、mysql>alter table person add sex boolean、Query OK, 0 rows affected (0.21 sec) Records: 0 Duplicates: 0 Warnings: 0
ここでsexの後ろにはデータ型のみが付いており、整合性制約はありません.
完全性制約条件を追加するフィールドコードは、mysql>alter table person add age int not null、Query OK, 0 rows affected (0.17 sec) Records: 0 Duplicates: 0 Warnings: 0
ageフィールドを1つ追加し、not null整合性制約を追加します.
ヘッダーにフィールドコードを追加するには、mysql>alter table person add num int primary key first;Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0
デフォルトではフィールドの追加は表の最後に追加され、追加文の後にfirstを付けるとヘッダーに追加されます.
指定した場所にフィールドコードを追加するには、mysql>alter table person add birth date after name;Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0
ここに新しいフィールドを追加してnameフィールドの後ろに置くtps:テーブル内のフィールドのソートはテーブルにあまり影響しませんが、より合理的なソートはテーブルの理解に便利です.
削除フィールドコードは以下の通りです:mysql>alter table person drop sex;Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0
前の削除テーブルやデータベースと同様にdropを使用する必要があるのは、削除フィールドがalter tableでテーブル名に続くことです.
フィールドを最初の位置コードに変更するには、mysql>alter table person modify id int first;Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0
firstは前述したように、フィールドの後ろにデータ型を書くことに注意してください.
フィールドを指定した位置コードに変更するには、mysql>alter table person modify name varchar(25)after id;Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0
nameフィールドをidの後ろに置きました.ここのvarchar(25)は全部書きます.varcharはできません.以上のステップを操作する前にdesc tableをお勧めします.
テーブルのストレージエンジンコードを変更するには、mysql>alter table user rename person、Query OK, 0 rows affected (0.05 sec)
ここでは、各ストレージエンジンの特徴を具体的に説明しません.内容が多く修正された後、show create table文を使用して表示することを忘れないでください.第3節には、書き込みtipsがあります.テーブルに多くのデータがある場合は、ストレージエンジンを簡単に変更しないでください.
追加テーブルの外部キーコードは、mysql>alter table score add constraint fk foreign key(stu_id)references student(id);Query OK, 10 rows affected (0.18 sec) Records: 10 Duplicates: 0 Warnings: 0
ここではaddを使用して追加するだけで、後述の構文は第4節の外部キー設定を参照してください.
テーブルを削除する外部キー制約コードは、mysql>alter table student 3 drop foreign key fk、Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0
基本的なテーブル構造の説明では外部キーを表示できないので、この操作を行う前にshow create tableを使用してテーブルを表示するのが望ましい.ここでfkは設定したばかりの外部キーである.注意しなければならないのは、関連するテーブルを削除するには、まず外部キーを削除して外部キーを削除しなければならない.外部キーの設定第4節では、テーブルを作成するときに外部キーを設定していない場合は、上記の方法を使用して詳細な出典を参照してください.http://www.jb51.net/article/32955.htm