MySQL DDLステートメントの使用

MySQL DDLステートメントの使用

序文

SQL の言語分類には主に以下の種類があります。

DDLデータ定義言語作成、削除、変更データ定義言語の create、drop、alter ステートメント。
DMML のデータ操作言語挿入、削除、更新データベース レコードの追加、削除、および変更の操作を定義します。
DQLデータベースクエリ言語選択データベース レコードに対するクエリ操作を定義します。
デイリーデータベース制御言語許可する、削除する

データベース、テーブル、フィールド、ユーザーのアクセス権とセキュリティ レベルを定義します。

(許可、取り消しなど)。

TCLトランザクション制御言語

自動コミットを0に設定し、

取引を開始し、

セーブポイント、コミット、ロールバック

データベース上のトランザクション操作を定義します。

このセクションでは、主にデータ定義言語 DDL (Data Define Language) について説明します。データベースの作成、データベースの削除、テーブルの作成、テーブルの変更、テーブルの削除、フィールドの追加、削除、変更など、データベースとテーブルに対する管理操作 (作成、削除、変更など) を実行し、データベースとテーブルの構造を管理するために使用します。

では、一つずつ説明していきます(以下の[]内は任意です)。

データベース管理

データベースを作成する

データベースを作成します [存在しない場合] dbname;

データベースの削除

データベースを削除します [存在する場合] dbname;

全文は以下のとおりです。

データベースを削除します [存在する場合] o_dbname;
データベースn_dbnameを作成します。

o_dbname は古いデータベース名を表し、n_dbname は新しいデータベース名を表します。

テストしてみましょう:

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
| バイヤーパーティー |
| 購入者パーティー1 |
翻訳:
| じゅう |
| キドミー |
| 翻訳者
| ローカルSDK |
| mgrcenterコントロール |
|mysql |
| パフォーマンススキーマ |
| ストロークデータ |
| テスト |
+--------------------+
13行セット

mysql> データベースが存在する場合は削除します test1;
クエリは正常です。影響を受けた行は 0 行です

mysql> データベース test1 を作成します。
クエリは正常、1 行が影響を受けました

mysql> データベース test1 を作成します。
1007 - データベース 'test1' を作成できません。データベースが存在します

上記のテストから、次のことがわかります。削除する前に、まずデータベースが存在するかどうかを確認する必要があり、存在しない場合は例外が報告されます。同時に、作成する前に、データベースが存在するかどうかを確認する必要があり、存在する場合は、すでに存在するというメッセージが表示されます。

テーブル管理

テーブルを作成

データベース内のテーブルの基本的な構文形式は次のとおりです。

 テーブルtbnameを作成します(
 列名1 列タイプ1[(n)] [制約] [コメント 'comment1'], 
 列名2 列タイプ2[(n)] [制約] [コメント 'comment2'],
 列名3 列タイプ3[(n)] [制約] [コメント 'comment3']
 )[テーブルオプション];

構文

1. column_name はフィールド名、column_type はフィールド タイプ (CHAR、INT など)、n はフィールド幅 (オプション)、constraints は制約 (オプション)、comment はフィールド コメント (フィールドの詳細を説明できる) を表します。

2. 同じテーブル内ではcolumn_nameは同じにできません

3. フィールド名とタイプは必須で、その他はオプションのパラメータです。

4. 型によってフィールドの保存形式が制限されます。フィールドは特定のデータ型で保存する必要があり、追加の制約を追加することもできます。

制約の説明

非 null: 非 null 制約

mysql> テストを使用します。
データベースが変更されました

mysql> テーブルが存在しない場合は作成します `user1`(age int comment 'age',name char(5) comment 'name' not null);
クエリは正常です。影響を受けた行は 0 行です

mysql> user1 に値(8,null) を挿入します。
1048 - 列 'name' は null にできません

テーブルを作成するときに、名前フィールドに非 null 制約が設定されます。渡された値が null の場合、エラー メッセージが表示されます。したがって、空でない制約の目的は、フィールドが空でないことを確認することです。

デフォルト値: フィールドにデフォルト値を提供します

mysql> テストを使用します。
データベースが変更されました

mysql> テーブルが存在しない場合は作成します `user2`(age int not null default 0 comment 'age',name char(50) comment 'name' not null);
クエリは正常です。影響を受けた行は 0 行です

mysql> user2(name) に値 ('brand') を挿入します。
クエリは正常、1 行が影響を受けました
mysql> user2 から * を選択します。
+-----+-------+
| 年齢 | 名前 |
+-----+-------+
| 0 | ブランド |
+-----+-------+
セット内の1行

