第一章
三大范式
第一范式:
确保每列的原子性(每列都是不可再分的最小数据单元)
第二范式:
满足第一范式的前提下,确保表中每列都和主键相关(一张表只干一件事)
第三范式:
满足第一二范式的前提下,确保表中每列都和主键直接相关,而不是间接相关。
注意:三大范式只作为一种规范作为参考,阿里巴巴数据库规范要求表之间连接最多不超过三张
第二章
2.1 命令行操作MySQL
1.命令行启动MySQL命令:net start mysql
2.命令行停止MySQL命令:net stop mysql
3.命令行登录MySQL命令:mysql [-h服务器主机地址] -u用户名 -p密码
2.2 SQL语句操作数据库
创建数据库:create database 数据库名;
查看数据库列表:show databases;
选择数据库:use 数据库名;
删除数据库:drop database 数据库名;
2.3 结构化查询语言
DML(数据操作语言):用来插入、修改和删除表中的数据,如insert、update、delete等
DDL(数据定义语言):在数据库中创建或删除数据库对象等操作create、drop、alter等
DQL(数据查询语言):用来数据库中的数据进行查询,指select语句
DCL(数据控制语言):用来控制数据库组件的存取许可,存取权限等,如grant、revoke等
2.4 数据类型
int[(M)]:4字节,整数用,M可省略
double[(M,D)]:8字节,小数用,M表示总位数,D表示小数点后保留位数,均可省略
decimal[(M[,D])]:小数用,比double精度高
char[(M)]:M字节,M取值为0~255,固定长字符串
varchar(M):可变长度字符串,M取值范围:0~65535
datetime:日期,格式YY-MM-DD hh:mm:ss
timestamp:日期,格式YYYYMMDDHHMMSS
2.5 字段约束及属性
非空约束:not null
默认约束:default
唯一约束:unique key
主键约束:primary key
自动增长:auto_increment(注意,只有主键且整数类型可用)
foreign key:外键,了解即可
comment:注释
engine:存储引擎 选用innodb
charset/character set:字符集,选用utf8
collate:排序规则,选用utf8_general_ci
2.6创表语句
create table [if not exists] 表名( ... primary key(字段名) )ENGINE=innodb charset=utf8 COLLATE=utf8_general_ci;
2.7 sql语句操作表
查看表:show tables
查看表的定义:describe/desc 表名
删除表:drop table [if exists] 表名
MyISAM和InnoDB对比:
MyISAM:节约空间,速度较快
InnoDB:安全性高,行级锁,支持事务处理,支持多表多用户操作
第三章
3.1 修改表
-- 修改表名,语法格式 alter table 旧表名 rename to 新表名; -- 添加字段,语法格式 alter table 表名 add 字段名 数据类型 属性; -- 修改字段,语法格式 alter table 表名 change 原字段名 新字段名 数据类型[属性]; alter table 表名 modify 字段名 数据类型 [属性]; -- modify 和change对比: -- modify用于修改数据类型和属性约束,不能修改字段名 -- change用于修改字段名,数据类型,约束 -- 删除字段,语法格式: alter table 表名 drop 字段名;
3.2 数据操作语言
3.2.1 插入数据 insert
insert into 表名[(字段名列表)] values (值列表1),(值列表2)... ;
3.2.2 更新数据记录
update 表名 set 字段1=值1,字段2=值2,...字段n=值n [where 条件];
3.3.3 删除数据记录
delete from 表名 [where 条件]
truncate table 表名;
delete 和truncate对比:
1.相同:都能删除数据,不删表结构
2.不同:truncate重置自增列,执行速度比delete快,慎用
delete不会重置自增列
3.3 数据查询
3.3.1 查询语句
select 字段名列表 from 表名或视图名 [where 查询条件] [group by 分组字段名] [having 分组后筛选条件] [order by 排序字段名 [asc/desc]] [limit [位置偏移量,]行数]
3.3.2 limit子句
位置偏移量index,当前页码数 pageNum,每页显示条数pageSize关系:index = (pageNum-1)*pageSize
3.3.3常用函数
聚合函数:
求平均值:avg()
返回某字段的行数:count()
求最大值:max()
求最小值:min()
返回某字段的和:sum()
3.3.4 子查询
-- 在查询语句中嵌套查询语句,执行顺序为先执行内层查询(先查询子句),再执行外层查询 select * from student where studentNo in ( select studentNo from result where studentresult<60 );
3.3.5 连接查询
内连接: A inner join B ... on 条件
左连接: A leftjoin B ... on 条件
右连接: A right join B ... on 条件
等值连接 : from A,B where 条件
举例:
-- 内连接 select * from student inner join result on student.studentNo=result.studentNo; -- 左连接 select * from student left join result on student.studentNo=result.studentNo; -- 右连接 select * from student right join result on student.studentNo=result.studentNo; -- 等值连接 select * from student, result where student.studentNo=result.studentNo;
3.5 in 和not in
比较运算符:=、 <、 > 、 >=、 <= 、 !=
当子查询返回值不唯一时,使用in
between...and ...区间范围取值
判断为空:is null /is not null
第四章
4.1 exists子查询/not exists
语法:select ...from 表名 where exists(子查询);
#exists后面的参数是一个任意的子查询,如果该子查询有返回行,则exists子查询的结果为true,此时再执行外层查询语句
4.2子查询注意事项
常用语法:
select 字段名列表 from 表名 where 条件字段 =(子查询)
select 字段名列表 from (子查询) as 表的别名;
#注意:使用第二种用法时,表的别名不能省略
第五章
事务的属性
原子性(Atomicity):事务是一个完整的操作,事务的各元素是不可分割的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。
一致性(Consistency):当事务完成时,数据必须处于一致状态(最终结果一致性)。
隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的
持久性(Durability):事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的
第七章
7.1 JDBC访问数据库的步骤
-
加载JDBC驱动
-
与数据库进行连接,获取连接对象Connection
-
创建Statement对象,执行sql语句
-
处理返回结果,若是查询语句,得到结果集ResultSet对象进行处理
7.2 Statement接口和ResultSet接口
Connection常用方法:
-
close():释放资源
-
Statement createStatement():创建Statement对象用于执行SQL
-
PreparedStatement prepareStatement(String sql):创建PreparedStatement对象,预编译sql语句,执行sql语句
Statement常用方法:
-
ResultSet executeQuery(String sql):可以执行SQL查询并获取ResultSet结果集
-
int executeUpdate():执行增删改操作,返回受影响行数
使用Statement对象执行sql可能出现sql注入漏洞,如何解决?
PreparedStatement可以对sql进行预编译,避免sql参数拼接,安全性更高
常用方法:
-
ResultSet executeQuery():可以执行查询并获取ResultSet结果集
-
int executeUpdate():执行增删改操作,返回受影响行数
-
void setObject(int index,Object obj):为占位符赋值,index对应问号占位符的位置。int类型可以用setInt(),String 类型可以用setString()等等
-
void close():释放资源