1.主键约束:primary key
注意:含义:非空且唯一
2.一张表只能有一个字段为主键
3.主键就是表中华的唯一标识
在创建表时,添加主键约束
creat table stu(
id int primary key,--给ID添加主键约束
name varchar(20)
);
-- 主键删除:
ALTER TABLE student DROP PRIMARY KEY;
-- 创建完表之后,添加主键
ALTER TABLE student MODIFY id INT PRIMARY KEY;
自动增长*****
概念:如果某一列是数值类型的,使auto_increment可以完成自动增长
creat table stu(
id int primary key uto_increment,--给ID添加主键约束
name varchar(20)
);
insert into student values(null,'ccc');
根据上一条记录的值进行增长
删除自动增长:
alter table stu modify id int;
因为主键删不了 所以不会删掉
alter table stu modify id int auto_increment;
注意 它一般跟主键在一起
4.外键约束:foreign key
存在形式:数据有冗余(就是一个值对应一个值 所有A对应所有B)
我们可以拆成两个表
在创建表时,可以添加外键
语法:create table 表名(
...
外键列
constraint 外键名称 foreign key (外键列名称) references 主键列表(主表列名称)
);
让表于表产生关系,从而保证数据的正确性
2.删除外键
ALTER TABLE employee drop foreign key emp_dep_fk;
ALTER TABLE 删除的表名 drop foreign key 关联键名
3.创建表之后,添加外键
ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
级联操作 on update cascade
添加外键,设置级联更新:ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id)on
update cascade;
添加外键,设置级联更新:ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id)on
update cascade on delete cascade ;
级联删除
on delete cascade
级联删除也可以单独使用
数据库的设计:
多表之间的关系:
1.1对1 :可以在任意一方添加外键只想另一方的主键,但是要让这个外键唯一 unique
2.1对多:在多的地方建立外键,来指向一的一方的主键
3.多对多实现:
建立一个中间表,中间表至少包含两个字段,这两个字段分别作为第三张表的外键,分别指向两张表的主键。
2.数据库设计的范式:设计数据库时 需要遵循的规范,要遵循后面的范式要求,必须遵循前边的所有范式。
第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项
第二范式(2NF)在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
几个概念:1.A--》B如果通过A属性的值,可以确定唯一B属性的值,则称B依赖于A 比如说学号
2.完全函数依赖:A--》B A是一个属性组 则B属性值的确定需要依赖于A的属性中所有的属性值
3.部分函数依赖: A--》B如果A是一个属性组 则B属性值得确定只需要依赖A属性组的某一些值即可。
4.传递函数依赖:A--》B B--》C 如果通过A属性的值,可以确定唯一B属性的值,在通过B的属性值可以确定唯一C的属性值,则称C传递依赖于A
5.码:如果在一张表中,一个属性火属性组,被其他所有属性所完全依赖,则称这个属性为该表的码
主属性:码属性组中的所有属性
非主属性:
第三范式(3NF)在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
命令行:语法 mysqldump -u用户名 -p密码 保存的数据库名称 > 保存的路径---备份的语法
1.登录数据库
2.创建数据库
3.使用数据库
4.执行文件 sourece 文件路径