【JDBC-01】
01 JDBC Java DataBase Connectivity
02 DriverManager Class.forName("com.mtsql.jdbc.Driver")
Connection getConnection("jdbc:mysql://127.0.0.1:3306/dbname","root","root")
Statement createStatement(String sql)
PreparedStatement prepareStatement(String sql)
03 conn.setAutoCommit(false)
conn.commit()
conn.rollback()
04 Statement
boolean execute(String sql)
int executeUpdate(String sql) (insert update delete)(create alter drop)
ResultSet executeQuery(String sql) (select)
【MySQL-03】
01 多表查询
00 笛卡尔积
01 内连接-隐式内连接 where
02 内连接-显式内连接 [inner] join
03 左外连接 left [outer] join
04 右外连接 right [outer] join
05 嵌套查询
01 子查询结果 单行单列
02 子查询结果 多行单列
03 子查询结果 多行多列
02 事务
01 start transation / commit / rollback
02 事务提交方式:
01 自动提交:mysql默认自动提交
02 手动提交:oracle默认手动提交
03 查询与修改事务提交方式
01 SELECT @@autocommit;【1 自动,0手动】
02 set @@autocommit = 0;
03 事务的四大特征
01 原子性
02 持久性
03 隔离性
04 一致性
04 事务隔离级别
01 read uncommitted
02 read committed
03 repeatable read
04 serializable
05 可能存在问题
脏读、不可重复读、幻读
06 用户权限控制
【MySQL-02】
01 DQL 查询语句
排序查询
order by id [ASC],age DESC
//按照 id 升序,如果 id 相同,按照年龄 降序
聚合函数
count(1) //主键 *
max(math)
min(math)
sum(math)
avg(math)
【注意】聚合函数的使用,排除null值
01 选择不包含非空的列进行计算
02 IFNULL 函数
分组查询 //group by area
1. 分组之后查询的字段:分组字段、聚合函数【注意点】
2. where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
分页查询 // limit 开始的索引,查询的条数
开始的索引 = (当前的页码 - 1) * 每页显示的条数
【limit,mysql的方言】
02 【约束】
主键约束 primary key 【一张表中只能有一个主键】
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
ALTER TABLE stu DROP PRIMARY KEY;【】
非空约束 not null
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
ALTER TABLE stu MODIFY NAME VARCHAR(20);
唯一约束 unique 某一列的值不能重复(但是,可以存储多个null值)
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
ALTER TABLE stu DROP INDEX phone_number;【】
自动增长 auto_increment
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
ALTER TABLE stu MODIFY id INT;
外键约束 foreign key
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
01 员工与部门信息混在一起,一张表
02 员工信息与部门信息分开,两张表,缺少外键约束
department (id,dept_name,dept_location)
employee(id,name,age,dept_id)
创建表的时候添加外键约束:
constraint emp_dept_fk foreign key (dept_id) reference department(id);
删除外键约束:
alter table employee drop foreign key emp_dept_fk;
创建表之后,添加外键约束:
alter table employee add constraint emp_dept_fk foreign key (dept_id) reference department(id);
03 【级联操作】
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) [on update cascade] [on delete cascade];
01 级联更新:on update cascade
02 级联删除:on delete cascade【外键约束】
04 【范式】
第一范式:每一列 不可再拆分
01 存在严重的数据冗余:姓名、系名、系主任
02 数据添加存在问题:添加新开设的系和系主任,数据不合法
03 数据删除存在问题,某同学毕业了,连系的信息也删除了
第二范式:在第一范式的基础上,表中的每一个字段都完全依赖于主键
【消除非主属性对候选码的部分依赖】
当存在一个复合主键包含多个主键列的时候,才可能会发生不符合第二范式的情况。
primary(A,B)
AB -> C 成立,且 A -> C 成立
或者
AB -> C 成立,且 B -> C 成立
01 函数依赖:学号 -> 姓名 (学号,课程名称)-> 分数
02 完全函数依赖:(学号,课程名称)-> 分数
03 部分函数依赖:(学号,课程名称)-> 姓名
04 传递函数依赖:学号->系名 系名->主任
05 【码】:如果一个表中,一个属性或属性组,被其他属性所完全依赖
第三范式:在第二范式的基础上,表中的每一列都直接依赖于主键,而不是通过其他的列间接依赖于主键【任何非主列不得传递依赖于主键】,即:
不存在 主键列 -> 非主键列x -> 非主键列y
05 【实体之间的关系】
一对一
一对多
多对多 (联合主键)
06 【数据库的备份和还原】
【MySQL-01】
01 sql语句分类
DDL 数据定义语言 建库、建表
DML 数据操纵语言 增删改
DQL 数据查询语言 查询
DCL 数据控制语言 用户权限设置
cmd 连接数据库 mysql -h 127.0.0.1 -uroot -proot
02 sql语法
语句以分号结尾
SQL中不区分大小写 注释
-- 单行注释
/**/ 多行注释
03 【DDL】
创建【数据库】
CREATE DATABASE learndemo;
CREATE DATABASE learndemo IF NOT EXISTS learndemo;
CREATE DATABASE learndemo DEFAULT CHARACTER SET gbk;
CREATE DATABASE IF NOT EXISTS tmpdemo2 CHARACTER SET gbk;
查看数据库
show datebases;
SHOW CREATE DATABASE learndemo;
修改数据库的默认的字符集
ALTER DATABASE learndemo CHARACTER SET utf8;
删除数据库
DROP DATABASE [if exists] learndemo;
查看正在使用的数据库
SELECT DATABASE();
使用/切换数据库
USE learndemo;
int
double(5,2)
date yyyy-MM-dd
datetime yyyy-MM-dd HH:mm:ss
timestamp yyyy-MM-dd HH:mm:ss //如果没有指定,默认系统当前时间
varchar(20)
创建【数据表】
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);
快速创建一个表结构相同的表
CREATE TABLE studentlike LIKE student;
查看当前数据库的所有表
SHOW TABLES;
查看表结构
DESC student;
查看创建表的sql语句
SHOW CREATE TABLE student;
修改表名
alter table student rename to newtablename;
修改表的字符集
alter table student character set utf8;
增加一列
alter table student add gender varchar(20);
修改列名称 名称
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列
alter table 表名 drop 列名;
删除表
DROP TABLE [IF EXISTS] studentlike;
04 【DML】
插入数据
INSERT INTO student
(id,NAME)
VALUES
(1,'成龙');
查询数据
SELECT id,NAME,birthday
FROM student;
更新数据
UPDATE student
SET
NAME = '迪丽热巴',
id = 2
WHERE id = 1;
删除数据
DELETE FROM student
WHERE id = 2;
清空表中的全部数据
TRUNCATE TABLE student;【推荐】
DELETE FROM student;
05 【DQL】
查询数据
select 字段列表
from 表名
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序的字段
limit 分页限定
某一列数据与固定值运算
SELECT
id+10
FROM student;
某一列数据与其他列数据运算
SELECT
*,(math+english) AS 总成绩
FROM student;
06 【条件查询】
CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3
(id,NAME,age,sex,address,math,english)
VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
SELECT math 数学,IFNULL(english,0) 英语,math+IFNULL(english,0) AS 总成绩
FROM student3;
运算符
> >= < <= <>
between 100 and 200 [100,200]
in(1,2)
like '张%'/like '张_'
% 匹配任意多个元字符
_ 匹配一个字符
is null
and
or
not
【Junit】
类名Test
public void test方法名(){}
@Test
@Before
@After
【反射】
获取类的字节码
构造器
方法
属性
忽略访问权限修饰符的安全检查 setAccessible(true)
【注解】JDK 1.5后的新特性,说明程序的
01 编写文档 (生成doc文档)
02 代码分析 (使用反射)
03 编译检查
@Override
@Deprecated
@SuppressWarnings("all") 压制警告
【本质】注解本质上就是一个接口,默认继承 java.lang.annotation.Annotation类
【属性】:接口中的抽象方法
01 属性的返回值类型只能去以下类型:
基本数据类型、String、枚举、注解
以上类型的数组
02 定义了属性,在使用时需要给属性赋值
01 默认初始化值,default
02 如果只有一个属性需要复制,且属性名称为value,则value可以省略
03 数组复制,{}包裹,只有一个数值,{}可以省略
【元注解】
@Target 注解作用的位置
ElementType.TYPE/METHOD/FEILED
@RETENTION 注解被保留的阶段
RetentionPolicy.SOURCE/CLASS/RUNTIME
@Documented 注解是否被抽取到 api 文档中
@Inherited 注解是否被子类继承
【获取指定的注解】
getAnnotation(Class)
//在内存中生成了该注解接口的子类实现对象
调用注解中的抽象方法,获取配置的属性值
|
|