デフォルト値を設定後、データを書き込む際に値を指定しない場合は、自動的にデフォルト値の 0 が採用されます。

主キー: 主キー制約を識別し、このフィールドをテーブルの主キーとして設定します。これはグローバルに一意の識別子であり、重複が挿入されるとエラーが報告されます。

これを表現する方法は 2 つあります。1 つはフィールド制約内で直接続ける方法、もう 1 つはすべてのフィールドが宣言された後に、前のフィールドとコンマで区切って最後に追加する方法です。

mysql> テストを使用します。
データベースが変更されました

mysql> テーブルが存在しない場合は作成します `user3`(id int primary key,age int not null default 0 comment 'age',name char(50) comment 'name' not null);
クエリは正常です。影響を受けた行は 0 行です

mysql> user3 に値 (1,20, 'brand') を挿入します。
クエリは正常、1 行が影響を受けました

mysql> user3 に値 (1,22, 'sol') を挿入します。
1062 - キー「PRIMARY」のエントリ「1」が重複しています

mysql> user3 に値 (2,22, 'sol') を挿入します。
クエリは正常、1 行が影響を受けました

mysql> user3 から * を選択します。
+----+-----+-------+
| ID | 年齢 | 名前 |
+----+-----+-------+
| 1 | 20 | ブランド |
| 2 | 22 | ソル |
+----+-----+-------+
2行セット

前述のように、主キーは値の一意性を維持する必要があります。重複する値が挿入されると、主キー制約に違反していることを示すメッセージが表示されます。

もう 1 つの方法は、フィールド宣言の末尾で、主キー (フィールド 1、フィールド 2、フィールド n) の形式で、カンマで区切られ、繰り返し不可能な複数の主キーをサポートすることです。これは、複合主キー (または複合主キー) と呼ばれます。例:

テーブルが存在しない場合は作成します `user4`(id int,age int not null default 0 comment 'age',name char(50) comment 'name' not null,primary key(id,name));

外部キー: 外部キー制約を識別します。構文: 外部キー(t1_columnname) は t2(columnname) を参照します。t1 は現在のテーブル、t2 は外部キー テーブルであり、現在のテーブルと外部キー テーブルには外部キーとして制約されたフィールドがあります。

mysql> テーブルが存在しない場合は作成します `class`(classid int primary key,classname varchar(50));
クエリは正常です。影響を受けた行は 0 行です

mysql> テーブルが存在しない場合は作成します `user4`(id int primary key、age int comment 'age'、name char(50) comment 'name'、cid int not null、外部キー (cid) はクラス (classid) を参照します);
クエリは正常です。影響を受けた行は 0 行です

