一般的なMysql DDL操作の概要

一般的なMysql DDL操作の概要

図書館管理

ライブラリを作成する

データベースを作成します [存在しない場合] ライブラリ名;

ライブラリを削除する

データベースを削除する [存在する場合] ライブラリ名;

データベースを構築するための一般的な記述方法

古いデータベース名が存在する場合はデータベースを削除します。
データベースを作成します。新しいデータベース名。


mysql> 'javacode2018' のようなデータベースを表示します。
+-------------------------+
| データベース (javacode2018) |
+-------------------------+
|javacode2018|
+-------------------------+
セット内の 1 行 (0.00 秒)

mysql> 存在する場合はデータベースを削除します javacode2018;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> 'javacode2018' のようなデータベースを表示します。
空のセット (0.00 秒)

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

 

show databases like 'javacode2018'; は javacode2018 ライブラリ情報を一覧表示します。

テーブル管理

テーブルを作成

テーブルテーブル名を作成(
  フィールド名 1 タイプ [(幅)] [制約] [コメント 'フィールドの説明'],
  フィールド名2タイプ[(幅)] [制約] [コメント'フィールドの説明']、
  フィールド名 3 タイプ [(幅)] [制約] [コメント 'フィールドの説明']
)[テーブルの一部の設定]

知らせ:

  • 同じテーブル内では、フィールド名を同じにすることはできません
  • 幅と制約はオプションのパラメータですが、フィールド名とタイプは必須です。
  • 最後のフィールドの後にカンマはありません
  • タイプは、レコードを保存するフィールドのデータ型を制限するために使用されます。
  • タイプは実際にはフィールドの制約です (制約フィールドの下のレコードはタイプ XX である必要があります)
  • 型の後に記述される制約は、型の外部に追加された追加の制約です。

制約の説明

nullではない: フィールドが空であってはならないことを示します

mysql> テーブル test1 を作成します (a int not null コメント 'フィールド a');
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> test1 に値 (null) を挿入します。
エラー 1048 (23000): 列 'a' は null にできません
mysql> test1 に値を挿入します (1);
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test1 から * を選択します。
+---+
| ア |
+---+
| 1 |
+---+
セット内の 1 行 (0.00 秒)

**デフォルト値:** このフィールドのデフォルト値を設定します。デフォルト値は value です。

mysql> テーブルを削除します IF EXISTS test2;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> テーブル test2( を作成します。
  -> int 非 null コメント 'フィールド a'、
  -> b int 非 null デフォルト 0 コメント 'フィールド b'
  -> );
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

mysql> test2(a) に値を挿入します (1);
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test2 から * を選択します。
+---+---+
| ア | ロ |
+---+---+
| 1 | 0 |
+---+---+
セット内の 1 行 (0.00 秒)

上記の挿入時にbの値は設定されず、デフォルト値0が自動的に使用されます。

**主キー:** このフィールドは、テーブルの主キーとして識別されます。レコードを一意に識別できます。重複するレコードを挿入すると、エラーが発生します。

書き方は次の 2 通りあります。

方法 1: 次のように列に従います。

mysql> IF EXISTS test3 テーブルを削除します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

mysql> テーブル test3( を作成します。
  -> int 非 null コメント 'フィールド a' 主キー
  -> );
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> test3 (a) の値 (1) に挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> test3 (a) の値 (1) に挿入します。
エラー 1062 (23000): キー 'PRIMARY' のエントリ '1' が重複しています

方法 2: 次のように、すべての列が定義された後に定義します。

mysql> テーブルを削除します IF EXISTS test4;
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

mysql> テーブル test4( を作成します。
  -> int 非 null コメント 'フィールド a'、
  -> b int not null デフォルト 0 コメント 'フィールド b',
  -> 主キー (a)
  -> );
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

mysql> test4(a,b) に値 (1,1) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test4(a,b) に値 (1,2) を挿入します。
エラー 1062 (23000): キー 'PRIMARY' のエントリ '1' が重複しています

重複する値を挿入すると、主キー制約に違反することになります。

方法 2 では、複数のフィールドを主キーとしてサポートします。複数のフィールドはコンマで区切られます。構文は、主キー (フィールド 1、フィールド 2、フィールド n) です。例:

mysql> テーブルを削除する IF EXISTS test7;
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

マイSQL>
mysql> テーブル test7( を作成します。
  -> int 非 null コメント 'フィールド a'、
  -> b int not null コメント 'フィールド b',
  -> 主キー (a,b)
  -> );
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

