目录
数据库基础知识
数据,数据库,数据库管理系统,数据库系统
数据库的发展阶段
数据库系统的结构
三级结构
数据库系统的二级映像
1.外模式/模式映像:保证逻辑独立性
2.模式/内模式映像:保证物理独立性
数据模型
一、概念模型
1.相关术语
2.实体型之间的联系
3.E-R 图
矩形表示实体;椭圆表示属性;菱形表示联系;无向边;联系类型
例:①班级和班主任;②学生和班主任;③学生和课程
逻辑结构
1.结构
树型结构
2.特点
(1)一个模型有且只有一个节点没有双亲节点,这个节点称为根节点
(2)根节点以外的其他节点有且只有一个双亲节点
(3)父子节点之间的联系是一对多联系(1∶ n)
网型结构
2.特点
(1)允许一个以上的节点没有双亲节点
(2)允许一个节点有多个双亲节点
(3)节点之间存在多种联系(m:n)
关系模型
(一)基本概念
1.关系:二维表
2.属性:列、字段;元数
3.域:值域
4.元组:行、记录
5.分量:属性值
如,(01001,赵乾,女,讲师,计算机, 6000)中“01001”为一个分量
6.关系模式:二维表结构
如, T(TNo, TN, Sex, Prof, Dept, Sal)
(二)关系的性质
1.每一列是同质的
2.不同列有不同的名字
3.列的顺序可以任意交换
4.行的顺序可任意交换
5.不允许出现完全一样的行
6.不允许出现合并单元格
(三)关系模型的完整性约束
有 3 类:实体完整性、参照完整性、用户定义完整性
(一)关系的码
(二)实体完整性
原则:①有主码(不空)②不同元组的主码不重复
(三)参照完整性
原则: R2 表的外键 X 的取值,参照 R1 表的主键值
(四)用户自定义完整性
原则:事先定义值域
关系代数
一) 传统的集合运算
1.并
2 .差
3.交
4.广义笛卡尔积
二) 专门的代数运算
1.选择 【根据条件得到行】
选择条件:性别 女
结果:
2.投影 【 根据条件得到列】
投影条件:姓名,系别
投影结果:
3.连接
连接运算是二目运算, 它从两个关系的广义笛卡儿积中选取满足连接条件的
元组, 组成新的关系。
( 1) 等值连接
规则: ①结果(字段-两个关系的字段和) (记录-等值属性值相等, 拼左右)
( 2) 自然连接
规则: ①两表有相同的属性②结果( 字段-相同属性列只保留一列) ( 记录-
相同属性做等值连接)
4.除
具体算法可以看这篇http://t.csdn.cn/D4vj3
数据库的分类
数据库分为关系型数据库和非关系型数据库
关系型数据库 | 非关系型数据库 | |
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据的缓存、或基于统计分析的OLAP系统 |
配置初始化文件
常用的dos代码
注意:
- 注释的写法 在前面加 --
- sql语句不区分大小写,写大写和小写都行
SQL分类
DDL数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
DML数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
DCL数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
表设计
一对一
一对多
多对多
常用数据类型
数值类型
分为整型和浮点型
数据类型 | 大小 | 说明 | 对应java类型 |
BIT[ (M) ] | M指定位数,默认为1 | 二进制数,M范围从1到64, 存储数值范围从0到2^M-1 | 常用Boolean对应BIT,此时默认是1位,即只能存0和1 |
TINYINT | 1字节 | Byte | |
SMALLINT | 2字节 | Short | |
INT | 4字节 | Integer | |
BIGINT | 8字节 | Long | |
FLOAT(M, D) | 4字节 | 单精度,M指定长度,D指定小数位数。会发生精度丢失 | Float |
DOUBLE(M,D) | 8字节 | Double | |
DECIMAL(M,D) | M/D最大值+2 | 双精度,M指定长度,D表示小数点位数。精确数值 | BigDecimal |
NUMERIC(M,D) | M/D最大值+2 | 和DECIMAL一样 | BigDecimal |
字符串类型
数据类型 | 大小 | 说明 | 对应java类型 |
VARCHAR (SIZE) | 0-65,535字节 | 可变长度字符串 | String |
TEXT | 0-65,535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 | String |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
说明:varchar 可变长度是指 假设 设置了1000个字符的大小,实际占用了100个,那么就只开辟100个空间。不可变长度就是设置了1000,空间占用就是1000,没用上的就空着但是还是占用了。
日期类型
数据类型 | 大 小 | 说明 | 对应java类型 |
DATETIME | 8 字 节 | 范围从1000到9999年,不会进行时区的 检索及转换。 | java.util.Date、 java.sql.Timestamp |
TIMESTAMP | 4 字 节 | 范围从1970到2038年,自动检索当前时 区并进行转换。 | java.util.Date、 java.sql.Timestamp |
补充:时间戳默认1970年1月1日,(时间纪元)有兴趣的自行百度。
数据库的操作
显示当前数据库
语法:
创建数据库
语法:
说明:
示例:
使用数据库
语法:
删除数据库
语法:
说明:
数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除
示例:
表的操作
使用数据库
操作表之前需要先使用该数据库
查看表结构
示例+说明
创建表
语法
示例
删除表
语法
示例
表的增删改查(CRUD)
CRUD
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
新增数据
语法:
示例:
单行数据 +全列插入
多行数据+指定列插入
查询数据
语法
全列查询
--通常情况下 使用 * 进行全列查询
指定列查询
--指定列的顺序不需要按定义表的顺序来
查询字段为表达式
设置别名
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
示例:
去重查询
使用DISTINCT关键字对某列数据进行去重
示例:
排序查询
- ASC 为升序(从小到大)
- DESC 为降序(从大到小)
- 默认为 ASC
- null数据在排序中,视为最小的值
- 排序条件可以是表达式或者子查询
示例:
总结
where条件查询
比较运算符
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, ...) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符 |
逻辑运算符
运算符 | 说明 |
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
分页查询
用limit关键字
语法:
示例:
示例:
聚合函数查询
聚合函数
常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有
函数 | 说明 |
COUNT([DISTINCT] expr) | 返回查询到的数据的 数量 |
SUM([DISTINCT] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
GROUP BY子句
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:
使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中
示例:
HAVING 子句
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用
示例:
联合查询
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积
内连接
语法
示例
外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接
语法
示例
自连接
自连接是指在同一张表连接自身进行查询。
示例:
子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
单行子查询:返回一行记录的子查询
示例
多行子查询:返回多行记录的子查询
示例
合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用
示例
修改数据
语法
示例
删除数据
语法
示例
数据库约束
- NOT NULL - 指示某列不能为空
- UNIQUE - 保证某列的每行必须有唯一,不重复的。
- DEFAULT - 规定没有给列赋值时的默认值。
- PRIMARY KEY - 主键约束,与 NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 外键约束,保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。
索引
索引,相当于目录,它是一种特殊的文件包含着对数据表里所有记录的引用指针。可以帮助我们快速定位,检索数据。
注意:创建索引会占用额外的磁盘空间,插入火绒修改操作效率不高,通常建议使用在需要大量进行查询的场合。
使用方法:
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。
查看索引
示例:
创建索引
对于非主键、非唯一约束、非外键的字段,可以创建普通索引
示例
删除索引
示例
事务
试想一下,当你妈妈给你打生活费的时候,她给你转账但是数据库挂掉了,那边显示转账成功了,金额减少了2000,但是你的账户并没有增加2000。这个时候是不是就很难受,那么这个问题该怎么解决呢?
那就让这里两个操作要么同时成功,要么同时失败。这就是事务的逻辑。
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
使用
说明:rollback即是全部失败,commit即是全部成功。
示例:
【以上就是本文分享的全部内容,下一篇JDBC编程,敬请期待~~】