约束是作用于表列上的规则,用于限制加入表中的数据
约束的存在保证了数据库中数据的正确性,有效性和完整性。
非空约束: 保证列中所有的数据不能有null值 关键字 NOT null
唯一约束: 保证列中所有数据各不相同 关键字 Unique
主键约束:主键是一行数据的唯一标识,要求非空且唯一 关键字 Primary Key
检查约束: 保证列中的值满足某一条件 关键字 Check
默认约束: 保存数据时,未指定值采用默认值 关键字Default
外键约束:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 Foreign key
注意:mysql中是没有检查约束的
- -- 员工表
- CREATE table `emp11`(
- `id` int PRIMARY KEY auto_increment, -- 员工id,主键且自增
- `ename` VARCHAR(50) UNIQUE NOT NULL, -- 员工姓名 非空且唯一
- `joindate` DATE not NULL, -- 入职日期,非空
- `salary` DOUBLE(7,2) NOT null,-- 工资非空
- `bonus` DOUBLE(7,2) DEFAULT 0 -- 如果没有奖金默认为0
- );
- INSERT into emp11 (id ,ename,joindate,salary,bonus)VALUES (1,'张三','1999-11-11',3000,222);
- INSERT into emp11 (ename,joindate,salary)VALUES ('李四','1999-11-11',3000);
- SELECT * FROM emp11;
自增字段的要求为:当前列是数字类型,并且是唯一约束修饰的
- -- 删除约束非空约束 ALTER table 表名 MODIFY 字段名 数据类型 ;
- ALTER table emp11 MODIFY salary DOUBLE;
- -- 建完表后添加非空约束 ALTER TABLE 表名 modify 字段名 数据类型 NOT NULL;
- ALTER TABLE emp11 modify salary DOUBLE NOT null;
-
-
- -- 删除约束唯一约束 ALTER table 表名 MODIFY 字段名 数据类型 ;
- -- 建完表后添加唯一约束 ALTER TABLE 表名 modify 字段名 数据类型 UNIQUE;
-
- -- 建完表添加默认约束 ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
- -- 删除默认约束 ALTER TABLE 表名 ALTER 字段名 DEFAULT;
-
- -- 建完表添加主键约束 ALTER table 表名 ADD PRIMARY KEY(字段名);
- -- 删除主键 ALTER table 表名 DROP PRIMARY key;
概念:外键是用来让两个表的数据建立连接,保证数据的一致性和完整性
要先创建好主表,才能创建外键 。
添加数据的时候也要先添加主表,才能添加字表
要想删除主表数据,必须先把与主表相关联的数据先删除,或者直接删除外键
在Navicat中,可以选择表-> 选择有关联的表->右击->逆向表到模型就可以查看表的关系
- -- 部门表(主表)
- CREATE TABLE dept(
- id int PRIMARY key auto_increment,
- dep_name varchar(20),
- addr VARCHAR(20)
- );
-
- -- 员工表(从表)
- CREATE TABLE emp3(
- id int PRIMARY key auto_increment,
- `name` VARCHAR(20),
- age int,
- dep_id int,
- -- 添加外键 dep_id,关联dept 表的主键 CONSTRAINT 外键名 FOREIGN key(本(子)表字段) REFERENCES 主表(字段)
- CONSTRAINT fk_emp3_dept FOREIGN key(dep_id) REFERENCES dept(id)
- );
-
- -- 给部门表添加数据
- INSERT into dept(dep_name,addr) VALUES('研发部','北京'),('销售部','上海');
-
- -- 给员工表添加数据
- INSERT into emp3(name,age,dep_id) VALUES
- ('张三','20',1),
- ('李四','22',2),
- ('王五','20',2),
- ('赵六','20',1);
-
- SELECT * FROM dept;
-
- SELECT * FROM emp3;
-
-
- -- 删除外键 ALTER table 表名(在哪个表创建的外键就写哪个表的表名) DROP FOREIGN key 外键名称;
- ALTER TABLE emp3 DROP FOREIGN key fk_emp3_dept;
-
- -- 建完表后添加外键ALTER table 表名 ADD CONSTRAINT 外键名称 FOREIGN key (外键字段名称,本表的) REFERENCES 主表名称(主表列名称);
- ALTER table emp3 ADD CONSTRAINT fk_emp3_dept FOREIGN key(dep_id) REFERENCES dept(id);
-
-