MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します

MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します

1. 制約の概念と分類

1.1 制約の概念:

データの正確性、有効性、整合性を確保するために、テーブル内のデータを制限します。

1.2 制約の分類

  • 1. 主キー制約(主キー): フィールドが空でなく、一意であることを確認します。テーブルには、テーブル内のフィールドの一意の識別子である主キーを 1 つだけ設定できます。
  • 2. 非ヌル制約( nullではない): フィールドが空にならないようにする
  • 3. ユニーク制約( unique): フィールドが一意であるが、null になる可能性があることを確認します。
  • 4. 外部キー制約(外部キー): あるテーブル内に存在する別のテーブルの主キーまたは一意キーを、このテーブルの外部キーと呼びます。
  • 5. デフォルトの制約(デフォルト+デフォルト値): フィールドにデフォルト値(引用符で囲む)があることを確認するために使用されます。

2. 5つの制約の追加と削除

2.1 制約を追加する6つの方法

1. テーブルを作成するときに空でない制約を追加します(列レベルの制約として追加されました)

テーブルを作成 + テーブル名(
列名データ型 + 制約名

2. テーブルを作成するときに非NULL制約を追加します(テーブルレベルの制約として追加されました)

テーブルテーブル名を作成(
列名データ型、
...
列名データ型、
(制約 + エイリアス (追加した制約に名前を付けるだけ)) 制約名 (対応するフィールド名)

3. 列名を変更する場合

テーブルの変更 + テーブル名 + 変更 (列) + 古い列名 新しい列名 新しい列名のタイプ + 制約

4. 列のデータ型を変更する場合

alter table + テーブル名 + 変更 + (列) + 列名と列タイプの制約

5. 新しい列を追加するときに制約を追加できます

alter table + テーブル名 + add + (列) + 新しい列名 + 新しい列名タイプ + 制約

6. 外部キー固有

alter table + テーブル名 + 制約の追加 外部キー名 (外部キーには任意の名前を付けることができます) + 外部キー (外部キー フィールド名) は、メイン テーブル名 (メイン テーブルに関連付けられるフィールド) を参照します。

2.2 制約を削除する3つの方法

1. 列名を変更する際の制約はありません

alter table + テーブル名 + change (列) + 古い列名 新しい列名 新しい列名のタイプ

2. 列のデータ型を変更する際の制約はありません

alter table + テーブル名 + 変更 + (列) + 列名と列タイプ

3. 特定の制約を削除するにはdropを使用します

テーブルの変更 + テーブル名 + インデックス/外部キー/主キーの削除 + 制約名

注: 表内の制約の名前を確認します。

テーブル名からインデックスを表示

2.3 5つの主要な制約に対応するメソッドを追加および削除します(シリアル番号は2.1と2.2に対応します)

1. 非ヌル制約( NULLではない)

  • 対応する加算方法: 1 3 4 5
  • 対応する削除方法: 1 2

2. ユニーク制約(個性的)

  • 対応する加算方法: 1 2 3 4 5
  • 対応する削除方法: 1 2 3 (3番目のインデックスオプションに対応)

3. デフォルトの制約(デフォルト)

  • 対応する加算方法: 1 3 4 5
  • 対応する削除方法: 1 2

4. 主キー(主キー

  • 対応する加算方法: 1 2 3 4 5
  • 対応する削除方法: 3 (テーブルには主キーが 1 つしか存在できないため、制約のない名前が 3 番目のタイプの主キー オプションの後に追加されることに注意してください)

5. 外部キー(外部キー)

  • 対応する追加方法: 2 6
  • 対応する削除方法: 3 (3 番目の外部キー オプションに対応)

従業員テーブルを見てみましょう (フィールドは従業員番号、名前、年齢、部門、部門所在地です)。

ここに画像の説明を挿入

冗長な部分があることがわかります。つまり、R&D 部門は広州に対応し、営業部門は深センに対応しています。それらを何度も記述する必要はありません。実際には、冗長性を防ぐために 2 つのテーブルに分割できます。最初のテーブルには従業員情報が保存され、他のテーブルには部門情報テーブル 1 (従業員テーブル従業員) が格納されます。

ここに画像の説明を挿入

表2(部門表):

ここに画像の説明を挿入

ここでは両方のテーブルのIDが主キーです

しかし、ここで問題があります。つまり、id=1 の行など、部門テーブル内の任意の行を削除できるということです。削除されると、テーブル 1 の dep_id=1 の従業員は自分の部門情報を見つけることができなくなります。そのため、外部キーを使用してこの問題を解決できます。

テーブルを作成するときにdep_idを外部キーとして指定し、それを部門の主キーidに関連付けることができます。

ステートメントの形式 (これは 2 番目の方法、つまりテーブル レベルの制約を持つ外部キーを追加する方法ですが、構文は異なります)。

テーブルテーブル名を作成(
列名データ型、
...
列名データ型、
(制約 + エイリアス (追加した制約に名前を付けるだけ)) + 外部キー (フィールド名) + 参照 + メイン テーブル (メイン テーブルの対応するフィールド)

この例では、次のように記述できます。

従業員テーブルを作成する(
id int 主キー、
sname varchar(5)、
年齢 int、
dep_id int,
制約 aaa 外部キー(dep_id) は department(id) を参照します

外部キーを追加した後は、部門テーブルの行を削除することはできません。また、従業員に新しい従業員情報を追加するときに、dep_id に 1 または 2 以外の番号を入力することはできません。

2.4 制約作成のまとめ

テーブルを作成するときに、列レベルの制約を追加すると、デフォルト、空でない、主キー、一意のみがサポートされます。テーブルレベルの制約を追加すると、主キー、一意、外部キーのみがサポートされます。

2.5 主キーとユニークキーの違い

最大で 1 つの主キーと複数の一意のキーが存在できます。 2 つの列で主キーと一意のキーを形成できます。

3. 列の自動増加

3.1 コンセプト

列が数値型の場合、auto_increment を使用して自動値増加を実現します (通常は主キーとともに使用されます)

3.2 テーブル作成時に主キー制約を追加し、主キーの自己増分の例を完了する

形式:

テーブルテーブル名を作成(
列名 データ型 主キー + auto_increment

例えば:
学生 ID と名前を含む学生テーブルを作成し、学生 ID に基づいてステートメントを作成します。

テーブル学生を作成(
id int 主キー auto_increment,
sname char(4)

この時点でテーブルにデータがある場合;

ここに画像の説明を挿入

データを再度挿入するときに、学生番号は付与されません。

学生の値に挿入(null、"Li Si")

テーブルを再度確認すると、自動増分値に基づいて学生番号がテーブルに自動的に追加されていました。

ここに画像の説明を挿入

3.3 自己成長の追加と削除

1.追加(上記作成時の追加は一種類です)

テーブルの変更 + テーブル名 + 列の変更 + 列名タイプ制約 + AUTO_INCREMENT

2. 削除

テーブルの変更 + テーブル名 + 列の変更 列名 タイプ

3.4 自動増分ステップサイズの設定

自動増分の開始値は1で、ステップ長の開始値は1です。
開始値は変更できませんが、show VARIABLES LIKE "%auto_increment%" を使用してステップ サイズを変更できます。
対応するステップの名前を確認し、set stepを使用して名前=設定するステップを表します。

以上が、初心者向けのMySQLデータベーステーブルの5大制約の学習の詳細な内容です。MySQLの5大制約の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL で外部キー制約を作成および削除する方法
  • MySQL に外部キー制約を追加する具体的な方法
  • MySQL データベースの制約とデータ テーブルの設計原則
  • MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明
  • MySQL の 6 つの一般的な制約タイプの詳細な説明
  • MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。
  • MySQL 制約の超詳細な説明
  • MySQL の null 制約のケースの説明
  • MySQLデータベースのテーブルに制約を設定する方法

<<:  HTML要素にフォーカスを設定する方法

>>:  Layui は複数条件クエリのサンプルコードを実装します

推薦する

Vue.jsのレンダリング関数の使い方の詳しい説明

Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...

Tomcatのクラスロードメカニズムのプロセスとソースコード分析

目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...

Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)

序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...

MySQL カーソルの原理と使用例の分析

この記事では、例を使用して MySQL カーソルの原理と使用方法を説明します。ご参考までに、詳細は以...

Vue3 における親コンポーネントと子コンポーネント間の値の転送の詳細な説明

vue3 が誕生してからかなり時間が経ち、筆者も最近になって vue3 を学び始めました。 vue2...

CentOS 環境で NFS リモート ディレクトリ マウントを使用する手順の紹介

目次1. NFS の概要2. NFS構築1. NFSサーバーの構築2. NFSクライアントの構築3....

JavaScript ジグソーパズルゲーム

この記事の例では、ジグソーパズルゲームを実装するためのJavaScriptの具体的なコードを参考まで...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

単語のグループ化シーケンスと複数フィールドのグループ化のための MySQL グループ方法

ここで商品テーブルを作成しました。その中のデータを見てみましょう。 mysql> 商品から *...

Next.js 入門チュートリアル

目次導入Next.jsプロジェクトを作成するNext.js プロジェクトを手動で作成するcreact...

Linux での screen コマンドの使用方法の詳細な説明

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

純粋な CSS を使用して脈動するローダー効果のソースコードを作成する

効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...

Swiper+echartsは複数のダッシュボードの左右スクロール効果を実現します

この記事では、ダッシュボードの左右スクロール効果を実現するためのスワイパー+echartsの具体的な...

MySQLはパスワードなしでログインする例を実装しています

具体的な方法:ステップ1: mysqlサービスを停止する /etc/init.d/mysqld を停...

4つのReactコンポーネントにおけるDOMスタイル設定の詳細な説明

1. インラインスタイル仮想DOMにインラインスタイルを追加するには、式を使用してスタイルオブジェク...