mysql> `user4` に値(1,20,'brand',1)を挿入します。
1452 - 子行を追加または更新できません: 外部キー制約が失敗しました (`test`.`user4`、CONSTRAINT `user4_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `class` (`classid`))

mysql> `class` に値を挿入します(1,'grad 3');
クエリは正常、1 行が影響を受けました

mysql> `user4` に値(1,20,'brand',1)を挿入します。
クエリは正常、1 行が影響を受けました

mysql> user4 から a.age を 'age'、a.name を 'student name'、b.classname を 'class' として選択します。a はクラス b を左結合し、a.cid = b.classid になります。
+------+----------+--------+
| 年齢| 生徒名| クラス|
+------+----------+--------+
| 20 | ブランド | 卒業 3 |
+------+----------+--------+
セット内の1行

いくつかの注意事項:

1. user4 テーブルに挿入するときに、関連付けられた外部キー classid の値が存在するかどうかを確認します。存在しない場合は、エラーが報告されます。上記コードの 3 番目の段落に示されているように、classid=1 の値はクラス テーブルに存在しません。

2. 外部キー関係を確立する 2 つのテーブルの対応するフィールドは同じ型である必要があります。

3. 外部キーとして設定されたフィールドはこのテーブルの主キーにすることはできませんが、関連付けられたテーブルのフィールドは主キーである必要があります。 (したがって、外部キー cid は主キーとしてクラス テーブルの classid フィールドに関連付けられます)。

一意キー: 一意の値制約は、1 つ以上のフィールドに設定できます。重複する値は許可されません。重複する値は一意制約に違反し、挿入エラーの原因になります。

定義方法も 2 つあります。1 つはフィールドの直後に設定する方法、もう 1 つはすべてのフィールドが定義された後に設定する方法です。次の例:

mysql> テーブル `user5` (id int 主キー、name varchar(50)、ident char(18) 一意キー) を作成します。
クエリは正常です。影響を受けた行は 0 行です

mysql> テーブル `user6` を作成します (id int 主キー、name varchar(50)、ident char(18) not null、sex int not null、一意キー (ident、sex));
クエリは正常です。影響を受けた行は 0 行です

mysql> `user5` に値(1,'brand','012345678901234567')を挿入します。
クエリは正常、1 行が影響を受けました
mysql> `user5` に値 (2、'sol'、'012345678901234567') を挿入します。
1062 - キー「ident」の重複エントリ「012345678901234567」

2 番目の段落では、構文形式「unique key (field 1, field 2, field n);」を使用して、カンマで区切られた複数のフィールドをサポートする方法を示します。

3 番目の段落では、ident の値が繰り返し入力され、繰り返し入力するように求められます。

auto_inc: 自動成長を識別します

mysql> テーブル `user7` (id int auto_increment primary key,name varchar(50)) を作成します。
クエリは正常です。影響を受けた行は 0 行です

mysql> `user7`(name) に値 ​​('brand'),('sol'),('helen') を挿入します。
クエリは正常、3 行が影響を受けました

記録: 3 重複: 0 警告: 0
mysql> `user7` から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | ブランド |
| 2 | ソル |
| 3 | ヘレン |
+----+-------+
3行セット

auto_increment 説明:

1. auto_increacement フィールドは自動的に増加します。デフォルト値は 1 から始まり、毎回 1 ずつ増加します。

2. 自動増分フィールドの初期値とステップサイズは、MySQL で設定できます。たとえば、初期値は 10,000 に設定され、ステップサイズは毎回 10 ずつ増加します。

3. 自動インクリメント列の現在の値はメモリに保存されます。データベースを再起動すると、現在のテーブルの自動インクリメント列 max の現在の値が照会されます。

4. テーブル データがクリアされ、データベースが再起動されると、自動インクリメント列は初期値から開始されます。

テーブルを削除する

テーブル tname [存在する場合] を削除します。

テーブル名とコメントを変更する

 テーブル o_tname を n_tname に変更します。
 テーブル tname のコメント 'memo' を変更します。

テーブルをコピー

スキーマのみをコピーする

from_tname のようなテーブル tname を作成します。
mysql> `user7` から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | ブランド |
| 2 | ソル |
| 3 | ヘレン |
+----+-------+
3行セット

mysql> `user7` のようなテーブル `user8` を作成します。
クエリは正常です。影響を受けた行は 0 行です

mysql> `user8` から * を選択します。
空のセット

スキーマ + データをコピー

テーブル tname を作成します [as] select column1,column2,... from from_tname [where condition];
mysql> `user7` から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | ブランド |
| 2 | ソル |
| 3 | ヘレン |
+----+-------+
3行セット

mysql> テーブル `user9` を作成し、 `user7` から id、name を選択します。
クエリは正常、3 行が影響を受けました
記録: 3 重複: 0 警告: 0

mysql> `user9` から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | ブランド |
| 2 | ソル |
| 3 | ヘレン |
+----+-------+
3行セット

データとアーキテクチャの両方がコピーされるので、非常に実用的です。

フィールドの管理

フィールドを追加する

テーブル tname を変更して、列 column_name column_type [制約] を追加します。
mysql> `user9` から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | ブランド |
| 2 | ソル |
| 3 | ヘレン |
+----+-------+
3行セット

mysql> alter table `user9` 列を追加します newcolumn int not null default 0;
クエリは正常です。影響を受けた行は 0 行です
レコード: 0 重複: 0 警告: 0

mysql> `user9` から * を選択します。
+----+-------+-----------+
| ID | 名前 | 新しい列 |
+----+-------+-----------+
| 1 | ブランド | 0 |
| 2 | ソル | 0 |
| 3 | ヘレン | 0 |
+----+-------+-----------+
3行セット

フィールドの変更

alter table tname modify column col_name new_col_type [constraints]; -- 型と制約を変更しますが、フィールド名は変更しません alter table tname change column col_name new_col_name new_col_type [constraints]; -- フィールド名、型、制約を変更します

以下に、modify と change の例を示します。

mysql> desc `user9`;
+------------+-------------+------+------+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+------------+-------------+------+------+--------+-------+
| id | int(11) | いいえ | | 0 | |
| 名前 | varchar(50) | はい | | NULL | |
| 新しい列 | int(11) | NO | | 0 | |
+------------+-------------+------+------+--------+-------+
3行セット

mysql> alter table `user9` 列名 varchar(100);
クエリは正常、3 行が影響を受けました
記録: 3 重複: 0 警告: 0

mysql> desc `user9`;
+-----------+--------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-----------+--------------+------+-----+--------+-------+
| id | int(11) | いいえ | | 0 | |
| 名前 | varchar(100) | はい | | NULL | |
| 新しい列 | int(11) | いいえ | | 0 | |
+-----------+--------------+------+-----+--------+-------+
3行セット
mysql> desc `user9`;
+-----------+--------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-----------+--------------+------+-----+--------+-------+
| id | int(11) | いいえ | | 0 | |
| 名前 | varchar(100) | はい | | NULL | |
| 新しい列 | int(11) | いいえ | | 0 | |
+-----------+--------------+------+-----+--------+-------+
3行セット

mysql> テーブル `user9` を変更し、列名 name1 varchar(100);
クエリは正常です。影響を受けた行は 0 行です
レコード: 0 重複: 0 警告: 0

mysql> desc `user9`;
+-----------+--------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-----------+--------------+------+-----+--------+-------+
| id | int(11) | いいえ | | 0 | |
| name1 | varchar(100) | はい | | NULL | |
| 新しい列 | int(11) | いいえ | | 0 | |
+-----------+--------------+------+-----+--------+-------+
3行セット

フィールドを削除する

テーブル tname を変更し、列 col_name を削除します。
mysql> desc `user9`;
+-----------+--------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-----------+--------------+------+-----+--------+-------+
| id | int(11) | いいえ | | 0 | |
| name1 | varchar(100) | はい | | NULL | |
| 新しい列 | int(11) | いいえ | | 0 | |
+-----------+--------------+------+-----+--------+-------+
3行セット

mysql> テーブル `user9` を変更して列 newcolumn を削除します。
クエリは正常です。影響を受けた行は 0 行です
レコード: 0 重複: 0 警告: 0

mysql> desc `user9`;
+-------+--------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+--------------+------+-----+--------+-------+
| id | int(11) | いいえ | | 0 | |
| name1 | varchar(100) | はい | | NULL | |
+-------+--------------+------+-----+--------+-------+
2行セット

上記はMySQL DDL文の使用に関する詳細な内容です。MySQL DDL文の詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • 一般的なMysql DDL操作の概要
  • MySQL 8.0 アトミック DDL 構文の詳細な説明
  • 4つのSQL言語の詳細な説明: DDL DML DCL TCL
  • MySQL データ定義言語 DDL の基本ステートメント
  • MySQL チュートリアル データ定義言語 DDL の例 詳細な説明

<<:  nginxとlvsのメリットとデメリット、そして適切な使用環境

>>:  均一なアニメーション効果を実現するJavaScript

推薦する

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

CSS は Apple のスムーズなスイッチ ボタン効果を模倣します

目次1. コード分析2. ソースコードソースコード1. コード分析1.1 HTMLコード分析 <...

2つのNode.jsプロセスがどのように通信するかの詳細な説明

目次序文異なるコンピュータ上の 2 つの Node.js プロセス間の通信TCPソケットの使用HTT...

Alibaba CloudがCloud Shieldから無料のSSL証明書(https)を申請

プロジェクトでは https サービスを使用する必要があるため、Alibaba Cloud では無料...

HTML 5 プレビュー

<br />オリジナル: http://www.alistapart.com/artic...

Vue は Echarts をインポートして折れ線グラフを実現します

この記事では、VueでEchartsをインポートして線散布図を実現する具体的なコードを参考までに共有...

mysqlのkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが ...

ユニアプリとミニプログラム(画像とテキスト)を下請けする方法を教えます

目次1. ミニプログラム下請け2. Uniapp 下請けアプレット下請けの手順: 1. manife...

ホバープロンプトにはvue2+elementuiを使用する

Vue2+elementui のホバー プロンプトは、外部と内部に分かれています。内部のものは el...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

MySQL でシンプルな検索エンジンを実装するためのサンプルコード

目次序文導入ngram全文パーサー全文インデックスを作成する検索方法1. 自然言語検索(自然言語モー...

MySQL データ圧縮パフォーマンス比較の詳細

目次1. テスト環境1.1 ハードウェアとソフトウェア1.2 テーブル構造2. テストの目的2.1 ...

NexusはHTTPSプロトコルをサポートするためにnginxプロキシを使用します

背景すべての会社の Web サイトは HTTPS プロトコルをサポートする必要があります。Aliba...

MySQLは、統計クエリを最適化するために、sum、case、whenを巧みに使用します。

私は最近、会社で統計レポートの開発に関わるプロジェクトに取り組んでいました。データの量が比較的多かっ...