赞
踩
1、约束:对表中的数据进行限定,保证数据的完整性、正确性、有效性。
2、分类:
非空约束:not null
主键约束:primary key
唯一约束:unique
外键约束:foreign key
(1)创建表时添加约束:
create table stu(
id int,
name varchar(20) not null -- 添加非空约束
);
(2)创建表完后,添加非空约束:
alter table stu modify name varchar(20) not null;---在Day02中的DDL中有详细说明
(3)删除name的非空约束
alter table stu modify name varchar(20);
(1)创建表时,添加唯一约束(注意:mysql中,唯一约束限定的列的值可以有多个null)
create table stu(
id int,
telephone varchar(30) unique
);
(2)创建表后添加唯一约束
alter table stu modify telephone varchar(30) unique;
(3)删除唯一约束
alter table stu drop index telephone;-- 与删除非空约束的方式不一样的
1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识
(1)创建表时,添加主键约束(主键约束一张表中只有1个,非空且唯一)
create table stu(
id int primary key,
name varchar(20)
);
(2)创建表之后添加主键约束
alter table stu modify id int primary key;
(3)删除主键约束
alter table stu drop primary key;
补充:
如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
(1) 创建表的时候添加自动增长
create table stu(
id int primary key auto_increment,
name varchar(20)
);
insert into stu values(1,'aaa');
再添加一行数据
insert into stu values(null,'bbb');-- 此时会在上面的添加数据后面自动增加第2行数据
如图:
insert into stu values(10,'ccc');
insert into stu values(null,'ccc');
这个时候的id自动增加为11了~(自动根据上一行增长,上一行为10,现在添加的自动增加为11)
(2)创建表后,添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
(3)删除自动增长
ALTER TABLE stu MODIFY id INT;
让表与表产生关系,从而保证数据的正确性。
(1)首先我们创建1个员工表emp
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
age INT,
dep_name VARCHAR(30),
dep_location VARCHAR(30)
);
(2)在emp表中添加一些数据
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('张三', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '销售部', '深圳');
运行结果:
这个emp员工表的缺点是有多个同样的“研发部”和“广州”“深圳”等,会造成数据的冗余,因此为了解决这个缺点,用到了知识点“外键”
外键约束语法:
create table 表名(
....
外键列
constraint 外键约束名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
(1)创建2个表,员工表employee和部门表department;并将两个表添加数据
create table department( -- 部门表
id int primary key auto_increment, -- 主表的主键
dep_name varchar(20),
dep_location varchar(20)
);
create table employee( -- 员工表
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
constraint emp_depid_fk foreign key (dep_id) references department(id) -- 创建外键约束
);
-- 添加 2 个部门
insert into department values(null, '研发部','广州'),(null, '销售部', '深圳');
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
用以下的图来帮助理解:
主表:就是约束别人的表
从表:就是被别人约束的表
(2) 添加完员工表之后,添加外键
alter table employee add constraint emp_depid_fk
foreign key (dep_id) references department(id);
(3)删除外键
alter table employee drop foreign key emp_depid_fk;--emp_depid_fk为外键约束名
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。