1.数据库三范式(设计表的原则) NF:normal form
说明: 严格意义上,有5NF; 1NF,2NF,3NF,4NF,5NF;BCNF;
-
第一范式(1NF)
1NF的定义为:符合1NF的关系中的每个属性都不可再分
1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。学号 班级 姓名 系名 系主任 课程 语文 高数 英语
只满足1NF会有问题:数据冗余过大,插入异常,删除异常,修改异常;
冗余: 相同数据重复出现
插入问题: 3月份新开一个系,但是没有学生和班级; 如何插入数据?
删除问题: 某个班级不存在了,学生和系信息怎么办?
修改问题: 如果李四转到英语系,涉及到多条数据更改 -
第二范式(2NF)
2NF的定义为: 主键依赖,该表里面的其他字段,必须和主键相关;
即一张表格只描述一个对象(主键),其它列名(副键)与对象之间相互完全依赖。生产一批香蕉,需要给香蕉进行记录,以便追踪去了哪里;首先给每把香蕉进行编号,然后描述他的颜色,成熟度,香味等;
-
第三范式(3NF)
3NF的定义为: 主键以外的字段,不能有相互依赖的关系;比如,你想要对香蕉进行【编号】、【颜色】、【香味】、【香味得分】、【香味评级】这种列名,那么你要另开一张专门描述香味的表格。
比如,你想要做【学号】、【姓名】、【性别】、【班级】、【班主任】这种列名,由于【班主任】受【班级】影响,那么你要另开一张专门描述班级的表格。
2.DQL语句 ; 绝对不会影响我们数据库的存储
-
语法:SELECT列名FROM表名【WHERE–>GROUP BY–>HAVING–>ORDER BY–>LIMIT】
-
组合使用,必须按照这个顺序来;
扫描二维码关注公众号,回复: 10160433 查看本文章
SELECT selection_list/要查询的列名称/
FROM table_list/要查询的表名称/
WHERE condition/行条件
GROUP BY grouping_columns/对结果分组/
HAVING condition/分组后的行条件
ORDER BY sorting_columns/对结果排/序
LIMIT offset_start, row_count/结果限定/
2.1 基本查询
-
select * from test
select 字段1,字段2 from test
select distinct 字段 from test – 字段去重查询,非分组 -
给字段取别名
select 字段1 别名1, 字段2 别名2 from test
select 字段1 as 别名1 , 字段2 as 别名2 from test
2.2 条件查询; 带上 where,给定条件查询; 条件是可以组合的; where用在 update delete
-
比较运算符
= != > < >= <= ;
between A and B;
in(值1,值2,值3);
is null;
is not null;
关系运算符
and or not; -
判断时,可用算数运算符;
-
-
- / %; ifnull(x,0); 如果x是null,用0替换;
-
2.3 模糊查询
- 通配符
_ : 代表一个字符
% : 代表任意字符
2.4 排序
- order by 字段 asc/desc
order by 字段1 asc, 字段2 desc
2.5 聚合函数
- count(); 统计不为null的行数
max(); 求字段的最大值
min(); 求字段的最小值
sum(); 求字段和
avg(); 求字段的平均值
#当前日期 curdate();
#当前时间 curTime();
#当前日期和时间 NOW();
2.6 分组查询
- group by 字段; 根据字段来分组;
2.7 分页查询
- limit 纪录起始位置,纪录条数;
2.8 连接查询(关系)
- 内连接: inner join
select * from A,B
select * from A inner join B on A.b = B.b – SQL标准语法
- 外连接: 左右外连接
select * from A left join B on A.b = B.b
select * from A right join B on A.b = B.b
- 案例:
teacher/class/ teacher_class 三表的连接查询; 查看某某老师负责哪些班级授课
2.9 子查询;
- 查询里面有查询;
3: 数据库导入导出(sqlyog)
-
备份:
mysqldump -u root -p lhp>d:\lhp.sql
密码过后输入
mysqldump -u root -proot lhp>d:\lhp.sql -
恢复:
前提:必须先创建数据库
需先登录mySQL,进入指定数据库后执行SQL
Source d:\lhp.sql -
还有一种方式
Mysql -uroot -proot lhp<d:\lhp.sql