第一章:数据库的设计
1.第一范式:
第一范式的目标是确保每列的原子性,如果每列(或者每个属性值)都是不可再分的最小数据单元(也成为最小的原子单元),则满足第一范式
2.第二范式:
第二范式其目标是确保表中的每列都和主键相关,并且除了主键以外的其他列都全部依赖于该主键
3.第三范式:
第三范式的目标是确保每列都和主键列直接相关,而不是间接相关,并且除了主键以外的其他列都只能依赖于主键列,列与列之间不能存在相互依赖关系
第二章:初始MySQL
1.端口设置(默认启用TCP/IP网络,默认端口为3306)
2.默认字符集设置(默认值为utf8)
3.MySQL文件夹
* bin文件夹:该文件夹下存放着可执行文件
* include文件夹:该文件夹下存放着头文件
* lib文件夹:该文件夹下存放着库文件
* share文件夹:该文件夹下存放着字符集,语言等信息
4.修改MySQL配置文件来手动配置数据库服务器MySQL时,常用参数:
* default - character - set:客户端默认字符集
* character - set - setver:服务器端默认字符集
* port:客户端和服务器端的端口号
* delault - storage - engine:MySQL默认存储引擎
5.开服务:(net start mysql)
6.关服务:(net stop mysql)
7.命令行方式连接数据库
语法:
mysql -h 服务器主机地址 -u 用户名 -p 密码 (如果是本机可省略 -h)
8.操作数据库
1.创建数据库
语法:
create database 数据库名;
2.查看数据库列表
语法:
show databases;
3.选择数据库
语法:
use 数据库名;
4.删除数据库
语法:
drop database 数据库名;
5.创建表
语法:
create table if not exists 表名(
字段1 数据类型 字段属性 约束 索引 注释,
...
)表类型 表字符集 注释;
6.单字段主键
语法:
create table if not exists 表名(
字段1 数据类型 primary key,
...
);
7.查看表
语法:
show tables;
8.查看表的定义
语法:
describe 表名;
或
desc 表名;
9.删除表
语法:
drop table if exists 表名;
9.如果需要以0填充不足的位置,需要在类型后添加zerofill关键字
10.各数据类型都包含有符号数和无符号数两类,默认为有符号数,既可以保持负数,如该字段为非负数,则需添加unsigned属性
11.数据类型
常用数值类型
数据类型 字节数
tinyint[(m)] 1
smallint[(m)] 2
mediumint[(m)] 3
int[(m)] 4
float[(m,d)] 4
double[(m,d)] 8
decimal[m([,d])] m+2
bit bit称为位数据类型,其数据有两种取值:0和1 长度为1位,用来表示真假,是否
12.字符串类型
字符串类型
数据类型 字节 说明
char[(m)] m 固定长字符串,M为0-255的整数
varchar[(m)] 可变长度 可变长度,M为0-65535的整数
tinytext 0-255 微型文本串
text 0-65535 文本串
decimal(m,d) 该类型一般用于金额方面,m表示要显示的长度,d表示保留的小数位数
13.日期类型
日期类型
数据类型 格式
date yyyy-mm-dd
datetime yy-mm-dd hh:mm:ss:
time hh:mm:ss:
timestamp yyyymmddhhmmss
year yyyy
14.字段的约束及属性
常用的属性约束
字段属性,约束名 关键字
非空约束 not null
默认约束 default
唯一约束 unique key(uk)
主键约束 primary key(pk)
外键约束 foreign key(fk)
自动增长 auto_increment
15.MySQL的存储引擎
常用的存储引擎
InnoDB 和 MyISQM存储引擎比较
功能 InnoDB MyISAM
支持事物 支持 不支持
支持全文索引 不支持 支持
外键约束 支持 不支持
表空间大小 较大 较小
数据行锁定 支持 不支持
操作系统的默认存储引擎是 InnoDB
查看存储引擎的语法:
show variables like 'storage_engine%';
16.指定表中的存储引擎
语法:
create table 表名(
…
)engine=存储引擎;
第三章:高级查询(一)
1.修改表
1.修改表名
语法:
alter table 原表名 rename 新表名
2.添加字段
语法:
alter table 表名 add 字段 数据类型 属性
3.修改字段
语法:
alter table 表名 change 原字段名 新字段名 数据类型 属性
4.删除字段
语法:
alter table 表名 drop 字段名
2.添加主外键
1.添加主键约束
语法:
alter table 表名 add constraint 主键名 primary key 表名(主键字段)
2.添加外键约束
语法:
alter table 表名 add constraint 外键名 foreign key(外键字段) references 关联表名 (关联字段)
3.插入数据记录
1.插入单行数据
语法:
insert into 表名 (字段列表) values(值列表)
2.插入多行数据
语法:
insert into 表名 (字段列表) values(值列表1),(值列表2),...
3.将查询结果插入到新表中
语法1:
insert into 新表 (字段1,字段2...)
select 字段1,字段2...
from 表名
语法2:
create table 新表 (select 字段1,字段2,...from 表名)
3.数据更新记录
语法:
update 表名 set 字段1=值1,字段2=值2,… where 条件
4.删除数据记录
语法1:
delete from 表名 where 条件
语法2:
truncate table 表名
5.数据查询
语法:
select <字段列表>
from <表名或视图>
where <查询条件>
group by <分组的字段名>
having <条件>(注意:该位置的条件是 筛选组)
order by <排序的字段名> asc或desc
6.limit子句
语法:
select <字段列表>
from <表名或视图>
where <查询条件>
group by <分组的字段名>
order by <排序的字段名> asc或desc
limit 位置偏移量,行数
7.常用函数
1.聚合函数
常用聚合函数
函数名 作用
avg() 返回某字段的平均值
count() 返回某字段的行数
max() 返回某字段的最大值
min() 返回某字段的最小值
sum() 返回某字段的和
2.字符串函数
常用字符串函数
函数名 作用 举例
concat(str1,str2,...strn) 连接完整字符串 select concat('My','S','QL')
返回:MySQL
insert(str,pos,len,newstr) 替换 select insert('这是SQL Server数据库',3,10,'MySQL')
返回: 这是MySQL数据库 lower(str) 变小写 select lower('MySQL') 返回:mysql
upper(str) 变大写 select upper('mysql')
返回:MYSQL
substring(str,num,len) 截取 select substring('JavaMySQLOracle',5,5)
返回:MySQL
3.时间日期函数
常用日期函数
函数名 作用 举例
curdate() 获取当前日期 select curdate()
curtime() 获取当前时间 select curtime()
now() 获取当前日期和时间 select now()
week(date) 返回日期date为一年中的第几周 select week(date)
year(date) 返回日期date的年份 selct year(date)
hour(time) 返回时间time的小时值 select hour(now())
minute(time) 返回时间time的分钟值 select minute(now())
datediff(date1,date2) 返回日期参数date1和date2相隔天数 select datediff(now(),'2008-8-8')
adddate(date,n) 计算日期参数date加上n天后的日期 select adddate(now(),5)
4.数学函数
常用数学函数
函数名 作用
ceil(x) 返回大于或等于x的最小整数
floor(x) 返回小于或等于x的最大整数
and() 返回0-1间的随机数
8.子查询
语法:
select …
from 表1
where 字段1比较运算符(子查询)
9.in和not in子查询
1.in子查询
注意:如果条件后面是用等号跟的子查询,那么该查询就不能返回多个值
使用in则相反
2.not in子查询
注意:in前面加not就是结果的反向值
事列:
#嵌套子查询事列
SELECT re.`studentNo`
FROM `result` re
WHERE re.`subjectNo`NOT IN(
SELECT su.`subjectNo` FROM `subject` su
WHERE su.`subjectName`='HTML'
) AND re.`examDate` IN(
SELECT MAX(r.`examDate`) FROM `result` r
WHERE r.`subjectNo`NOT IN(
SELECT s.`subjectNo` FROM `subject` s
WHERE s.`subjectName`='HTML'
)
);
第四章:高级查询(二)
1.exists 和 not exists子查询
1.exists 子查询
语法:
select … from 表名 where exists(子查询)
2.not exists子查询
exists 和 in一样,同样允许添加not关键字实现取反操作,not exists表示不存在
3.嵌套在select语句的from子句中的子查询语法:
select * from (子查询) as 表的别名
注意:表的别名一定要写
4.创建临时表
语法:
create temporary table 表名 (查询语句)
5.联合查询
语法:
union
6.把时间区分为季度的函数
QUARTER()
注意:括号里面存放想要区分的时间
第五章:事务,视图,索引,备份和恢复
1.事务
事务是指将一系列数据操作捆绑成为一个整体进行统一管理
1.事务特性
1.原子性
事务是一个完整的操作,事务的各元素是不可分的(原子性)
2.一致性
在事务开始之前,数据库中储存的数据处于一致状态
3.隔离性
对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
4.持久性
事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的
2.如何执行事务
支持事务的存储引擎有InnoDB和BDB,InnoDB存储引擎事务主要通过UNDO日志和REDO日志实现
* UNDB 日志:复制事务执行前的数据,用于在事务发生异常是回滚数据
* REDO 日志:记录在事务执行中,每条对数据进行更新的操作,当事务提交时,该内容将被刷新到磁盘
3.执行事务的语法:
1.开始事务
语法:
begin 或 start transaction
2.提交事务
语法:
commit
3.回滚(撤销)事务
语法:
rollback
4.设置自动提交关闭或开启
语法:
set autocommit=0|1
* 值为0:关闭自动提交
* 值为1:开启自动提交
2.视图
视图是保存在数据库中的select查询
视图是一种虚拟表,通常 是作为来自一个或多个表的行或列的子集创建的
1.使用sql语句创建视图
语法:
create view 视图名
as
3.索引
1.索引的分类:
1.普通索引
普通索引是mysql中的基本索引类型,允许在定义索引的列中插入重复值和空值,它的唯一任务是加快对数据的访问速度
2.唯一索引
唯一索引不允许两行具有相同的索引值
3.主键索引
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型
4.复合索引
在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列合作为索引
5.全文索引
全文索引的作用是在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值,主要用于在大量文本文字中搜索字符串
6.空间索引
空间索引是对空间数据类型的列建立的索引
2.创建索引
语法:
create unique|fulltext|spatial index 索引名
on 创建索引的表名 (创建索引的表名的列名)
* unique|fulltext|spatial:分别表示唯一索引,全文索引和空间索引
3.删除索引
语法:
drop index 索引名 on 创建索引的表名
4.查看索引
语法:
show index from 创建索引的表名
4.数据库的备份和恢复
1.使用mysqldump命令备份数据库
语法:
mysqldump -u 用户名(一般为root) -h 主机名(一般不写) -p 密码 要备份的数据库名 要备份的数据库中的表名 > 路径(例如:d:\1\java.sql)
2.使用mysql命令恢复数据库
语法:
mysql -u 用户名(一般为root) -h 主机名(一般不写) -p 密码 要给恢复的数据库名 < 路径(例如:d:\1\java.sql)
注意:1和2一定记住是在dos命令下写的
3.mysql命令是在dos环境下的恢复数据库命令,如果已经登录列MySQL服务器,也可以使用source命令恢复数据库
语法:
source 数据库备份文件(所谓的路径)
4.将所有数据写入到数据文件中
语法:
flush tables
5.表数据导出到文本文件
语法:
select 查询的列
from 表名
where 条件
into outfile 路径(列如:'d:/1/java.txt')
6.文本文件写入到数据表
语法:
load data infile 路径(列如:'d:/1/java.txt') into table 要导入的表名(注意:要导入的表名要提前创建好)
7.知识扩展
* fields
terminated by 'string':用来设置字段的分割符为字符串对象,默认为“\t”
* fields
optionally | enclosed by'char':用来设置括上字段值的字符符号,如果使用了optionally,则只有char和varchar等字符数据字段被包括,
默认情况下不使用任何符号
* fields
escaped by'char':用来设置转义字符的字符符号,默认情况下使用“\”字符
* lines
starting by'char':用来设置每行开头的字符符号,默认情况下不使用任何符号
* lines
terminated by'string':用来设置每行结束的字符符号,默认情况下使用“\n”字符串
第七章:JDBC
1.JDBC访问数据库的步骤
1.加载JDBC驱动
Class.forName("JDBC驱动类的名称") 注意:JDBC驱动类的名称一般为:com.mysql.jdbc.Driver
2.与数据库建立连接
Connection conn=DriverManager.getConnection(数据连接字符串,数据库用户名,密码) 注意:数据库连接字符串一般为:jdbc:mysql://本机名(一般为:localhost):3306/数据库名 数据库用户名一般为:root 密码一般为:root
3.发送SQL语句,并得到返回结果
一旦建立连接,就是用该连接创建Statement接口的对象,并将SQL语句传递给它所连接的数据库,如果是查询操作,将返回类型为ResultSet的结果集,它包含执行SQL查询的结果
Statement stmt = conn.createStatement();
ResultSet rs=stmt.executeQuery("select `id`,`name` from `master`")
4.处理返回结果
处理返回结果主要是针对查询操作的结果集,通过循环取出结果集中每条记录并做相应处理
2.Statement接口和ResultSet接口
Connection 接口常用方法
方法名称 作用
void close() 释放资源
Statement createStatement() 创建一个Statement对象来将SQL语句发送到数据库
PreparedStatement
preparedStatement(String sql) 创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库
boolean isClosed() 查询此Connection对象是否已经关闭
Statement 接口常用方法
方法名称 作用
ResultSet executeQuery(String sql) 可以执行SQL查询并获取ResultSet对象
int executeUpdate(String sql) 执行增,删,改操作,返回影响行数
boolean execute(String sql) 可以执行任意SQL语句,若结果为ResultSet对象,则返回true,反之为false
ResultSet 接口常用方法及作用
方法名称 作用
boolean next() 下一行
boolean previous() 上一行
void close() 释放资源
int getInt() int类型
int getFloat() float类型
String getString() String类型
int getRow() 得到光标当前所指行的行号
boolean absolute(int row) 光标移动到row指定的行
3.PreparedStatement接口
PreparedStatement接口继承Statement接口
PreparedStatement 接口常用方法
方法名称 作用
boolean exectute() true或false
ResultSet executeQuery() 查询
int executeUpdate() 执行增,删,改操作,返回影响行数
void setInt(int index,int x) 给参数
void setObject(int index,Object x) 使用给定对象设置指定参数的值
第八章:DAO模式
1.Properties类
properties配置文件
Properties类的常用方法
方法 描述
String getProperty(String key) 用指定的键在此属性列表中搜索属性,通过参数key得到其所对应的值
Object setProperty(String key,String value) 调用Hashtable的方法put,通过调用基类的put()方法来设置键-值对
void load(InputStream inStream) 从输入流中读取属性列表(键和元素对),通过对指定文件进行装载获取该文件中所以键-值对
void clear() 清除所装载的键-值对,该方法有基类Hashtable提供