マイSQL>
mysql> test7(a,b) に VALUES (1,1) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test7(a,b) に VALUES (1,1) を挿入します。
エラー 1062 (23000): キー 'PRIMARY' のエントリ '1-1' が重複しています

外部キー: テーブル内のフィールドに外部キーを設定する

構文: 外部キー (現在のテーブルの列名) は外部キー テーブル (外部キー テーブル内のフィールド名) を参照します。

mysql> IF EXISTS test6 テーブルを削除します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> テーブルを削除する IF EXISTS test5;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

マイSQL>
mysql> テーブル test5( を作成します。
  -> int 非 null コメント 'フィールド a' 主キー
  -> );
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

マイSQL>
mysql> テーブル test6( を作成します。
  -> b int not null コメント 'フィールド b',
  -> ts5_a int は null ではありません、
  -> 外部キー(ts5_a)はtest5(a)を参照します
  -> );
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> test5 (a) の値に挿入します (1);
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test6 (b,test6.ts5_a) に値 (1,1) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test6 (b,test6.ts5_a) に値 (2,2) を挿入します。
エラー 1452 (23000): 子行を追加または更新できません: 外部キー制約が失敗しました (`javacode2018`.`test6`、制約 `test6_ibfk_1` FOREIGN KEY (`ts5_a`) 参照 `test5` (`a`))

注: test6 の ts5_a フィールドの値は、テーブル test5 のフィールド a から取得されることを示します。

注意すべき点がいくつかあります:

  • 2つのテーブルで外部キー関係を確立するために必要なフィールドタイプは一貫している必要があります。
  • 外部キーとして設定するフィールドは主キーにすることはできません
  • 参照フィールドは主キーである必要があります
  • 挿入する値は、外部キー テーブルに存在する必要があります。たとえば、ts5_a を 2 として test6 に挿入すると、エラーが報告されます。これは、値 2 が test5 テーブルに存在しないためです。

ユニークキー(uq):このフィールドの値がユニークであることを示します

1 つまたは複数のフィールドをサポートします。重複する値を挿入すると、一意制約に違反し、挿入は失敗します。

定義する方法は2つあります。

方法 1: 次のようにフィールドに従います。

mysql> IF EXISTS test8 テーブルを削除します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

マイSQL>
mysql> テーブル test8( を作成します。
  -> int 非 null コメント 'フィールド a' 一意のキー
  -> );
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

マイSQL>
mysql> test8(a) VALUES (1) に挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test8(a) VALUES (1) に挿入します。
エラー 1062 (23000): キー 'a' のエントリ '1' が重複しています

方法 2: すべての列が定義された後に、次のように定義します。

mysql> IF EXISTS test9 テーブルを削除します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

マイSQL>
mysql> テーブル test9( を作成します。
  -> int 非 null コメント 'フィールド a'、
  -> ユニークキー(a)
  -> );
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

マイSQL>
mysql> test9(a) にVALUES(1)を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test9(a) にVALUES(1)を挿入します。
エラー 1062 (23000): キー 'a' のエントリ '1' が重複しています

方法 2 では、カンマで区切られた複数のフィールドがサポートされます。構文は、主キー (フィールド 1、フィールド 2、フィールド n) です。例:

mysql> テーブルを削除します IF EXISTS test10;
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

マイSQL>
mysql> テーブル test10( を作成します。
  -> int 非 null コメント 'フィールド a'、
  -> b int not null コメント 'フィールド b',
  -> ユニークキー(a,b)
  -> );
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

マイSQL>
mysql> test10(a,b) に VALUES (1,1) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test10(a,b) に VALUES (1,1) を挿入します。
エラー 1062 (23000): キー 'a' のエントリ '1-1' が重複しています

auto_increment: このフィールドの値が自動的に増加することを示します (整数型で主キーです)

mysql> テーブルを削除します IF EXISTS test11;
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

マイSQL>
mysql> テーブル test11( を作成します。
  -> a int not null AUTO_INCREMENT PRIMARY KEY コメント 'フィールド a',
  -> b int 非 null コメント 'フィールド b'
  -> );
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

マイSQL>
mysql> test11(b) VALUES (10) に挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test11(b) VALUES (20) に挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test11 から * を選択します。
+---+----+
| ア | ロ |
+---+----+
| 1 | 10 |
| 2 | 20 |
+---+----+
セット内の 2 行 (0.00 秒)

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

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

