Dao层不直接调取xml文件,而是调取数据库中数据
DBMS,数据库管理系统
SQL:操作关系型数据库统一标准
一、SQL语句
sql语句:
1、可以单行多行,但是分号结尾
2、不区分大小写
单行注释:--空格内容 #
多行注释 /* */
create database ab1;创建数据库
二、SQL语句分类
DDL: 数据定义语言,定义数据库对象
DML:数据库操作语言,增删改
DQL:数据查询语言,查询表中记录
DCL:数据控制语言,创建数据库用户、控制数据库的访问权限
三、DDL(数据库定义语言)
可以把database变成schema
查询所有数据库:show databases;
创建数据库:create database if not exists ab01;
切换数据库:use ab01;(使用db01数据库
查看当前正在使用数据库: select database();
删除数据库:drop database if exists ab01;
表结构创建:
create table 表名(
字段1 字段类型 【约束】 【comment 字段1注释】,
。。。。
字段n
)[comment 表注释];
约束:限制字段所存储数据,保证数据库数据的正确性、有效性和完整性
非空约束 not null
唯一约束:unique
主键约束:非空且唯一:primary key auto_increment
默认约束:default
外键约束:foreign key
四、MySQL数据类型
数值类型
默认是有符号,如果需要无符号 则tinyint unsigned
decimal避免精度损失
年龄:tinyint unsigned 避免占用空间,因为年龄最多一百多
字符串类型
char(10)最多只能存10个字符,不足10个字符,占用10个字符空间,空 性能高,不用判断字符长度
varchar(10)最多只能存10字符。不足10,按照实际长度存储。 省空间
日期时间
表结构查询
查询所有当前数据库所有表:show tables;
查询表结构:desc 表名;
查询建表语句:show create table 表名;
修改表结构
删除表:drop table if exists 表名;
五、DML
DML(数据库操作语言),对数据库记录进行增删改操作
添加数据(INSERT)
修改数据(UPDATE)
删除数据(DELETE)
INSERT
指定字段添加数据:insert into 表名(字段)values(值)
全部字段添加数据:insert into 表名(值);
批量添加数据(指定字段):insert into 表名(字段) values(值),(值)
批量添加数据(全部字段):insert into 表名 values (值),(值);
create_time,update_time可以调用now()函数
注意:
1插入数据时,指定的字段顺序应该与数值一定
2 字符串和日期类型在引号中
3 插入数据大小,应该在字段指定范围内
UPDATE
修改数据 update 表名 set 字段1 = 值1 ,字段2 = 值2。。where 条件
DELETE
delete form 表名 where ;
删除所有数据 delete from 表名;
注意
DELETE语句不能删除某一个字段的值,可以用update将字段值改成null
六、DQL(数据查询语言)
关键字:SELECT
select字段列表
from表名列表
where条件查询
group by分组字段列表 having 分组后条件列表
order by 排序字段列表
limit 分页参数
基本查询
查询多个字段:select 字段 from 表名
查询所有字段:select * from 表名(不建议 不直观 影响效率)
设置别名:select 字段【as(可以省略) 别名】
去除重复记录:select distinct 字段列表 from 表名;
注意 查询时可以先写select from 表名。 再写字段可以自动显示字段所有名
条件查询
select 字段列表 from 表名 where 条件列表
比较运算符:
分组查询(聚合统计)
将一列数据作为一个整体,进行纵向计算
select 聚合函数(字段列表)from 表名;
注意:count(字段)可以选择任何字段
count(常量)
count(*)
null值不参与所有聚合函数运算
分组查询
select 字段列表 from 【where 条件】group by 分组字段名【having 分组后过滤条件】;
注意:
执行时机不同:where分组之前过滤,不参与分组
判断条件不同:where不能对聚合函数进行判断,而having可以
排序查询
select 字段列表 from 表名【where 条件列表】【group by 分组字段】order by 字段1 排序方式1,字段2, 排序方式2
ASC:升序(可以不加,因为默认就是升序)
DESC:降序
注意:多字段排序,如果第一个字段相同时,才会根据第二个字段进行排序
分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
起始数据为0或1都是第一页
select * from tb_emp limit 0,5;第一页展示5条数据
select * from tb_emp limit 0,5;第二页展示5条数据
起始索引 = (页码-1)*记录数
注意:分页查询是数据库方言,在Mysql是limit
如果查询第一页数据,起始索引可以省略
统计数据可视化
报表组件库,Apache Echarts(百度开发)
if判断(gender为1为男性,不为1为女性,将原本的1,2替换为中文)
if(条件表达式,值1,值2)true时取1,flase为2
select if(gender = 1,'男性员工','女性员工')gender,count(*) from tb_emp group by gender;
select if(gender = 1,'男性员工','女性员工')性别,count(*) from tb_emp group by gender;
多余2个条件判断时,用case流程控制
select (case job when 1 then '班主任' when 2 then '讲师' when 3 then '学工主管' when 4 then '教研' else '未分配职位' end)职位, count(*)
from tb_emp
group by job;
七、多表设计
一对多
需求:根据页面原型和需求文档,完成部门及其员工模块的表结构设计
部门:一
员工:多
一(父表)关联多(子表)的主键
使用外键在数据库层面建立两张表的关联:
1创建表示指定外键
create table 表名(
字段名 数据类型,
。。。
【constrict】[外键名称] foriegn key(外键字段名) references 主表(字段名)
)
2、创建完后,添加外键
alter table 表名 add constrict 外键名称 foreign key(外键字段名)references 主表(字段名);
3、图形化界面直接添加外键
注意:
所以物理外键用的少,现在使用多的为逻辑外键
一对一:
案例:用户与身份证信息关系
关系:一对一关系,多用于单标拆分
实现方法:在任意一方加入外键,关联另外一方主键,并且设置外键为唯一的UNIQUE
多对多
实现方法:创建一张中间表
根据需求和页面原型设计数据关系
Visio Professional(画图工具)