数据库的约束

1.数据库的约束

约束:约束用户操作数据表的一种行为
1.默认约束 default:没有插入数据默认字段值
	当前操作表,如果没有插入字段值,默认约束插入字段值
2.非空约束 not null:字段值不能为空
	
3.唯一约束 unique:约束字段值不能重复
	删除唯一约束:alter table 表名 drop index 唯一约束所在字段名称
4.主键约束 primary key:非空且唯一
	删除主键约束:alter table 表名 drop primary key;
	也要删除非空约束
5.自增长约束 auto_increment:一般和主键约束一起使用,主键是自增长的,一般不需要插入
	mysql提供函数:select last_insert_ID():查询到最后一次自增长主键的id值
6.外键约束 foreign key
	外键所在的表---从表,在从表加入外键约束
	constraint --声明
	格式: constraint --声明
		  外键名称  ---命名规则:主表_fk_从表
		  foreign key 外键名称作用在指定的外键字段
		  references 关联主表id
例子:
	CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号
	NAME VARCHAR(20),                  -- 员工名称
	age INT,			   -- 员工年龄
	gender VARCHAR(5),		   -- 员工性别
	dept_id INT, 			   -- 部门id号
	CONSTRAINT  -- 声明  
	dept_employee_fk  -- 后面跟外键名称 (命名规范:主表名_从表名_fk)
	FOREIGN KEY (dept_id) -- 外键名称作用在指定的外键字段
	REFERENCES  -- -- 关联
	dept(id)  -- 主表的主键id	 
);
		  删除外键约束
		  alter table 表名 drop foreign key 外键名称
		  
		  通过sql将外键约束加上
		  alter table 表名 add constraint 外键名称
		  foreign key 外键名称作用在指定的外键字段名称
		  references 主表主键id
7.级联修改和级联删除 cascade :当修改或者删除主表的时候,和主表相关联的表也会发生改变
	(在外键约束的基础之后加入)
	级联修改 on update cascade
	级联删除 on delete cascade
例:	
-- 通过sql语句,加入外键约束以及级联删除和级联修改
  ALTER TABLE employee 
  ADD CONSTRAINT 
  dept_employee_fk 
  FOREIGN KEY 
	(dept_id) 
  REFERENCES 
  dept (id) 
  ON UPDATE CASCADE   -- 级联修改
  ON DELETE CASCADE ; -- 级联删除
  
  --  现在更改部门表的id=4的部分--->id 为3
  UPDATE dept	 SET id = 3 WHERE id = 4 ;
  
  -- 将id为3的产品部删除,在产品部的员工也随之删除!
  DELETE FROM dept WHERE id = 3 ;

2.数据库的备份和还原

1.图形界面化的方式:sqlyog(其中一种)
	(1)备份:选中库--->右键--->backup/export--->以sql转存文件导出到指定目录中--->
	(2)还原:在root@localhost--->右键--->import--->选择execute sql script(执行sql脚本)--->找到sql脚本路径
	
2.命令行的方式
	(1)备份的命令行方式:管理员身份运行dos控制台--->mysqldump -root -p123456 备份文件名 > 备份路径名
	(2)还原的命令行方式:
	将原来的库删除
	创建一个新的库
	使用这个库:source 备份的路径名

3.表和表的关系

1.一对一:一个人一个身份id
  一对多:一个用户可以有多个订单
  多对多:一个学生可以选择多门课程,一个课程可以被多个学生选择
  

4.数据库的三大范式(设计关系型数据库)

三者层层递进关系
1. 1NF
	在设计数据库时,该库中的每一列是不可拆分的原子数据项
	特点:每一列都是独立的,不能再拆分
2. 2NF
	在1NF基础上,非主键的列完全依赖于主键列
	特点:一张表描述一件事情
		这张表中其他的非主键必须完全依赖于主键字段
3. 3NF
	在2NF基础上,非主键的列不能产生传递依赖主键列
	主键列--->x非主键类--->y非主键类,则y主键列依赖于主键列
	针对多对多关系:
			可以设置中间表,设置两个外键分别关联其它两个表

5.多表查询

笛卡尔乘积:A表有m条数据,B表有n条数据,查询共有m*n条记录
1.解决方法:
		操作步骤:
		(1)查询那些表
		(2)查询那些字段
		(3)这些表之间的关系:连接条件是什么
2.内连接查询
		显式内连接:inner join
				 select 字段列表 from 表名1 (inner) join 表名2 on 连接条件
		隐式内连接:使用 where 语句	
				 select 字段列表 from 表名1,表名2 where 表名1
的某个字段 = 表名2.某个字段;
3.外连接查询
		左外连接:将左表全部数据以及连接条件的数据查询出来
				select 字段列表 from 左表 left outer join 右表 on 连接条件
		右外连接:right outer join
4.子查询
		(1)利用聚合函数以及比较运算符进行select语句的嵌套
			SELECT * 
			FROM emp 
			WHERE salary = 
 			(SELECT 
    		MAX(salary) 
 			FROM
    		emp) ;
		(2)利用in集合数据
			SELECT * 
			FROM
 			emp e 
			WHERE e.`dept_id` IN 
  			(SELECT 
    		d.id 
  			FROM
    		dept d 
  			WHERE d.`NAME` = '市场部' 
    		OR d.`NAME` = '财务部' 
			) ;
		(3)将某个查询语句的结果---多行多列--->看作"虚表"和其他表进行关系查询
			
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值