知らせ:
自動インクリメント列の現在の値はメモリに保存されます。データベースを再起動するたびに、現在のテーブル内の自動インクリメント列の最大値が現在の値として照会されます。テーブル データがクリアされ、データベースが再起動されると、自動インクリメント列の値は初期値から始まります。

これを実証してみましょう:

mysql> test11 から削除します。
クエリは正常、2 行が影響を受けました (0.00 秒)

mysql> test11(b) VALUES (10) に挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test11 から * を選択します。
+---+----+
| ア | ロ |
+---+----+
| 3 | 10 |
+---+----+
セット内の 1 行 (0.00 秒)

上記の test11 データを削除し、レコードを挿入します。a の値は 3 です。次の操作を実行します。

test11 データを削除し、MySQL を再起動してデータを挿入し、a の値が初期化されるかどうかを確認します。次のように:

mysql> test11 から削除します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test11 から * を選択します。
空のセット (0.00 秒)

mysql>終了
さよなら

C:\Windows\system32>ネットストップmysql
mysql サービスが停止しています。
mysql サービスが正常に停止されました。


C:\Windows\system32>ネットスタートmysql
mysql サービスが起動しています。
mysql サービスが正常に開始されました。


C:\Windows\system32>mysql -uroot -p
パスワードを入力してください: *******
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは2です
サーバーバージョン: 5.7.25-log MySQL コミュニティサーバー (GPL)

Copyright (c) 2000, 2019, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql> javacode2018 を使用します。
データベースが変更されました
mysql> test11 から * を選択します。
空セット (0.01 秒)

mysql> test11 (b) に値 (100) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test11 から * を選択します。
+---+-----+
| ア | ロ |
+---+-----+
| 1 | 100 |
+---+-----+
セット内の 1 行 (0.00 秒)

テーブルを削除する

テーブルを削除する [存在する場合] テーブル名;

テーブル名を変更する

テーブルのテーブル名を変更し、新しいテーブル名に変更します。

テーブルセッティングの注意点

alter table テーブル名 コメント 'コメント情報';

テーブルをコピー

コピーするテーブル名と同じテーブル名を作成します。

のように:

mysql> test11 のようなテーブル test12 を作成します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> test12 から * を選択します。
空のセット (0.00 秒)

mysql> show テーブル test12 を作成します。
+--------+-------+
| テーブル | テーブルの作成                                                                      
+--------+-------+
| test12 | テーブル `test12` を作成します (
 `a` int(11) NOT NULL AUTO_INCREMENT COMMENT 'フィールドa',
 `b` int(11) NOT NULL COMMENT 'フィールドb',
 主キー (`a`)
) エンジン=InnoDB デフォルト文字セット=utf8 |
+--------+-------+
セット内の 1 行 (0.00 秒)

テーブル構造+データをコピー

テーブルを作成します。テーブル名 [as] コピー先のテーブルからフィールド、... を選択します [where 条件];

のように:

mysql> test11 から select * としてテーブル test13 を作成します。
クエリは正常、1 行が影響を受けました (0.02 秒)
記録: 1 重複: 0 警告: 0

mysql> test13 から * を選択します。
+---+-----+
| ア | ロ |
+---+-----+
| 1 | 100 |
+---+-----+
セット内の 1 行 (0.00 秒)

テーブル構造とデータはここにあります。

テーブル内の列の管理

列を追加する

alter table テーブル名 add column 列名 type [列制約];

例:

mysql> テーブルを削除します IF EXISTS test14;
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

マイSQL>
mysql> テーブル test14( を作成します。
  -> a int not null AUTO_INCREMENT PRIMARY KEY コメント 'フィールド a'
  -> );
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

mysql> alter table test14 add column b int not null default 0 comment 'Field b';
クエリは正常、影響を受けた行は 0 行 (0.03 秒)
レコード: 0 重複: 0 警告: 0

mysql> alter table test14 add column c int not null default 0 comment 'Field c';
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
レコード: 0 重複: 0 警告: 0

mysql> test14(b) の値に挿入します (10);
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> test14から*を選択します。c
+---+----+---+
| a | b | c |
+---+----+---+
| 1 | 10 | 0 |
+---+----+---+
セット内の 1 行 (0.00 秒)

列を変更する

alter table テーブル名、modify column 列名、new type [constraint];
または、テーブルを変更してテーブル名を変更し、列名を新しくし、列名を新しくし、タイプを新しくし[制約];

2つの方法の違い: 変更では列名を変更できませんが、変更では列名を変更できます

