MySQL数据库

现阶段学习的是单机的数据库!

数据库系统概述:
  数据库系统(DBMS)是指一个能为用户提供信息服务的系统。它实现了有组织地,有动态地存储大量相关数据的功能,提供了数据处理和信息资源共享的便利手段。

关系型数据库:

  关系型数据库系统(RDBMS)是指使用了关系模型的数据库系统。关系模型中,数据时分类存放的,数据之间可以有联系。

  关系型数据库可以有效组织和管理大量复杂的数据,所以关系型数据库才是最重要的数据库产品。

  大型系统使用的都是数据库集群!

主流的关系型数据库:
  1.DB2(IMB公司开发,价格昂贵,用于电信,金融领域,跨平台)

  2.Oracle(甲骨文公司研发,价格亲民,不开放源代码,跨平台)

  3.MySQL(现阶段学习的数据库,开源,跨平台)

  4.SQL Server(兼容性差,早期不跨平台,不支持Linux系统)

NoSQL:
  NoSQL数据库指的是数据分类存放,但是数据之间没有关联关系的数据库系统,是关系型数据库的补充。

  适用于秒杀库存,登录信息,消息通知,新闻篇幅等保存海量低价值的信息。

  类似Redis数据库,单线程,用于解决关系型数据库多线程并行多发引发的问题,读写速度快。

主流的NoSQL数据库:
  1.Redis:用内存保存数据的数据库,运行速度快

  2.MemCache:用内存保存数据的数据库

  3.MongoDB:用硬盘保存数据,保存海量低价值的信息

  4.Neo4J:用硬盘保存数据

 

MySQL专栏:

  登录数据库:mysql -urooot -p   显示存放不同数据的文件(逻辑空间):show database;

MySQL用户权限:

  需要用到MySQL的图形客户端:Navicat 

SQL语言分类:

  DML:添加,修改,删除,查询

  DCL:用户,权限,事务

  DDL:逻辑库,数据表,视图,索引

  SQL语句必须以分号结尾

DDL创建逻辑库:

  CREATE DATABASE 逻辑库名称;SHOW DATABASES;DROP DATABASE 逻辑库名称;

DDL创建数据表:

  USE 逻辑空间;

  CREATE TABLE 数据表(

    列名1 数据类型 【约束】【comment 注释】 

    列名2 数据类型 【约束】【comment 注释】

)【comment = 注释】

DDL数据表的其他操作:

  SHOW tables;  DESC students;(查看表内容) SHOW CREATE TABLE student;(查看student表格的创建语句)  DROP TABLE student;(删除数据表)

DDL数据类型:
  浮点数容易丢失精度,在使用float的时候容易造成数据的不精确。可以使用DECIMAL代替。
使用date数据类型年月日之间要加“-”号

 数字数据类型:

    tinyint:1字节  smallint:2字节  mediumint:3字节  int:4字节  bigint:8字节  float:4字节  double:8字节  decimal:精确精度

 字符串数据类型:

    char:1-255字符(需要加括号确定长度)  varchar:1-65535字符(需要加括号确定长度)  text:不确定长度  注:一个汉字等于2个字符。

 日期数据类型:
    date:3字节(年月日之间需要 加-)  time:3字节  year:1字节  datetime:8字节  timestamp:4字节(时间戳,1970年后)

 枚举数据类型:
    ENUM:枚举

DDL修改数据表结构:

 添加字段:
  alter table 表名

  add 列1 数据类型【约束】【command 注释】,

  ...;

 修改字段: 

  alter table 表名

 

  modify 列1 数据类型【约束】【command 注释】,

  ...;

 修改字段名字:
  alert table 表名

  change 列1(原名和要修改的名字) 数据类型【约束】【command 注释】,

  ...;

 删除字段:
  alert table 表名

  drop 列1,

  ...;

范式:
    第一范式:原子性(数据库的基本要求)数据表的每一项都是不可分割的基本数据,同一列中不能有多个值,也不能存在重复的属性。

    例:班级—>高三年纪一般  可以再划分为 高三和一班

    第二范式:唯一性  数据表汇总的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列来存储唯一标识,这个唯一属性列被称作主键列

    例:  学号  考试成绩  日期

        230   58    2018-07-15

        230   58    2018-07-15    该同学在同一天进行两次考试,数据一致,不能区别

     第三范式:关联性  每列都与主键有直接关系,不存在传递依赖

    例:爸爸  儿子  女儿  女儿的玩具  女儿的衣服(女儿的玩具和衣服都与女儿有依赖,但是这个表中儿子和女儿都是依赖于爸爸的,需要重新建一个女儿的表来存放玩具和衣服)

字段约束:

    主键约束:primary key 字段值值唯一,且不能为null(auto_increment)    非空约束:not null  字段值不能为null

    唯一约束:unique  字段值唯一,且可以为null    外键约束:foreign key  保持关联数据的逻辑性

    外键约束使用:创建在子表上 foreign key (字段名)reference 表名(字段名)

外键约束的闭环问题:
    如果形成外键闭环,我们将无法删除任何一张表的记录(避免使用外键约束)

设置默认值:

    default 

索引机制:(二叉树的二分查找)
  创建索引:在创建表格语句中,加入 index [索引名称(没有则默认为字段值)] (字段),

  添加索引:create index 索引名称 on 表名(字段)     alert table 表名称 add index  [索引名](字段)  ;

  查看索引:show index from 表名;

  删除索引:drop index 索引名称 on 表名;

 

习惯:

  在表名前面添加前缀方便识别如:t_表示表 v_表示视图等

 

DML数据库的增删改查:
  查询语句:
select *(as “别名”可选)from 表名;

   数据分页:select * from 表名  limit 开始位置,偏移量;  执行顺序from—>select—>limit

   数据排序:ASC升序(默认) DESC(降序)  

      例:select emane,sal,edept from t_emp order by  edept asc,sal desc;(每个部门的工资按降序排序)  执行顺序:from—>select—>order by—>limit

   去除重复字段:
      使用distinct关键字,distinct关键字在select子句中只能查询一列数据,如果查询多列,去除重复记录就会失效。

条件查询:

  语句:select...from...where 条件【and | or】条件...;

    函数:IFNULL(comm,0)判空,如果为空则赋0  DTAEDIFF(day1,day2)算两个日期偏差多少天

  where语句会用到的四类运算符:

      1.数学运算符 2.比较运算符 3.逻辑运算符 4.按位运算符

    数学运算符:

      1.+-*/% 2.in

    比较运算符:

      1.is null 为空 2.is not null 不为空 3.between and 范围 4.like 模糊查询(例子:like“A%”) 5.REGEXP 正则表达式

    逻辑运算符:

      1.and 与 2.or 或 3.not 非 4.xor 异或 例:age>=18 xor sex = "男"(年龄大于18的男性,年龄小于等于18的女性都为false)

    按位运算符:

      1.& 按位与 2.| 按位或 3.~ 按位取反 4.^ 按位异或 5.<< 左移 6.>> 右移

  使用where子句的注意事项:
      where子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最多的条件写在最左侧。

      各种子句的执行顺序:from——>where——>select——>order——>limit

MySQL数据库

上一篇:mysql简单脚本


下一篇:MySQL数据库学习