[超詳細] Mysql データベースの制約

目次

1. 制約の概念と分類

1. 制約の概念

2. 制約の分類

2. 事例分析 

1. 非ナル値制約(非ナル値)

2. 主キー制約(主キー)

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

4. 自動拡張(auto_increment)

5. 外部キー制約


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;

知らせ:

  • まずマスター テーブルを作成しマスターテーブルにデータを追加してから、スレーブ テーブルを操作します。
  • 削除する場合は、スレーブテーブルのデータを削除してから、対応するマスターテーブルのデータを削除してください

おすすめ

転載: blog.csdn.net/weixin_48373085/article/details/128528737