test14 のテーブル構造を見てみましょう。

mysql> show テーブル test14 を作成します。
+--------+--------+
| テーブル | テーブルの作成 |
+--------+--------+
| test14 | テーブル `test14` を作成します (
 `a` int(11) NOT NULL AUTO_INCREMENT COMMENT 'フィールドa',
 `b` int(11) NOT NULL DEFAULT '0' COMMENT 'フィールドb',
 `c` int(11) NOT NULL DEFAULT '0' COMMENT 'フィールドc',
 主キー (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=2 デフォルト CHARSET=utf8 |
+--------+--------+
セット内の 1 行 (0.00 秒)

フィールド c の名前と型を次のように変更します。

mysql> alter table test14 change column cd varchar(10) not null default '' comment 'Field d';
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
レコード: 0 重複: 0 警告: 0

mysql> show テーブル test14; ;;
+--------+--------+
| テーブル | テーブルの作成 |
+--------+--------+
| test14 | テーブル `test14` を作成します (
 `a` int(11) NOT NULL AUTO_INCREMENT COMMENT 'フィールドa',
 `b` int(11) NOT NULL DEFAULT '0' COMMENT 'フィールドb',
 `d` varchar(10) NOT NULL DEFAULT '' COMMENT 'フィールドd',
 主キー (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=2 デフォルト CHARSET=utf8 |
+--------+--------+
セット内の 1 行 (0.00 秒)

列の削除

テーブルを変更し、テーブル名を削除します。列をドロップします。列名;

例:

mysql> テーブル test14 を変更し、列 d を削除します。
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
レコード: 0 重複: 0 警告: 0

mysql> show テーブル test14 を作成します。
+--------+--------+
| テーブル | テーブルの作成 |
+--------+--------+
| test14 | テーブル `test14` を作成します (
 `a` int(11) NOT NULL AUTO_INCREMENT COMMENT 'フィールドa',
 `b` int(11) NOT NULL DEFAULT '0' COMMENT 'フィールドb',
 主キー (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=2 デフォルト CHARSET=utf8 |
+--------+--------+
セット内の 1 行 (0.00 秒)

一般的な MySQL DDL 操作の概要に関するこの記事はこれで終わりです。より関連性の高い MySQL DDL 操作については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  スライド階段効果を実現するjQuery

>>:  nginx で同時接続リクエストの数を制限する方法

推薦する

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

Linux gzipコマンドの使用

1. コマンドの紹介gzip (GNU zip) コマンドは、ファイルの圧縮と解凍に使用されます。こ...

Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法

最近Tencent Cloudサーバーを購入し、環境を構築しました。このメモは、これまで MySQL...

無効な Nginx クロスドメイン設定 Access-Control-Allow-Origin の解決策

nginx バージョン 1.11.3次の構成を使用すると、検証は無効になり、クロスドメインの問題が依...

フロントエンドJavaScriptの約束

目次1. Promiseとは何か2. 基本的な使い方3. Promiseメソッド3.1 Promis...

Linux デバイス用ネットワーク ドライバーの紹介

有線ネットワーク: イーサネット 無線ネットワーク: 4G、WiFi、Bluetooth、5G 概要...

Linux での一般的なシェル スクリプト コマンドと関連知識

目次1. 覚えておくべき知識1. 変数タイプ2. シェル変数の説明3. シングルクォート、ダブルクォ...

SQLでEXPLAINコマンドを使用する方法

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

MySQL 5.7.18 zip バージョンのインストール チュートリアル

MySQL の mysql 5.7.18 zip バージョンは、クリックして次のステップをクリックし...

一般的なフロントエンドJavaScriptメソッドのカプセル化

目次1. 値を入力し、そのデータ型を返す** 2. アレイ重複排除3. 文字列の重複排除4. ディー...

JS での Reduce() メソッドの使用の概要

目次1. 文法2. 例3. その他の関連方法長い間、reduce() メソッドの具体的な使い方を理解...

APPログインインターフェースシミュレーション要求を実装するためのPostmanデータ暗号化と復号化

目次主に使用されるPostmanの機能データの暗号化と復号化さまざまなパラメータ設定実際に送信された...

WeChat アプレット ピッカー マルチ列セレクター (モード = multiSelector)

目次1. 効果図(複数列) 2. 通常セレクター: mode = selector、複数列セレクター...

HTMLコードテキストボックスの制限入力テキストボックスが灰色になり、制限テキストボックスの入力

方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法ウェブサイト開発...