show databases;
use db;
show tables;
select * from stu;
-- 约束 : 主键约束 primary key 非空且唯一
-- 非空约束 not null
-- 唯一约束 unique
-- 外键约束 foreign key
create table stu2 (id int primary key, name varchar(20) not null,address varchar(77));
select * from stu2;
insert into stu2 values ( 1, "liang","biejing");
-- 修改表中的约束
alter table stu2 modify address varchar(20) unique;
select * from stu2;
insert into stu2 values (2,"shu","beijing");
select * from stu2;
insert into stu2 values (3,"cheng", "shanghai");
select * from stu2;
-- 删除 唯一约束 不能使用modify
alter table stu2 drop index address;
-- 再创建表之后添加唯一约束alter
alter table stu2 modify address varchar(20) unique;
-- 删除主键
alter table stu2 drop primary key ;
-- 在创建表之后添加主键
alter table stu2 modify id int primary key;
-- 实现自动增长
alter table stu2 modify id int primary key auto_increment;
insert into stu2 values ( null,"python","nihao") ;
select * from stu2;
show create table stu2;
-- 外键约束
-- 创建部门表(id,dep_name,dep_location) -- 一方,主表
create table department( id int primary key auto_increment, dep_name varchar(20), dep_location varchar(20) );
-- 创建员工表(id,name,age,dep_id) -- 多方,从表
create table employee( id int primary key auto_increment, name varchar(20), age int, dep_id int ,
constraint emp_dept_fk foreign key (dep_id) references department(id));
-- 添加2个部门
insert into department values(null, '研发部','广州'),
(null, '销售部', '深圳'); select * from department;
-- 添加员工,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);
select *from employee;
drop table employee;
drop table department;
select * from employee;
select *from department;
alter table employee drop foreign key emp_dept_fk;
-- 添加外键 一对多的时候 员工和部门之间就是 多对一的关系 我们在多的一地方放置一的主键 作为外键
-- 并且设置级联操作
alter table employee add constraint hhh_em foreign key (dep_id) references department(id) on update cascade on delete cascade;
1. 一对一的关系:人和身份证之间的关系
吧
处理方式 :可以再任意一方添加外键, 我个人认为 完全可以用一张表来表示 ,并且使得这个外键唯一约束 unique
2. 一对多的关系 :例如员工和部门之间的关系 , 一个员工对应一个部门 , 一个部门可以的对应个员我们在设计表的时候** 再多的一放建立外键 放置一的一放的主键 让他们产生关联*
constraint 外键名 foreign key (从表的主键) references departement(主表的主键);
3. 多对多的关系: 例子:学生和课程之间 就是多对多的关系, 我们通过建立联合主键的方式, (也就是建立第三张表 里面放置对方的主键 )
## 第一范式 ##
1. 每一列都是不可分割的原子项数据(列是唯一的 不存在两个列,不是符合列
2. 存在的问题:数据冗余重复的太多了 ,数据添加和删除 会产生不合法的数据
----------
## 第二范式 ##
### 在1NF的基础上 非属性码 必须完全依赖于候选码(消除非主属性对主码的部分函数依赖)消除部分依赖 ###
1. 函数依赖:如果A--> B 如果通过A的属性推倒出唯一的B 就说B依赖于A;学号——> 姓名
2. 完全函数依赖: (学号, 课程名称)--> 分数 前面的就是一个属性组
A---> B A是一个属性组则 B属性推倒确定需要依据A中属性组的所有d的属性值
3.部分函数依赖:属性组中的某一个属性组可以确定B属性的的值---A(学号, 课程名称)--> B分数
4. 传递函数依赖: A——>B B-->C 就可以说C传递函数与A;
学号————>院系名--> 院长
5.码:属性或者属性组 被其他属性完全依赖, 就说这个属性(属性组) 为该表的码
----------
## 第三范式 ##(**消除传递依赖**)
----------
如图所示:1NF解决的是:保证列的原子性 保证没有复合列 就变成了如下的表格