视图
1、什么是视图?(View)
视图就是站在不同的角度去看待同一份数据
2、视图的语法
如:创建视图
create view 视图名 as select * from 表名;
表示将某个表的查询结果当做视图创建,值得注意的是,as后面跟的必须是DQL(select)语句
删除视图
drop view 视图名;
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
当然,最终都是要以满足客户的需求为主要目的。