mysql create table tutorial with examples
このチュートリアルでは、構文とプログラミングの例を使用してMySQL CREATETABLEコマンドの使用法を検討します。
CREATE TABLEステートメントは、SQLのDDL(データ定義言語)の一部です。
特定のデータベースでテーブルを作成する方法、列名、およびテーブルの作成中にDBエンジンについて説明する方法と、SQLテーブルの命名規則に関する規則について説明します。
学習内容:
前提条件
SQLコマンドを実行するための前提条件は、MySQLサーバーをダウンロードすることです。無料のコミュニティエディションをダウンロードできます ここに。
また、このチュートリアルのすべての例と説明には、MySQL WorkbenchSQLクライアントを使用します。 MySQLWorkbenchの無料コミュニティエディションをダウンロードできます ここに (使用しているOSに応じてバージョンを選択できます)。
MySQL Workbenchを使用したくない場合は、MySQLServerのデフォルトインストールに付属しているMySQLコマンドラインクライアントを使用することもできます。
MySQL CREATETABLEコマンド
CREATE TABLEコマンドは、MySQLのコマンドのDDL(データ定義言語)セットの一部であり、ユーザーが特定のデータベースの新しいテーブルを作成できるようにします。
注意: CREATE TABLEコマンドは、MySQL、Postgres、SQLServerなどのほぼすべてのリレーショナルデータベースに存在します。
MySQL CREATETABLE構文
最も単純な形式では、CREATE TABLEコマンドを、テーブル名と列定義などの基本的なオプションだけで使用できます。
CREATE TABLE (IF NOT EXISTS) tableName ( column1 datatype, column2 datatype, .... );
構文引数を詳しく理解しましょう。
- tableName: これは、作成しようとしているテーブルの名前である必要があります。完全修飾名である必要があります(デフォルトのデータベースが設定されていない場合)。 例えば、 databaseName.tableName
テーブル名は、引用符なしで、または `tableName`や` databaseName`.`tableName`のようなバッククォート記号を使用して指定できます。 - 列の定義: SQLのテーブルは、少なくとも1つの列で構成されている必要があります。すべての列定義は、column_nameと列データ型で構成されている必要があります。オプションで、主キー、null、null以外などの他の列プロパティを含めることもできます。
上記の構文を使用してテーブルを作成する例を見てみましょう。
列を持つEMPLOYEE_DETAILS(データベース内– SAMPLE_DB)という名前のテーブルを作成します
- 名前: varchar(100)
- 年齢: int
- 住所: varchar(100)
CREATE TABLE SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100) );
以下に、テーブル作成の出力を示します。
注意:
#1)上記の構文で(IF NOTEXISTS)オプションコマンドが使用されていることに注意してください。
作成しようとしているテーブルがデータベースにすでに存在する場合にエラーが発生しないようにするため、このコマンドを使用することをお勧めします。
IF NOTEXISTSを使用した場合と使用しない場合の使用例を次に示します。
- IF NOT EXISTSがないと、テーブルがすでに存在する場合にエラーが生成されます。
- IF NOT EXISTSを使用すると、エラーは生成されません。ただし、テーブルがすでに存在するという警告が表示されます。
#2)CREATE TABLEコマンドの使用中の「tableName」は、データベース名で完全修飾されている必要があります。つまり、使用方法は次のとおりです。 SAMPLE_DB.employee_details
テーブル名を指定する他の方法は、「USE」コマンドを使用して現在のデータベースを設定することです。 例えば。 USE SAMPLE_DB; 次に、完全修飾テーブル名の代わりにテーブル名のみを実行/使用します。
テーブルオプション付きのCREATETABLE
テーブルオプションは、MySQLテーブルの動作を最適化するために使用されます。これらは、MySQL CREATE TABLEコマンドを使用して(または後でALTER TABLEコマンドを使用して)テーブルを作成するときに適用できます。
構文は同じままですが、指定できる追加のテーブルオプションがあります。
CREATE TABLE (IF NOT EXISTS) tableName ( column1 datatype, column2 datatype, .... ) (table “” not found /)
;
以下で最も広く使用されているオプションについて説明します(テーブルオプションの完全なリストは次のとおりです。 ここに )。
#1)エンジン
これは、テーブルのストレージエンジンを指定するために使用されます。つまり、デフォルト値はInnoDBです。特定のストレージエンジンが必要な場合を除いて、これを変更する必要はありません。ストレージエンジンの他の有効な値は、MEMORY、CSV、HEAPなどです。
MySQL CREATETABLEの一部としてENGINEを指定するための構文を以下に示します。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100) )ENGINE='MEMORY';
#2)AUTO_INCREMENT
このオプションは、テーブルの初期AUTO_INCREMENT値を設定するために使用されます。つまり、デフォルト値は1ですが、他の正の整数値にオーバーライドできます。
注意: AUTO_INCREMENTは、テーブルの1つの列にのみ指定でき、主キーである必要があります。自動インクリメントを10として指定し、レコードを挿入して自動インクリメントが正しく設定されているかどうかを検証する例を見てみましょう。
同じテーブルemployee_detailsを使用しており(このコマンドを実行する前に既存のテーブルを削除してください)、主キーとしてマークされた追加のidフィールドがあります。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details( id int not null AUTO_INCREMENT primary key, name varchar(100), age int, address varchar(100) )AUTO_INCREMENT=10;
IDの値のない行を挿入し、値が10から始まる値から挿入されていることを確認しましょう。
INSERT INTO SAMPLE_DB.employee_details(name,age,address) values ('aman kumar',20,'mumbai'); select * from SAMPLE_DB.employee_details;
#3)チェックサム
テーブル全体のチェックサムを保存する場合は、これを1に設定する必要があります。これは通常、破損したテーブルがないことを確認するために使用されます。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100) )CHECKSUM=1;
CHECKSUMは、挿入または更新中にテーブル全体のライブチェックサムを保持します
パーティショニングの詳細を含むCREATETABLE
必要に応じて、パーティショニングオプションを使用して、ユーザー定義のパーティショニングについて言及することもできます。
概念としてのパーティショニングは、アクセス時間の短縮とクエリの最適化を確実にするために、ファイルシステム全体にテーブルの内容を分散するために広く使用されています。パーティショニングは、指定された戦略またはパーティショニングキーに応じて、大きなテーブルを小さなテーブルに分割します。
MySQL CREATETABLEコマンドを使用してパーティションの詳細を指定する方法を見てみましょう。
サンプルテーブルemployee_detailsを使用し、department_idという名前の新しい整数列を追加します。これは、データを均等に分散するためのパーティションハッシュキーとして使用されます。
また、パーティションの数を指定すると、実際に作成されるパーティションの数(この場合は4)が示されます。指定しない場合、デフォルトでは1つのパーティションしかありません。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100), department_id int )PARTITION BY HASH (department_id) PARTITIONS 4;
注意: 一般に、パーティションの作成に使用されるキーは、テーブルに使用されると予想されるアクセスパターンによって異なります。この場合、ほとんどの場合、部門IDに基づいてテーブルにクエリを実行するとします。その場合、ハッシュキーの一部としてdepartment_idを使用するのが理にかなっています。
MySQLテーブルのクローン作成とコピー
場合によっては、既存のテーブルのクローンを作成したり、あるテーブルから別のテーブルにコンテンツをコピーしたりすることができます。 MySQLは、以下に示すように、これを実現する2つの方法をサポートしています。
- LIKEコマンドの使用
- SELECTコマンドの使用
LIKEコマンドを使用したテーブルのクローン作成
LIKEコマンドを使用すると、既存のテーブルとまったく同じ列名とプロパティを持つ新しいテーブルを作成できます。
LIKEコマンドを使用した構文は次のとおりです。
mp3曲をダウンロードするのに最適なアプリ
CREATE TABLE tableName1 LIKE tableName2
上記のコマンドを使用すると、tableName2と同じ構造とプロパティで新しいテーブル(tableName1)が作成されます。
このアプローチでは、列名とプロパティのみが複製され、実際のテーブルデータは複製されないことに注意してください。
employee_detailsという名前のテーブルを作成し、このテーブルを使用して、LIKEオプションを使用してstudent_detailsという名前の新しいテーブルを作成してみましょう。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100), department_id int ); CREATE TABLE SAMPLE_DB.student_details LIKE SAMPLE_DB.employee_details;
上記のコマンドの出力を以下に示します。
SELECTコマンドを使用したテーブルのクローン作成
このアプローチでは、SELECTコマンドを使用して、既存のテーブルのコピーを新しいテーブルに作成します。
このアプローチでは、テーブルのデータも新しいテーブルにコピーされます。
CREATE TABLE tableName1 AS SELECT * FROM tableName2;
employee_detailsという名前のテーブルを作成し、このテーブルを使用して、SELECTオプションを使用してstudent_detailsという名前の新しいテーブルを作成してみましょう。
CREATE TABLE SAMPLE_DB.student_details AS SELECT * FROM SAMPLE_DB.employee_details;
MySQLテーブルの命名規則
前のセクションでは、MySQLテーブルの作成について学習しました。次に、MySQLに関して適用される制限とともに、テーブルに名前を付けるときに留意する必要のあるいくつかのルールを見てみましょう。
これらの規則/ルールは、SQLテーブルとデータベースの両方に適用されます。
#1)名前の法的文字
に) 引用符で囲まれていない名前は、すべての文字が数字であるとは限らないことを除いて、SQLServerのデフォルトの文字セットの任意の文字で構成できます。 例えば、 「23test」は有効なテーブル名ですが、「2345」ではありません。
以下に、引用符で囲まれていない名前に使用できる文字のリストを示します。
Javaインタビューの質問と回答のWebサービス
ASCII:(0-9、a-z、A-Z $ _)(基本ラテン文字、数字0-9、ドル、アンダースコア)
拡張:U + 0080 .. U + FFFF ..
ASCIIコードの詳細 ここに
b) テーブル名とデータベース名は、バッククォート文字( `)で引用でき、バッククォート文字自体を除く任意の文字/文字を含めることができます。引用符で囲まれた名前を使用すると、すべての数字を持つテーブル/データベース名を使用することもできます。
そのようなテーブルの場合、そのようなテーブル内のデータにアクセスするには、テーブルの前後のバッククォートやデータベース名を使用する必要があることに注意してください。
c) テーブル名とデータベース名には、データベースとテーブルの区切り文字として使用されるピリオド「。」を含めることはできません。
d) データベース名とテーブル名には、「$」と「_」の特殊文字を含めることができます。
#2)名前の長さ
MySQLのデータベースまたはテーブル名の最大許容長は 64 文字。
#3)名前修飾子
前のセクションで説明したように、MySQLでは、テーブルは常に、それが含まれているデータベースとコンテキストがあります。したがって、テーブルにアクセスするには、完全修飾テーブル名を使用できます。これは、ピリオドで区切られたデータベース名と列名の組み合わせに他なりません。
例えば、 データベースSAMPLE_DBのテーブル「EMPLOYEE_DETAILS」からすべての要素を選択するには、以下のように完全修飾名を使用できます。
SELECT * from SAMPLE_DB.EMPLOYEE_DETAILS;
以下に示すように、DB名とテーブル名は、バッククォートで引用符で囲んで個別に指定することもできます。
SELECT * from `SAMPLE_DB`.`EMPLOYEE_DETAILS`;
ネーミングテーブルとデータベースに関する業界推奨の規則とベストプラクティスを以下に示します。
- テーブルとデータベースに小文字で名前を付ける –これにより、特にDBの日常的なクエリに関係するユーザーにとって、一般的にDBの入力とクエリが高速化されます。
- テーブル名とデータベース名にスペースの代わりにアンダースコア(「_」)を使用する –これにより、名前が読みやすくなります。
- テーブルとデータベースにはわかりやすい名前を使用してください - 例えば、 従業員の詳細を含むテーブルには、employee_info、employee_data、employee、employee_details、employee_name_and_addressなどのさまざまな方法で名前を付けることができます。最もわかりやすい名前を選択するのは理にかなっています。 例えば、 テーブル名をemployee_detailsまたはemployee_infoに選択できます。これは主観的な議論ですが、これらのエンティティを使用および作成するチームの複数のメンバーが同意する必要があります。
- データベース名とテーブル名に数字を使用しないでください – sample_db_2、test_table_1などのように。
よくある質問と回答
Q#1)インデックスを使用してMySQLでテーブルを作成するにはどうすればよいですか?
回答: テーブルの作成中に、任意の列(または列の組み合わせ)に対してINDEXを追加できます。
テーブルemployee_detailsのdepartment_id列に対してインデックスを追加する例を見てみましょう。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), id int, age int, address varchar(100), department_id int, index(department_id) );
Q#2)MySQLで日付付きのテーブルを作成するにはどうすればよいですか?
回答: 日付は、テーブルの作成中に任意の列に関連付ける必要があるデータ型です。
サンプルテーブルemployee_detailsのデータ型としてDATETIMEを持つjoining_date列を使用した以下のサンプルCREATETABLEコマンドを参照してください。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), id int primary key, age int, address varchar(100), joining_date datetime, department_id int );
Q#3)MySQLでテーブルの構造を確認するにはどうすればよいですか?
回答: テーブルを作成した後、列やインデックスなどのテーブルの構造を参照する場合は、DESCRIBEコマンドを使用して詳細をフェッチできます。
構文:
DESCRIBE tableName;
テーブルを作成して、DESCRIBEコマンドの出力を見てみましょう。
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), id int primary key, age int, address varchar(100), department_id int ); DESCRIBE sample_db.employee_details;
以下に、DESCRIBEコマンドの出力を示します。
Q#4)MySQLのテーブルに外部キーを追加するにはどうすればよいですか?
回答: 外部キーは、MySQLで2つのテーブルをリンクするために使用されます。外部キー制約を使用するには、参照しているテーブルがすでに作成されている必要があります。
>>詳細 MySQL外部キー制約
例を挙げてこれを理解してみましょう。 2つのテーブルがあるとします。つまり、学部(大学のさまざまな学部の詳細があります)と学生の詳細(学生に関するすべての詳細)です。
部門には列があります – id(主キー)と名前。
学生の詳細 – id(主キー)、年齢、住所、department_id(Departmentテーブルから参照される外部キー)。
以下に、これら両方のテーブルのCREATETABLEコマンドの構文を示します。
CREATE TABLE department ( name varchar(100), id INT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE student_details ( name varchar(100), id int not null, age int, address varchar(100), department_id int, PRIMARY KEY (id), FOREIGN KEY (department_id) references department(id) ON DELETE CASCADE );
列とdepartment_idの関係は、departmentテーブルの列IDで参照する必要があると述べた、student_detailsテーブルのFOREIGNKEY参照の構文を参照してください。
結論
ここでは、データ定義言語のカテゴリのコマンドに属するMySQLのCREATETABLEコマンドについて詳しく説明しました。
テーブルに追加のプロパティを設定するためにCREATETABLEコマンドと一緒に言及できるENGINE、CHECKSUMなどのさまざまなテーブルオプションについて学習しました。
MySQLで既存のテーブルのクローンを作成する方法を実行しました。最後に、業界が推奨するベストプラクティスとともに、テーブル名の命名規則について説明しました。
幸せな読書!!