技術共有

SQL制約

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

SQL制約

1. 説明

概念: 制約は、テーブル内のフィールドに作用して、テーブルに格納されるデータを制限するルールです。

目的: データベース内のデータの正確性、有効性、完全性を保証するため。

制約説明するキーワード
非NULL制約このフィールドを空にしないように制限するNULLではない
一意の制約このフィールドのすべてのデータが一意であり、重複していないことを確認してください個性的
主キー制約主キーはデータ行の一意の識別子であり、空ではなく一意である必要があります。主キー
デフォルトの制約データを保存するとき、フィールド値が指定されていない場合は、デフォルト値が使用されます。デフォルト
チェック制約 (8.0.16 以降)フィールドが特定の条件を満たしていることを確認しますチェック
外部キー制約2 つのテーブルのデータ間の接続を確立するために使用されます外部キー

2. 使用方法

自動インクリメント: auto_increment

マイグレーション

ALTER TABLE my_table MODIFY id INT AUTO_INCREMENT;
  • 1

SQLサーバー

-- 删除依赖于id列的约束
ALTER TABLE my_table DROP CONSTRAINT <constraint_name>;

-- 修改字段为自增
ALTER TABLE my_table ALTER COLUMN id INT IDENTITY(1,1);

-- 重新创建约束(如果有)
ALTER TABLE my_table ADD CONSTRAINT <constraint_name> PRIMARY KEY (id);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

制約の追加

-- 1、添加主键
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY (主键字段名);
-- 例:ALTER TABLE Orders ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
-- 2、添加外键
alter table 表名 add constraint 外键名 foreign key (外键字段名) references 主表(主字段名);
-- 删除外键
alter table 表名 drop foreign key 外键名;
-- 3、添加唯一约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 (需要约束的字段);
-- 4、添加默认约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 DEFAULT '默认值' FOR 字段名;
-- 5、检查约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (Age >= 18 检查的条件);
-- 6、非空约束
ALTER TABLE 表名 ALTER COLUMN 字段名 varchar(255) NOT NULL;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

外部キーの役割
データの整合性を確保するために、外部キー フィールドは子テーブルと呼ばれ、関連するテーブルは親テーブルと呼ばれます。
削除および更新の動作

  • アクションなし (デフォルト): 親テーブル内の対応するレコードを削除/更新するときに、レコードに外部キーがある場合、更新・削除はできません。
  • カスケード: 親テーブルの該当レコードを削除/更新する際、レコードに外部キーがある場合、次に、サブテーブル内のレコードを削除/更新します。
  • set null: 親テーブルの該当レコードを削除/更新する際、レコードに外部キーがある場合、次に、サブテーブルの外部キー値を null に設定します。
  • setdefault: 親テーブルが変更されると、子テーブルに作成された外部キー列がデフォルト値に設定されます (InnoDB ではサポートされていません)。
# 指定行为
alter table 表名 add constraint 外键名 foreign key (外键字段) references 主表(主字段名) on update cascade on delete cascade;
  • 1
  • 2