1.数据库 day02
升序 asc
降序desc
排序条件设置两个的情况下
只有第一个相同时 才会进行第二个的排序
聚合函数 进行纵向计算
count 计算个数 select count(name) from stu;
为空的话 不能正确计算值
select count(*) from stu; 查出所有只要有一行不为空的数据
---------------------
分组查询
分组之后查询的字段 只能是 分组字段或者聚合函数
where 和having区别
where 在分组之前进行限定 不满足条件不参与分组
having 在分组后进行限定,不满足结果则不会被查询出来
where 后不能进行聚合函数的判断
having 后可以进行聚合函数判断
----------------------
分页查询
limit
公式 开始的索引 = (当前页码-1)*每页显示条数;
2.约束
对表中数据进行限定从而保证 数据的正确性 有效性 完整性
可以控制字段是否可以为空
是否可以重复
主键约束 primary key
非空约束 not null
唯一约束 unique
外键约束 foreign key
创建表时 添加唯一约束
字段后直接加上相应字段即可
alter table student modify name vachar();
这种方式无法删除唯一约束
alter table stu drop index phone number;
可以删除唯一约束
-------------------------
主键约束
非空且唯一
一张表只能有一个字段是主键
primary key
删除主键
alter table student drop primary key.
添加主键
alter table student modify id int primary key;
----------------
自动增长特点
Auto-increment 跟随主键使用 自动增长
自动增加而已
删除主键增长
添加自动增长
-----------------
外键约束
创建表时可以添加外键约束
foreign key 外键名称
主外键对应
foreign key 外键字段名字-references 主表名称 (主表列名称)
alter table employee drop foreign key 外键名ming .
---------------------
级联更新
主外键对应同步更新
on update cascade 级联更新
级联删除
主外键对应同步删除
on update cascade on delete cascade
3.多表关系介绍
数据库的设计
一对一
一对多
多对多
联合主键 需要第三张表
通过联合主键 可以避免
4.数据库三大范式
设计数据库 需要遵循的规范
第一范式 每一列都是不可分割的原子范式
第二范式
函数依赖 如果通过A属性可以确定B属性 那么就可以说 b依赖于a
第三范式
1.MySql
DDL
操作数据库和表
DML
增删改
DQL
查
DCL
操作用户权限信息
javaweb 使用java语言来开发互联网项目
数据库语言开发
1 数据库
2 网页前端
3 web核心技术
4 旅游管理系统
-------------------------------
2.数据库 存储和管理数据的仓库
特点 持久化存储数据,其实数据库就是一个文件系统
方寸存储和管理数据
使用了统一的方式操作数据库
3.常见数据库软件
关系型数据库都是用sql语句写的
有行有列 表格存储
非关系型数据库为键值对存储
------------------------
3306 MySQL端口
------
配置
安装的是mysql服务器
会注册一个服务 没有界面的应用程序 只存在于后台
net start mysql
mysql -u -p
exit则为退出
----------
登录别人
mysql -h+ip -u -p
MySQL目录结构
安装目录
bin放的二进制文件
lib放入包
share 错误信息
my。ini mysql的配置文件
数据目录
结构 称我们的mysql服务器为自己这台计算机
通过软件端口号 可以进行连接
frm为表文件
数据库 文件夹
表 文件
数据 数据
-----------------------
操作sql
概念 结构化查询语言
定义了所有关系型数据库的规则
#关系型######
sql通用语法
以分号结尾
单行注释
--+空格
#
多行注释
/* */
show databases
-------------
DDL操作数据库 创建和查询
crud
creat
retrieve 查询
update 修改
delete 删除
查看某个数据库的字符集
show creat databases 查看某个数据库的创建语句
creae database db1;
create database if not exists db1;
设置字符集 character set gbk
show create database; 查看创建完毕的表
----------------
修改数据库的字符集
alter database db3 character set utf8;
drop database db3 若不存在则报错 删除
drop database if exists db3;
---------------
查询当前正在使用的 数据库名称
select database();
use +数据库名字
-------------------
查询所有表名称 show tables
desc +表名称
创建表
create table 名称(列明 数据类型,
列明 数据类型2,
三 )
----------------------【
数据库中包含的数据类型
int,整数
double 小数点后面保留连根(5,5);
date 日期类型 只包含年月日
yyyy-MM-dd HH:MM-dd:SS
;
datetime 包含年月日 十分小
timestamp
类型
如果将来不给这个人赋值的话吧,会将系统自动时间发货送给对象
字符串
varchar 存储 字符串
name Character(名字长度)
-----------
删除表
drop table 表名 (if exists) ;
create table 表名 like 表名称
--------------
修改表
alter table 表名 rename to新表名
alter table 表名 character set utf8;
alter table 表名 add 列名 数据类型;
alter table 表名 change 新表名 新类型;可以修改类型和列名
alter table 表名 modify 新类型 可以修改类型
alter table 表名 drop 列名
-----------------------------------------
DML
添加数据 insert into 表名(列名)values(值);
除了数字都需要使用引号 单双均可
----------------
删除数据
delete from 表 where 条件;
不写条件则删除所有数据表中
truncate 删除表 直接删除表 而不是一条条执行删除语句
然后再创建一个一模一样的空表
update 表名set 列名 = 值1,
列名=值2.
如果不加条件 也会将所有记录全部修改
------------------
查
select
from
where
group by
having 分组后的条件限定
order by
limit 分页
------------
select distinct from 表名set
去重
ifnull(字段,0);如果为空则把值变为0;
-------------------【
!= 和<>都是不等的意思
---------------
in(12,23,12);
null值不能用 = 进行判断
只能使用 is null
或者 is not null
like 模糊查询 -代表单个字符
%为多个字符
------------------------------
1.Junit单元测试
代码测试不需要main
通过注解进行单独运行
避免创建main方法的问题
测试分为 黑盒测试 不需要编写代码 不关注过程 看是否能输出期望结果
白盒测试 需要关注过程 编写代码
Junit单元测试为白盒测试的一种
1.2 白盒测试步骤
步骤
定义一个测试类
定义测试方法 可以独立运行
命名为test+方法名
给方法加上注解
@Test 才能不需要main就可以独立运行
红色 测试失败
绿色 测试成功
断言 :提前预判结果 是否会与输出结果相等
Assert。assertEquals(期望值,真实值);
before\after是在测试方法前后执行
2.反射
和框架有关
获取一个类的信息
框架:半成品软件 在基础上进行软件开发
反射:将类的各个部分封装成其他对象
是框架设计的灵魂
--------------------------------
通过类加载器 将字节码文件进行操作
Classloader
在程序的运行过程中操作其他对象
可以解耦 降低程序耦合性 提高程序可扩展性
------------------------------
获取字节码文件。class的三种方式
。forname 将字节码文件加载进内存
类名.class 通过类名的属性class获取
对象 object。class
结论 同一个字节码文件 在一次程雪的运行过程中
-------------
有三种方法获取class对象0
forname用于配置文件
类名。class用于参数传递
对象.getclass对象
--------------------
class文件
获取成员变量 getField
加上Declared 则为可以获取private的变量在内的所有
构造方法 constructor
成员方法 method
获取类名 getname
-----------
用反射获取后 需要使用循环取值
如果想要访问private 并进行操作
需要使用忽略权限的操作
暴力反射操作
setAccessible(true)
------------
获取构造方法
构造器为newInstance 传入所需要的值
可以使用空参构造
不加入所需要值
可直接由class对象名进行空参构造创建
---------------------
获取method
执行方法前需要获取方法
getMethod
需要创建对象
方法.invoke(p)
执行
-------------
案例
public class person
创建properties文件
className = 对象路径
method=showName
主方法
创建属性文件 进行属性加载 使用load方法
getclassloader 把类加载进内存中
classloader.getResourceAsStream(“ ” ) 获取包下所有文件名称
3.注解
就是说明程序的
@deprecated 标注代码过时
@SuppressWarning(“all”)
压制所有警告
可以放在类之上 取消所有警告
自定义注解格式 本质
@interface MyAno
本质就是一个接口 继承注解
----------------
@check
注解加上
00
1.stream流 方法引用
当做是省略集合操作步骤的方法
list等
使用正常写法进行遍历输出会很麻烦
stream可以进行优化
list.stream.filter().filter().foreach
2. 流思想(与io流不同)
拼接生产线进行操作
filter进行过滤
不进行数据存储
数据源可以使集合 数组
stream操作存在两个基本操作
返回的都是流本身
stream对象元素放入生产线上
提供了基本操作的方法 操作完交给下一个进行操作
链式编程前提是 返回值是对象本身
list set可直接转换为stream流
map需要进行间接转换
使用keyset 获取key集合 使用key转换stream流
或者使用values 获取值得集合
转换为stream流
获取键值对 entryset
entry.stream 可直接获得键值对stream流
Stream of(1,,,,3,4,5,)
也可以获得stream
3.常用的 foreach方法
一种为延迟方法 返回值类型为自身
支持链式调用
一种终结方法 0为返回值不是自身的方法
不支持链式调用
出去forreach以及count
均为延迟方法
省略 数据类型 以及最后大括号
4.map 把元素进行转换
从一个流转换到另一个流之中
Function转换接口
5.count方法 为一个终结方法
返回一个long型整数
6.skip 跳过n个元素进行操作
stream000方式处理案例
7.方法的引用
定义函数式接口
:: 方法引用的运算符
1.Stream流
java8对于遍历的处理
startwith 以。。。开头
使用stream进行优化
关注的是做什么 而不是怎么做
简化需进行多次循环的程序
list。stream。fileter
stream是一个了来自数据源的元素队列
元素是特定类型对形象形成一个队列
数据源可以使集合,数组
除了终结方法之外 其余方法均为延迟方法
获取stream流
使用其中的 foreach方法进行遍历
5.数据库备份与还原
db33 备份数据库
|
|