MySQL RDBMS基础
第1章 RDBMS概念
-
什么是数据库(Database):从字面讲,就是存放数据的仓库;我们通常所说的数据库,是指数据库管理系统(Database Management System简称DBMS),即存放数据并对其进行管理操作的系统。RDBMS即关系型数据库。
-
数据库特点:
①降低冗余度;
②数据一致性;
③数据共享性;
④数据约束性;
⑤数据完整性;
⑥数据安全性;
-
数据模型:
①层次模型;
②网状模型;
③关系模型;
④对象模型;
-
关系模型把世界看作是由实体和联系组成的。
-
表的内部:数据被分成列(column)和行(row);每一行代表一个实体,每一列代表某个实体的一个属性。
-
关系型数据库(RDBMS)中,用外键(Foreign Key)表达表间的联系。
-
三种基本关系类型:
①一对一;
②一对多;
③多对多;
-
什么是SQL:SQL是结构化查询语言,操作数据库必须用SQL查询语言。
SQL语句:
①定义语言(DDL);
②数据查询语言(DQL);
③数据操作语言(DML);
④数据控制语言(DCL);
第2章 管理数据库和表
-
数据库的创建和使用:
创建数据库:create database 库名;
使用数据库:use 库名;
删除数据库: dorp database 库名;
-
数据类型:
整数数据类型
类型
大小
范围(有符号)
范围(无符号)
用途
TINYINT
1字节
(-128,127)
(0,255)
极小整数值
SMALLINT
2字节
(-32 768,32 767)
(0,65 535)
小整数值
MEDIUMINT
3字节
(-8 388 608,
8 388 607)
(0,16 777 215)
小整数值
INT
4字节
(-2 147 483 648,
2 147 483 647)
(0,4 294 967 295)
整数值
BIGINT
8字节
(-9 233 372 036 854 775 808,
9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)
大整数值
浮点数据类型
类型
大小
范围
精度
用途
FLOAT
4字节
(-3.40E-38,3.40E+38)
7位小数
单精度浮点数
DOUBLE
8字节
(-8 388 608,
8 388 607)
15位小数
双精度浮点数
DECIMAL(M,D)
17字节
(-10的38次方-1 ,
10的38次方-1)
30位小数
大浮点数
NUMERIC(M,D)
同DECIMAL
字符串数据类型
类型
大小
范围
用途
CHAR(N)
N
0-255
字符型
VARCHAR(N)
N
0-65535
字符型
二进制数据类型
类型
大小
范围
用途
TINYBLOB
255
0-255
二进制大对象
BLOB
65K
0-65KB
二进制大对象
MEDIUMBLOB
16M
0-16M
二进制大对象
LONGBLOB
4G
0-4G
二进制大对象
逻辑数据类型
类型
范围
用途
BOOLEAN
0-1
MYSQL没有BOOLEAN类型,但BOOLEAN类型可以创建,在MYSQL中BOOLEAN别自动定义为TINYINT(1)
日期数据类型
类型
大小
格式
范围
YEAR
1字节
YYYY
1901 - 2155
DATE
3字节
YYYY-MM-DD
1000-01-01 - 9999-12-31
TIMESAMP
4字节
YYYY-MM-DD HH:MM:SS
1970-01-01 00:00:01 - 2038
DATETIME
8字节
YYYY-MM-DD HH:MM:SS
1000-01-01 00:00:00 - 9999-12-31 23:59:59
-
管理表:
创建表:creata table 表名(<列名> <列的数据类型> [<列的约束>]);
删除表:drop table 表名;
创建和删除索引:create index 索引名 on 表名(列1,列2, ...);
alter table 表名 drop index 索引名;
修改列: alter table 表名 change 原列名 新列名 新列的约束;
创建列: alter table 表名 add column 取列名 数据类型 约束;
alter table 表名 add 取列名 数据类型 约束;
删除列:alter table 表名 drop column 列名;
alter table 表名 drop 列名;
数据库区分大小写;
标识符命名标准:驼峰标准;
数据库中没有字符类型,只有字符串类型;
数据库中" "仅表示字符,' '表示字符串;
char为定长(定多少放多少),varchar为变长(放多少是多少),char 不足的用空格填补;
数据量小,查询用定长;量大,查询用变长;(效率问题,长度确定,不用判断该字符串是否结束。);
第3章
保证数据完整性
-
数据完整性实施方法:①实体完整性;②域完整性;③引用完整性;④用户自定义完整性;
-
数据完整性的实现:
数据完整性的实现:
非空约束 not null;
主键约束 Primary Key(列名);
外键约束 alter table 从表名
add constraint 从表列的外键取名 Foreign Key (从表原列名)
references 主表名 (主表的列名);
唯一约束 Unique;
默认值 default;
自动增长 auto_increment;
第4章
使用DML语句更改数据
数据的增、删、改:
插入单行记录:insert into 表名 values (值列表);
插入多行记录:insert into 表名1 select 列名 from 表名2;(实质是部分或全部表数据的复制)
表数据的复制:select 列名 into 新表名 from 表名;
更新已有数据:update 表名 set (新列值列表) where (过滤条件);
更新删除:update 表名 set 列名 = null where 序号列 = 序号值;(where后是过滤条件)
删除数据:delete from 表名 where (过滤条件);删除并记录日志。
清空表: truncate table 表名;清空表,初始化,不记录日志。
删除外键:alter table 从表名 drop foreign key 外键名;
友情提示:1、当表与表之间建立有外键约束时,无法对从表中的数据进行操作也无法删除从表,但可以对主表数据进行操作,要对从表数据进行操作必须删除外键;
2、最好是将所有的表建立好后,再统一建立外键约束,前提是理清表间联系;(1外键的建立要确保关联表存在;2便于增删改操作;)
第5章
简单的数据查询
投影操作、选择操作、排序操作:
投影:select 列名列表 from 表名;(所有列可用“*”表示;列名间用“,”隔开;)
select 列名列表 from 表名 limit 序号,返回的行数;(limit从0计数,limit后的值只能大于等于0整数,0不显示,无实际意义。)
排除重复数据:select distinct 列1 from 表;(排除与列1重复的记录行)
select distinct 列1,列2 from 表;(排除与列1,列2都重复的记录行)
选择操作:select 列名列表 from 表 where 条件;
多条件的选择操作:select 列名列表 from 表 where 条件1 link 条件2; -- 同时满足条件1,条件2,多条件选择还可用and和or
执行范围测试:select 列1,列2 from 表
where 列3 between 下限 and 上限;
不连续的范围测试:select 列1,列2 from 表 where 列3 in(值集合); -- 满足其中之一,常用于取不连续的值
模糊查询(like):比较实用的过滤方式,利用通配符实现模糊查询.
select 列1,列2 from 表 where 列3 like 模式;
通配符: % 含意:包含0个或更多的任意字符串 使用情况:不确定长度
_(下划线) 含意:任何单个字符(只能有1个) 使用情况:确定长度
处理空值数据:select 列1,列2 from 表 where 列3 is not null; -- 测试列3不为空值的情况
select 列1,列2 from 表 where 列3 is not null; -- 测试列3为空值的情况
排序:根据ASC码排序。
单列排序:select 列1,列2 from 表 order by 列1; -- 自然排序(顺序从小到大)
多列排序:select 列1,列2 from 表 order by 列1,列2,列3... desc; -- 倒序(顺序从大到小)
友情提示:注意筛选条件;
范围查询均可用not排除范围,但不建议使用,因为这样会使操作繁琐降低效率;
书写顺序:select、from、where、order by;
执行顺序: from、where、select、order by;
比较运算符中没有“==”,“=”表示恒等;
运算符 | 含义 |
---|---|
= | 检测值是否于另一个值相等 |
!==、<>、^= | 检测值是否不等于另一个值 |
> | 检测左边的值是否大于右边的值,是则为真,否则为假 |
>= | 检测左边值是否大于等于右边值,是则为真,否则为假 |
< | 检测左边的值是否小于右边的值,是则为真,否则为假 |
<= | 检测左边值是否小于等于右边值,是则为真,否则为假 |
第6章
聚合函数与分组
聚合函数的目的:统计。
常用聚合函数:floor: 取整函数;
count: 统计行数;
sum: 合计单个列中所有值;
avg: 某列的平均值;
max: 返回结果集中所有值的最大值;
min:返回结果集中所有值的最小值;
执行行和列的计数:select count (计数规范) from 表名;
计数规范 含义
计数规范关键字: * (所有列) 计数所有选择的行,包括null值;
all (通常不书写) 计数指定列的所有非空值行;
distinct (去重复) 计数指定列的所有唯一的非空值行;
返回列合计值:select sum (计数规范) from 表名; -- 计数规范不能使用“*”,合计的必须是值。
获取列平均值: selct avg (计数规范) from 表名; -- 计数规范同sum
返回最大值和最小值:select max (最大值规范) from 表名; -- 不存在 *、all、distinct 规范
select min (最小值规范) from 表名; --不存在 *、all、distinct 规范
过滤分组数据: select 列1,聚合函数(聚合函数规范) from 表名
where 过滤条件
group by 列1;
使用having子句: 对聚合函数计算的值进行过滤。
having子句放在group by 子句之后,形式为: having 过滤条件;
书写顺序:select、from、where、group by、order by、having;
执行顺序:from、where、group by、select、having、order by;
友情提示:使用group by分组情况:1、非聚合列用 group by 分组;
2、一个非聚合,一个聚合函数,必须用group by 分组;
3、有having 子句,必须用 group by 分组;
第7章
子查询与组合查询
子查询:嵌套在主查询中的查询;
子查询也称为内部查询,而包含子查询的语句称外部查询;
内部查询在上面的6个子句中都可以使用,但最常见的是在select、where 子句中使用;
子查询的两个类别: 相关子查询 和 非相关子查询;
相关子查询依赖于外部查询,有多少行记录就执行多少次;
非相关子查询能独立执行,一般只执行一次; (从效率来讲,首用非相关子查询。)
子查询的使用:在where 子句中嵌套
1、all -- 多条件同时成立,相当于and,返回结果多值;
子查询结果全部逐一比较,都满足条件。
2、any -- 满足其中一个条件,相当于or,返回结果多值;
3、exists / not exists -- 后面必须跟上非相关子查询,条件判断(相当于if) 若该查询没有结果,相当于false;
子查询作为计算列:select column1, (子查询) column2 from 表名;
where 子句中的子查询:select column1 from table1 where column2 = (非相关子查询);
返回多个结果的子查询:select column1,column2 from table
where column3 in (子查询);
第8章
表连接
表连接:将多个表连在一起实现查询效果;
原理: 采用笛卡尔乘积,又称为横向连接;
基本分类:1、内连接 [inner] join -- inner可忽略,仅显示表与表之间有关联的部分;
2、外连接 left [outer] join -- outer可忽略,显示左侧表的所有记录行;
right join -- 显示右侧表的所有记录行;
3、自连接(内、外连接特例) -- 主、外键在同一张表;
join 后跟on 表与表之间的连接关系;
使用多表相等连接:select * from table1
join table2
on table1.column1 = table2.column2
join table3
on table1.column3 = table3.column4;
使用非相等连接:select * from table1,table2
where table1.column1 < table2.column2;
左外连接:select * from table1
left join table2
on table1.column1 = table2.column2;
右外连接:select * from table1
right join table2
on table1.column1 = table2.column2;
第9章
数据库设计
目标:1、数据库设计步骤
2、ER建模
3、范式理论
为什么需要设计数据库:1、降低冗余度,节约数据的存储空间
2、保证数据完整性
3、方便进行数据库应用系统开发
数据库设计过程:1.规划阶段
2.需求分析
3.概念设计
4.逻辑设计
5.物理设计
6.数据库的实现
7.数据库的运行与维护工作
1.规划阶段
8.概念设计----ER建模
ER:实体(Entity)关系(Relation
E-R图元素
E-R(Entity-Relationship)实体关系图
矩形 代表实体,一般为名词
椭圆 代表属性,一般为名词
菱形 代表关系,一般为动词
数据规范化