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

推薦する

デプロイから基本操作までDocker Swarm

Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...

MySQLは外部SQLスクリプトファイルのコマンドを実行します

目次1. SQLコマンドを含むSQLスクリプトファイルを作成する2. SQLスクリプトファイルを実行...

埋め込みJavaScriptと外部リンクの基本的な応用方法

目次埋め込みJavaScriptと外部リンクの基本的な応用JavaScript の記述方法には、イン...

HTMLページの読み込みと解析プロセスの詳細な紹介

ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...

Vue ページ スタック マネージャーの詳細

目次2. 試した方法2.1 キープアライブ2.2 ネストされたルートを持つ CSS 3. 機能説明4...

MySQL の union と union all の簡単な分析

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...

ウェブページで任意のフォントを使用する実践的な操作とデモ

以前、「Web ページにシステムに組み込まれていないフォントを埋め込む」という研究をしたことがありま...

nginx で Vue プロジェクトをデプロイする方法

今日は nginx サーバーを使用するのですが、vue プロジェクトをサーバーにデプロイする必要もあ...

CSS 透明ボーダー背景クリップマジック

この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...

docker-compose を使用して Clickhouse をすばやくデプロイする方法のチュートリアル

ClickHouse は、オープンソースの列指向 DBMS (Yandex によって開発) です。 ...

CSSスプライトの応用の詳細な説明

CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...

HTMLのタグと要素の違いの詳細な説明

ウェブページに慣れていない友人の多くは私と同じように、HTML で要素、タグ、属性がどのように定義さ...

MySQL 外部キー制約の詳細な説明

公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...

Linux での MySQL データベースのアンインストール

Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...

mysql binlog (バイナリログ) を表示する方法

たとえば、新しいテーブルを作成したり、既存のテーブルのデータを更新したりすると、これらのイベントは、...