MySQL RDBMS基础

MySQL RDBMS基础

第1章 RDBMS概念

  1. 什么是数据库(Database):从字面讲,就是存放数据的仓库;我们通常所说的数据库,是指数据库管理系统(Database Management System简称DBMS),即存放数据并对其进行管理操作的系统。RDBMS即关系型数据库。
  2.  

     

    数据库特点:

    ①降低冗余度;

    ②数据一致性;

    ③数据共享性;

    ④数据约束性;

    ⑤数据完整性;

    ⑥数据安全性;

  3.  

    数据模型:

    ①层次模型;

    ②网状模型;

    ③关系模型;

    ④对象模型;

  4. 关系模型把世界看作是由实体和联系组成的。
  5. 表的内部:数据被分成列(column)和行(row);每一行代表一个实体,每一列代表某个实体的一个属性。
  6. 关系型数据库(RDBMS)中,用外键(Foreign Key)表达表间的联系。
  7.  

    三种基本关系类型:

    ①一对一;

    ②一对多;

    ③多对多;

  8.  

    什么是SQL:SQL是结构化查询语言,操作数据库必须用SQL查询语言。

    SQL语句:

    ①定义语言(DDL);

    ②数据查询语言(DQL);

    ③数据操作语言(DML);

    ④数据控制语言(DCL); 

第2章 管理数据库和表

  1. 数据库的创建和使用:

    创建数据库:create database 库名;

    使用数据库:use 库名;

    删除数据库: dorp database 库名;

  2. 数据类型:

    整数数据类型

    类型

    大小

    范围(有符号)

    范围(无符号)

    用途

    TINYINT

    1字节

    (-128127)

    (0255)

    极小整数值

    SMALLINT

    2字节

    (-32 76832 767)

    (065 535)

    小整数值

    MEDIUMINT

    3字节

    (-8 388 608

      8 388 607)

    (016 777 215)

    小整数值

    INT

    4字节

    (-2 147 483 648

      2 147 483 647)

    (04 294 967 295)

    整数值

    BIGINT

    8字节

    (-9 233 372 036 854 775 808

    9 223 372 036 854 775 807)

    (018 446 744 073 709 551 615)

    大整数值

     

    浮点数据类型

    类型

    大小

    范围

    精度

    用途

    FLOAT

    4字节

    (-3.40E-383.40E+38)

    7位小数

    单精度浮点数

    DOUBLE

    8字节

    (-8 388 608

      8 388 607)

    15位小数

    双精度浮点数

    DECIMAL(M,D)

    17字节

    (-1038次方-1 ,

      1038次方-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类型可以创建,在MYSQLBOOLEAN别自动定义为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

     

  3. 管理表:

    创建表: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 列名;

 

  1.  

数据库区分大小写;

标识符命名标准:驼峰标准;

数据库中没有字符类型,只有字符串类型;

数据库中" "仅表示字符,' '表示字符串;

char为定长(定多少放多少),varchar为变长(放多少是多少),char 不足的用空格填补;

数据量小,查询用定长;量大,查询用变长;(效率问题,长度确定,不用判断该字符串是否结束。);

 

第3章

保证数据完整性

  1. 数据完整性实施方法:
    ①实体完整性;
    ②域完整性;
    ③引用完整性;
    ④用户自定义完整性;
  2. 数据完整性的实现:

数据完整性的实现:

非空约束 not null;

主键约束 Primary Key(列名);

外键约束 alter table 从表名

                     add constraint  从表列的外键取名 Foreign Key (从表原列名)

                         references 主表名 (主表的列名);

唯一约束 Unique;

默认值 default;

自动增长 auto_increment;

 

第4章

使用DML语句更改数据

  1.  

数据的增、删、改:

插入单行记录: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.规划阶段

规划阶段的三个步骤
–    系统调查:
        对企业组织作全面的调查,画出组织层次图,以了解企业的组织结构
–    可行性分析
        从技术、经济、效益、法律等方面对建立数据库的可行性进行分析;写出可行性分析报告;组织专家进行讨论其可行性
–    确定数据库系统的总目标和制定项目开发计划
 
2.需求分析
需求分析工作
分析用户活动产生,产生业务流程图
确定系统范围,产生系统范围图
分析用户活动涉及的数据,产生数据流图
–分析系统数据,产生数据字典
 
3 .概念设计
为什么需要概念设计?
概念设计的主要步骤
进行数据抽象,设计局部概念模式
将局部概念模式综合成全局概念模式
评审
 
4.逻辑设计
数据模型映射
 
5. 物理设计
什么是数据库的物理结构?
物理设计的步骤
存储记录结构设计
确定数据存放位置
存取方法的设计
完整性和安全性考虑
程序设计
 
6.数据库的实现
实现数据库应做的主要工作
DDL定义数据库结构;
组织数据入库
编制与调试应用程序;
数据库试运行。
功能测试
性能测试(时空代价)
 
7.数据库的运行与维护工作
数据库的转储和恢复
数据库安全性、完整性控制
  数据库性能的监督、分析和改进
数据库的重组织和重构造

 

8.概念设计----ER建模

为什么要用ER模型
通用的数据库建模的方法
与具体数据库无关
什么是ER模型

ER:实体(Entity)关系(Relation

 

E-R图元素

E-REntityRelationship)实体关系图

矩形    代表实体,一般为名词

椭圆    代表属性,一般为名词

菱形    代表关系,一般为动词

 

数据规范化

 
仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构
在具有关系的实体之间,存在着函数依赖(插入异常,删除异常,修改时数据冗余)
Dr E.F.codd最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:
第一范式(1st NFFirst NormalFromate)
第二范式(2nd NFSecond NormalFromate)
第三范式(3rd NFThird NormalFromate)
 
第一范式
 
在所有范式中,第一范式是最重要的。它提供了建立其它范式的基础,并且代表了表的核心特性。为遵从第一范式,一个表必须满足如下需求:
一个行的每个列必须是原子性的,即任何给定行的列只能包含一个值。
表中的每一行必须包含相同数量的列。假如每个列只能包含一个值,意味着每行必须包含相同数量的值。
一个表中的所有行必须是不同的。虽然行可能包含相同的值,但是每一行做为一个整体必须在表中是唯一的。
–总结:行不重复,列不可再分。
 
第二范式
 
•第二范式在第一范式的基础上进行了扩展。为遵从第二范式,表必须满足如下需求:
–表必须符合第一范式。
–表中的所有非主键列必须依赖于整个主键列。
   第二范式要求每个表只描述一件事情(一个实体)
 
第三范示
如果一个关系满足2NF,并且除了主键以外的其他列都不互相依赖,则满足第三范式(3NF
 
小结
范式一
列不可再分(值必须唯一),行不可重复(定义主键)
范式二
非主键列必须依赖于主键列(非主依主)
范式三
非主键列之间必须相互独立(非主独立)
PS:第一范式必须满足,而第二、第三范式可以违反。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值