MySQL命令大全(六)----视图、数据的导入导出和数据库三范式!

视图

1、什么是视图?(View)
视图就是站在不同的角度去看待同一份数据

2、视图的语法

如:创建视图
create view 视图名 as select * from 表名;
表示将某个表的查询结果当做视图创建,值得注意的是,as后面跟的必须是DQL(select)语句

删除视图
drop view 视图名;

MySQL命令大全(六)----视图、数据的导入导出和数据库三范式!
3、视图的作用

可以面向视图对象进行增删改查,对视图对象的增删改查,会导致原表被操作!这也是视图的特点
也可以多表联查创建视图,对视图进行增删改查也会对原表的数据进行操作。

在实际开发中视图的作用

假设有一条非常复杂的SQL语句,而这条SQL语句需要在不同的位置上反复使用,每次都要重新编写,很长很麻烦,这时就可以把这条SQL语句以视图对象的形式新建,然后直接使用视图对象,可以大大的简化开发,并且利于后期的维护,因为只需要修改视图对象所映射的SQL语句。

视图创建后使用起来就像使用一张表一样,它也是真实存在的。

总结: 视图对象在实际开发中的作用就是方便,简化开发,利于维护!

数据的导入、导出(数据备份)

数据导出:

mysqldump 数据库名>位置+文件名 -uroot -p密码
如:
	mysqldump database>D:\database.sql -uroot -p密码
导出指定的表
	mysqldump database table_name>D:\database.sql -uroot -p密码

需要注意的是:词条命令需要在windows的dos命令窗口中执行,不是在mysql数据库的中!

数据导入:
注意:此条命令是在mysql数据库服务器上执行的
步骤:

  • 先登录到mysql数据库中
  • 然后创建数据库
  • 使用创建好的数据库
  • 然后使用source + 文件的绝对路径即可

如:

source D:\database.sql

数据库设计三范式

1、什么是数据库设计范式?

数据库表的设计依据,就是怎么进行数据库表的设计。

2、数据库设计范式一共有三个

  • 第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。
  • 第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
  • 第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。

示例:第一范式

最核心、最重要的范式,所有表的设计都需要满足,必须有主键,并且每一个字段都是原子性不可再分。
如:一张用户表

user_id    user_name      user_contact
--------------------------------------------------
  1			 Jack		 Jack@gmail.com13599999999

这样的表是不满足第一范式的:首先没有主键,其次联系方式可以分为邮箱地址和电话。
可以修改为

user_id    user_name    user_email     	    phone
-----------------------------------------------------
  1			 Jack		 Jack@gmail.com    13599999999

示例:第二范式

s_Id 	+	t_id(PK)		s_name		t_name
------------------------------------------------------
1001		  001			jack		wang
1002		  002			simo		zhang
1003		  001			lucy		wang
1001		  002			jack		zhang

不满足第二范式,jack依赖1001,wang依赖001,产生了部分依赖
部分依赖的缺点:数据冗余,空间浪费。
修改:
使用多对多来表示(多对多,三张表,关系表两个外键!!!!)

学生表
学生编号(PK)		学生名字
1001			jack
1002			simo
1003			lucy

教师表
教师编号(PK)		教师姓名
001				wang
002				zhang

学生教师关系表
id(PK)			学生编号(FK)			教师编号(FK)
1				1001				001
2				1002				002
3				1003				001
4				1001				002

示例:第三范式

学生编号(PK)		  学生姓名			 班级编号			  班级名称
1001				zhang				01				一班
1002				li				 	02				二班
1003				wang				03				三班
1004				zhao				03				三班

一班依赖01,01依赖1001,产生了传递依赖
修改:
使用一对多(一对多,两张表,多的表加外键!!!)

班级表:一
班级编号(pk)			班级名称
01					一班
02					二班
03					三班

学生表:多
学生编号(pk)			学生名称			班级编号(FK)
1001				zhang				01
1002				li					02
1003				wang				03
1004				zhao				04

3、总结表的设计

多对多:
多对多,三张表,关系表两个外键!!!!

一对多:
一对多,两张表,多的表加外键!!!!

一对一(一对一,外键唯一!!!!):
在实际开发中,可能存在一张表字段太多,太庞大,这个时候要拆分表
一对一怎么设计?
没有拆分表之前:一张表

t_user
id		login_name		login_pwd		real_name		email			address...
------------------------------------------------------------------------------------
1		zhangsan		123				张三		zhangsan@XXX.com		XXX
2		wangwu			456				王五		wangwu@XXX.com			XXX

拆分为两张:

login表:
id(PK)			login_name			login_pwd
--------------------------------------------------
1				zhangsan				123
2				wangwu					456

user表:
id(PK)			real_name			email				address			login_id(FK+unique)
-------------------------------------------------------------------------------------------
01				张三				zhangsan@XXX.com		XXX				1
02				王五				wangwu@XXX.com			XXX				2

当然,最终都是要以满足客户的需求为主要目的。

上一篇:PAT乙级 1001 害死人不偿命的(3n+1)猜想


下一篇:B-1001 害死人不偿命的(3n+1)猜想 (15 分)