目次
1. 制約の概念と分類
1. 制約の概念
- 制約は、テーブルに追加されるデータを制限するためにテーブル内の列に作用するルールです。
- 制約の存在により、データベース内のデータの正確性、有効性、整合性が保証されます。
2. 制約の分類
2. 事例分析
DROP TABLE IF EXISTS emp;
-- 员工表
CREATE TABLE emp (
id INT PRIMARY KEY auto_increment, -- 员工id,主键且自增长 -- 【auto_increment】
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一
joindate DATE NOT NULL , -- 入职日期,非空
salary DOUBLE(7,2) NOT NULL , -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
);
1. 非ナル値制約(非ナル値)
-- 演示非空约束
insert into emp(id,ename,joindate,salary,bonus) values(3,null,'1999-11-11',8800,5000)-- 报错 null
insert into emp(id,ename,joindate,salary,bonus) values(3,"李四",'1999-11-11',8800,5000)-- 报错 唯一
(1) 制約を追加します。
-- テーブルの作成時に非 null 制約を追加します。
create tableテーブル名 (
列名のデータ型がnull ではありません。
....
) ;
-- テーブルの作成後に制約を追加します。
テーブルテーブル名を変更するフィールド名を変更するデータ型がnull ではありません。
(2) 制約を削除します。
テーブルテーブル名を変更するフィールド名のデータ型を変更する。
2. 主キー制約(主キー)
-- 演示主键约束:非空且唯一
insert into emp(id,ename,joindate,salary,bonus) values(1,"张三",'1999-11-11',8800,5000);
insert into emp(id,ename,joindate,salary,bonus) values(1,"张三",'1999-11-11',8800,5000);-- 报错,id唯一
insert into emp(id,ename,joindate,salary,bonus) values(null,"张三",'1999-11-11',8800,5000);-- 报错 null
insert into emp(id,ename,joindate,salary,bonus) values(2,"李四",'1999-11-11',8800,5000);
(1) 制約を追加します。
-- テーブルの作成時に主キー制約を追加します。
create tableテーブル名 (
列名 データ型主キー [auto_increment]、
....
) ;
create tableテーブル名 (
列名のデータ型、
[制約] [制約名] 主キー(カラム名)
....
) ;
-- テーブルの構築後に主キー制約を追加します。
テーブルテーブル名を変更主キー (フィールド名)を追加 ;
(2) 制約を削除します。
テーブルテーブル名を変更し、主キーを削除します 。
3. デフォルトの制約 (デフォルト)
-- 演示默认约束
insert into emp(id,ename,joindate,salary) values(3,"王五",'1999-11-11',8800);-- defaut 约束 不给任何值
insert into emp(id,ename,joindate,salary,bonus) values(4,"赵六",'1999-11-11',8800,null);-- null也算值
(1) 制約を追加します。
-- テーブルの作成時にデフォルトの制約を追加します。
create tableテーブル名 (
列名 データ型デフォルトデフォルト値、
....
) ;
-- テーブルの作成後にデフォルトの制約を追加します。
alter tableテーブル名alter column name set defautデフォルト値;
(2) 制約を削除します。
alter tableテーブル名 arter カラム名ドロップデフォルト;
4. 自動拡張(auto_increment)
「auto_increment」は列が数値で一意の場合に使用できます
-- 演示自动增长:auto_increment:当列是数字类型且为唯一约束时
insert into emp(ename,joindate,salary,bonus) values("赵六",'1999-11-11',8800,null);-- null也算值
insert into emp(id,ename,joindate,salary,bonus) values(null,"赵六2",'1999-11-11',8800,null);
insert into emp(id,ename,joindate,salary,bonus) values(null,"赵六3",'1999-11-11',8800,null);
5. 外部キー制約
- 概念: 外部キーを使用して 2 つのテーブル内のデータ間の接続を確立し、データの一貫性と整合性を確保します。
/*
外键约束:
* 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
-- 创建表时添加外键约束
CREATE TABLE 表名(
列名 数据类型,
…
[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
-- 建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
-- 删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
*/
-- 删除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);
-- 添加 2 个部门
insert into dept(dep_name,addr) values
('研发部','广州'),('销售部', '深圳');
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO emp (NAME, age, dep_id) VALUES
('张三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('赵六', 20, 2),
('孙七', 22, 2),
('周八', 18, 2);
-- ------------------
select * from emp;
select * from dept;
-- 删除外键
alter table emp drop FOREIGN key fk_emp_dept;
-- 建完表后,添加外键
alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
5.1 従業員テーブルと部門テーブルの作成
-- 删除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);
5.2 構文
(1) 制約を追加します。
-- テーブル作成時に外部キー制約を追加します。
create tableテーブル名 (
列名のデータ型、
....
[制約] [外部キー名]外部キー(外部キーカラム名)がメインテーブル(メインテーブルのカラム名)を参照
-- 添加外键 dep_id,关联 dept 表的id主键,外键名称随便写,一般以fk_开头 CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
) ;
-- テーブルの構築後に外部キー制約を追加します。
alter table テーブル名add constraint外部キー名外部キー(外部キーフィールド名)はメインテーブル名 (メインリスト名)を参照します。
-- 建完表后,添加外键 alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
(2) 制約を削除します。
alter tableテーブル名drop 外部キー外部キー名;
-- 删除外键
alter table emp drop FOREIGN key fk_emp_dept;
知らせ:
- まずマスター テーブルを作成し、マスターテーブルにデータを追加してから、スレーブ テーブルを操作します。!!
- 削除する場合は、スレーブテーブルのデータを削除してから、対応するマスターテーブルのデータを削除してください。!!