序文 SQL の言語分類には主に以下の種類があります。
このセクションでは、主にデータ定義言語 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の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: nginxとlvsのメリットとデメリット、そして適切な使用環境
>>: 均一なアニメーション効果を実現するJavaScript
Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...
目次1. SQLコマンドを含むSQLスクリプトファイルを作成する2. SQLスクリプトファイルを実行...
目次埋め込みJavaScriptと外部リンクの基本的な応用JavaScript の記述方法には、イン...
ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...
目次2. 試した方法2.1 キープアライブ2.2 ネストされたルートを持つ CSS 3. 機能説明4...
データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...
以前、「Web ページにシステムに組み込まれていないフォントを埋め込む」という研究をしたことがありま...
今日は nginx サーバーを使用するのですが、vue プロジェクトをサーバーにデプロイする必要もあ...
この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...
ClickHouse は、オープンソースの列指向 DBMS (Yandex によって開発) です。 ...
CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...
ウェブページに慣れていない友人の多くは私と同じように、HTML で要素、タグ、属性がどのように定義さ...
公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...
Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...
たとえば、新しいテーブルを作成したり、既存のテーブルのデータを更新したりすると、これらのイベントは、...