show databases; // 查询所有数据库
select database(); // 查询当前使用的数据库
create database [数据库名]; // 创建数据库
use [数据库名]; // 使用数据库;
drop database [数据库名]; // 删除数据库
create table [表名]; // 创建表
desc [表名] // 查询该表的字段以及名称
show create table [表名] // 查询建表的sql语句
sql的数据类型
添加表的字段
alter table 表名 字段名 数据类型 [注释] [约束];
修改字段
alter table 表名 modify 字段名 新的数据类型; //修改数据类型
alter table 表名 change 旧字段名 新字段名 数据类型 [注释] [约束]; //修改字段
删除字段
alter table 表名 drop 字段名;
修改表名
alter 表名 rename to 新表名;
删除表
drop table 表名; //删除表
truncate table 表名; // 删除该表 并重新创建一个空的表
DML-添加数据
insert into 表名 (字段名1, 字段名2 , ...) values(值1, 值2, ...);
insert into 表名 values(值 ....) //给表所有字段按顺序添加数据
// 批量添加数据
insert into 表名 (字段名1, 字段名2 , ...) values(值1, 值2, ...),(值1, 值2, ...),;
insert into 表名 values(值 ....),(值 ....);
修改数据
update 表名 set 字段名1 = 值1, [where 条件];
删除数据
delete from 表名 [where 条件];
# 有where删除符合条件的数据 没有删除全部数据
数据查询
数据去重在select 后添加 distinct即可
1.普通查询
1.查询指定字段
select 字段1, 字段2 from 表名;
2.查询所有字段
select * from 表名;
3.去重数据
select distinct 字段 from 表名;
2.条件查询
select 字段列表 from 表名 where 条件列表;
3.聚合函数
select 聚合函数(字段列表) from 表名 [where 条件];
// 例: select count(id) from edu;
4.分组查询
!!分组前条件用where 分组后用 having (where > 聚合函数 > having)
5.排序查询
select 字段列表 from 表名 order by 字段1, 排序方式1, 字段2, 排序方式2;
// ASC 升序
// DESC 降序
6.分页查询
select 字段列表 from 表名 limit 起始索引, 查询记录数据;
6.sql语句的编写顺序
管理用户
函数
1.字符串函数
2.数值函数
3.日期函数
// type是时间单位(DAY MONTH YEAR)datediff是date1 - date2 的间隔天数
4.流程控制函数
例:
约束
给表的字段添加上约束条件
例:(需求)
sql语句
外键约束
外键名称是自定义的!
外键的更新行为
(只需要在添加外键的sql语句后面加上 on update / delete 以及行为名称即可)
多表查询
多表关系主要分三种情况:
一对多(多对一) 一般在N的一方建立外键链接唯一对应关系
多对多 一般建立第三张表来维护多对多之间的关系
一对一 一张表的数据量大 用多表差分来提升效率(单表的拆分)
1.内连接
例:隐式连接
from 后写两张表的表名 where 后跟着外键与主表id相等的查询条件
显式连接:
emp 连接(inner join) dept 后面跟着where条件
2.外连接
分为左外连接和右外连接
左外连接
右外连接
3.自连接
自连接一定要给 表取别名!!
4.联合查询
5.子查询
外部可以是增删改查!
例:标量子查询 (返回单个数据)例:列子查询(返回一列)
操作符号:
IN :
ALL
ANY/SOME
例:行子查询(返回一行)
查询与张无忌工资以及领导相同的员工信息
例:表子查询(返回多行多列)
事务
简介:
开启事务(之后就要手动提交事务 不需要设置提交方式)
在Java JDBC中事务操作流程
try {
conn.setAutoCommit(false); //将自动提交设置为false
ps.executeUpdate("修改SQL"); //执行修改操作
ps.executeQuery("查询SQL"); //执行查询操作
conn.commit(); //当两个操作成功后手动提交
} catch (Exception e) {
conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
e.printStackTrace();
}
事务的四大特性:
并发问题
事务的隔离级别
加上session表示只设置当前会话的隔离级别