数据库SQl
ALTER TABLE USER DEFAULT CHARACTER SET utf8;
DDL -- 对数据库进行操作的语言

create database 数据库名;
 drop database 数据库名;
 use 数据库名;
 show databases;
 create table 表名(
     id int(5),
     name varchar(20)
 );
 desc 表名;
 alter table student rename to stu;-- 修改表名;
 alter table stu add address varchar(20);-- 增加列
 alter table 表名 modify 列名 新数据类型;-- 修改数据类型
 alter table stu change 列名  新列名 新数据类型; -- 修改列名和数据类型 
 alter table stu drop 列名;

DML -- 操作数据
查询所有数据:select * from stu;
给指定列添加数据:insert into (列名1,列名2) values (值1,值2);
insert into stu(id,name) values(1,'张三');
给所有列添加数据:insert into (列名1,列名2,列名3,列名4,.....) values (值1,值2,....);
批量添加数据:insert into (列名1,列名2,....) values (值1,值2,....),(值1,值2,....);
修改数据:
update stu set name = '王五' , sex = '女' where id = 1;
删除数据:
delete from stu where name = '张三';

DQL -- 查询数据
基础查询:

select * from stu;
 select age from stu;
 select age,name stu;


条件查询:

select * from stu where age between 20 and 30;
 select * from stu where age in(20,18,19);
 select *from stu where tel is null; -- 为空的情况
 select *from stu where tel is not null;


模糊查询;(_和%占位符)

select * from stu where name like '张%';-- 第一位为张
 select * from stu where name like '_张%';-- 第二位为张
 select * from stu where name like '%张%';-- 包含张


排序查询

select * from stu order by age asc;-- 默认升序
 select * from stu order by age desc;
 select * from stu order by english desc,age asc;-- 英语成绩降序,年纪升序。


分组查询:
聚合函数: 将一列数据作为一个整体,进行纵向计算。

count,max,min,sum,avg
 select cout(*) from stu;


null值不参与所有聚合函数运算;

select sex,avg(math) from stu groud by sex;-- 根据性别各自的数学平均分分组
 select sex,avg(math),count(*) from stu where math>70 groud by sex having count(*)>2;


面试题:
where和having有啥区别?
1.执行的顺序不一样,where是分组之前进行限定,不满足where,不执行分组,
而having是分组之后对结果进行过滤。
2.可判断的条件不一样,where不能对聚合函数进行判断,而having可以。
执行顺序:where>聚合函数>having
分页查询:
select * from stu limit 起始索引,查询条目数;
计算公式(当前页-1)*查询条目数

约束
主键约束,唯一约束,非空约束,默认约束,外键约束 
外键

constraint fk_emp_dept foreign key(dept_id) references dept(id);
 constraint fk_emp_dept foreign key(dept_id) references dept(id);


删除外键:
alter table emp drop foreign key fk_emp_dept;
建完表后,添加外键
alter table emp add constraint fk_emp_dept foreign key(dept_id) references dept(id);
数据库设计概念:
建立数据库中的表结构以及表与表之间的关联关系的过程。
有哪些表?表里有哪些字段?表和表之间有什么关系?
表关系:一对一,一对多(多对一),多对多

多表查询
select * from emp,dept;
内连接:查询的是AB表交集数据
隐式内连接:

select * from emp,dept where dep.dept_id=emp.did;
 select t1.name,t1.gender,t2.name from emp t1,dept t2 where t1.dept_id=t2.did;


显示内连接:
select * from  emp inter join dept on dept.dept_id =emp.did;
外连接

左外连接(常用):查询A表所有数据和交集部分的数据
 select * from emp left [outer] join dept on dept.dept_id = emp.did;
 select * from dept left [outer] join emp on dept.dept_id = emp.did;


右外连接:查询B表所有数据和交集部分的数据
select * from emp right [outer] join dept on dept.dept_id = emp.did;

子查询:嵌套查询
单行单列:作为条件值,使用= != > <等进行条件判断
select * from emp where 字段名(子查询)
多行单列:作为条件值,使用in等关键字进行条件判断
select * from 表 where in(子查询)
多行多列:作为虚拟表
select * from (子查询),表 where 条件;

事务:一组数据库操作命令,这组命令要么同时成功,要么同时失败
事务的四大特征:ACID
原子性:事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性:事务完成时,必须使所有的数据保持一致的状态。
隔离性:多个事务之间,操作的可见性
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

JDBC:(Java Database Connection)
Java提供的操作数据库的接口API,该接口由数据库厂商实现
DriverManager(驱动管理类):1.注册驱动2.获取数据库连接 配置useSSL=false参数,禁用安全连接方式,解决警告提示
Connection(数据库连接对象):1.获取执行SQL的对象 2.管理事务
Statement:1.执行SQL语句
ResultSet:1.封装了DQL查询语句的结果
PreparedStatement:1.预编译SQL,性能更高 2.防止SQL注入,将敏感字符进行转义

数据库连接池:
是个负责分配和管理数据库连接的容器
好处:1.避免数据库连接遗漏 2.资源重用 3.提升系统响应速度
用法:
创建Properties对象
 Properties.load方法加载配置文件
获取数据库连接池对象

DuridDataSourceFactry.createDataSource(prop);
 //获取数据库连接connention对象
 dataSource.getConnection
 定义sql语句
 获取PreparedStatement对象预编译sql语句
 PreparedStatement pstmt =conn.prepareStatement(sql);
 执行sql
 int count =pstmt.exxecuteUpdata();
 释放资源