NoSQLMySQL(一) — MySQL学习路线、数据库的根基、关系型数据库、关键字表达、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、汉语数据问题、 核查集问题、web乱码问题

1 MySQL学习路线

  • 基本功阶段:MySQL数据库的基本操作(增删改查),以及部分高等操作(视图、触发器、函数、存储进度等)。
  • 优化阶段:怎么着加强数据库的频率,如索引,分表等。
  • 安插阶段:如何搭建真实的条件体系,如服务器集群,负载均衡等。

 

2 数据库的基础

2.1 什么是数据库?

  • 数据库:database,存储数据的仓库。
  • 数据库(专业定义):高效的储存和处理数量的介质(介质首假诺二种:磁盘和内存)。

 

2.2 数据库的分类?

  • 基于存储介质的不比
    • 关系型数据库(SQL)
    • 非关系型数据库(NoSQL)  

 

2.3 分化的数据库阵营中的产品有啥?

  • 关系型数据库:
    • 重型数据库:Oracle、DB2。
    • 中等数据库:SQL Server、MySQL等。
    • 袖珍数据库:access等。  
  • 非关系型数据库:
    • memached
    • mogodb
    • redis  

 

2.4 三种数据库阵营的差别?

  • 关系型数据库:安全(保存磁盘基本不容许丢掉),不难驾驭,比较浪费空间。
  • 非关系型数据库:效能高,不安全(断电会丢失)。

 

3 关系型数据库

3.1 什么是关系型数据库?

  • 关系型数据库:是一种建立在论及模型(数学模型)上的数据库。
  • 涉嫌模型:一种所谓建立在关乎的模子,关系模型包罗以下八个方面:
    • 数据结构:数据存储的题材,二维表(有行和列)。
    • 操作指令集合:所有SQL语句。
    • 完整性约束:表内数据约束,表与表之间约束(外键)。  

 

3.2 关系型数据的宏图?

  • 从需求仓储的数码要求中剖析,如若是一类数据(实体,比如人、书本等)应该设计成一张二维表,表是由表头(字段名)和数码部分(实际存储的数据单元)组成,如下图所示。  
表头 字段1 字段2
数据单元 数据1 数据2

 

 

 

  • 以实际案例来进展拍卖:分析一个教学系统,助教负责教学,教学生,在教室教学。
    • ①找出系统中的实体:助教表,学生表,班级表。
    • ②找出实体中应该留存的数额音讯:
      • 讲师:姓名,性别,年龄,身高,工资等。
      • 学生:姓名,性别,学好,学科等。
      • 班级:班级名字,图书馆编号等。 

 

      • 关系型数据库:维护的是实体内部,实体与实业之间的牵连。
      • 实业内部的沟通:每个学生都有姓名,性别,学号,学科,年龄等音讯。    
姓名 性别 学号 学科 年龄
张三 001 java 23
李四 002 MySQL  
王二   003 Linux 17

 

 

 

 

      • 第二行的享有字段,都是描述张三这几个学生(内部联系);第二列只可以存放性别(内部约束)。    
      • 关系型数据库的特点之一:如若表中对应的某部字段没有值(数据),可是系统如故要求分配空间,所以关系型数据库相比较浪费空间。    

 

      • 实体与实体之间的联系:每个学员属于某个班级,每个班级一定有多少个学生(一对多)。    
      • 学生表:      
姓名 性别 学号 学科 年龄
张三 001 java 23
李四 002 MySQL  
王二   003 Linux 17

 

 

 

 

      • 班级表:    
班级名称 教室编号
java001 A001
Linux002 B005

 

 

 

 

      • 竭泽而渔方案:在学生表中追加一个班级字段来指向班级(必须可以唯一的找到一个班级信息)    
姓名 性别 学号 学科 年龄 所属班级
张三 001 java 23 java001
李四 002 MySQL   MySQL005
王二   003 Linux 17 Linux002

 

 

 

 

      • 学员实体与班级实体之间的涉及:实体与实体之间的关联。    

 

4 关键字表达

  • 数据库:database。
  • 数据库系统:database
    system(DBS):是一种虚拟系统,将多种情节提到起来的名叫。DBS=DBMS+DB。
  • DBMS:数据库管理体系,database management system,专门管理数据库。
  • DBA:数据库管理员,database administrator。
  • 行/记录:row/record,本质是一个事物,都是指表中的一行(一条记下)。行是从构造角度,记录是从数据角度出发。
  • 列/字段:column/菲尔德,本质是一个事物。

 

5 SQL

  • SQL:Structured Query
    Language,结构化查询语言(数据主要以询问为主)。
  • SQL分为多少个部分:
    • DDL:Data Definition
      Language,数据定义语言。用来保安存储数据的构造(数据库,表),代表指令:create、drop、alter等。
    • DML:Data Manipulation
      Language,数据操作语言,用来对数据开展操作(数据表中的内容),代表指令:Insert、delete、update等。其中DML内部又单独开展了一个分拣:DQL(Data
      Query Language:数据查询语言,如select)。
    • DCL:Data Control
      Language,数据控制语言,首要承担权限管理,代表指令:grant、revoke等。  
  • SQL是关系型数据库的操作指令,SQL是一种约束,但不强制(类似于W3C),所以差其他关系型数据库产品(Oracle,MySQL等)内部可能有一些分寸的差别。

 

6 MySQL数据库

  • MySQL数据库是一种C/S结构的软件:客户端/服务端,若是想访问服务器必须透过客户端(服务器一直运行,客户端在须要使用的时候运行)。
  • 交互格局:
    • ①客户端连接认证:连接服务器,认证身份。  

NoSQL 1

    • ②发送SQL指令。 
    • ③服务器收到SQL指令,处理SQL指令,重返操作结果。
    • ④客户端接收结果,展现结果。 

NoSQL 2

    • ⑤断开连接(释放资源:服务器出现限制)。  

 NoSQL 3

 

7 MySQL服务器对象

  •  没有办法完全精通服务器内部的情节:只好粗略的去分析数据库服务器的内部结构。
  •  将MySQL服务器内部对象分为了四层:
    • 系统(DBMS)
    • 数据库(DB)
    • 数据表(Table)
    • 字段(Field)  

 

8 SQL的基本操作

  •  基本操作:CRUD。
  • 将SQL的基本操作按照操作对象开展分拣,分为三类,如下所示:
    • 库操作。
    • 表操作(字段)。
    • 数量操作。  

 

9 库操作 

  •  对数据库的增删改查。

9.1 新增多少库 

  •  基本语法

    create database 数据库名字 [库选项];

  • 库选项:用来约束数据库,分为四个挑选。

    • 字符集设定:charset/character set
      具体字符集(数据存储的编码格式)。
    • 核对集设定:collate 具体核对集(数据相比的平整)。    

 

  • 演示:创制一个数据库。

    — 单行注释,也足以用#
    # 创立数据库
    CREATE DATABASE mydatabase CHARACTER SET utf8;

NoSQL 4

 

  •  其实,数据库名字不可能使用紧要字(已经被运用的字符)或保留字(未来恐怕会动用的字符)。

 

  • 当创设数据库的SQL语句执行之后,发生了哪些?
    • ①在数据库系统中,扩大了相应的数据库信息。
    • ②会在保留数据的文书夹下:Data目录,创建一个对应数据库名字的公文夹。  

NoSQL 5

    • ③种种数据库下都有一个opt文件:保存了库选项。  

NoSQL 6

 

9.2 查看数据库

  • 基本语法

    • ①翻看所有数据库。  

    — 查看所有数据库
    show databases;

    • ②查看指定单位的数据库:模糊查询。  

    — 查看指定部分的数据库
    show databases like ‘pattern’; — pattern是至极方式%:表示格外多少个字符
    _:表示匹配单个字符

    • ③查看数据库的始建语句。  

    — 查看数据库的创建语句
    show create database 数据库名字;

 

  • 演示:查看所有数据库

NoSQL 7

 

  • 以身作则:查看指定名称为test的数据库。

NoSQL 8

 

  • 示范:查看含有t名称的数据库。

NoSQL 9

 

  • 演示:突显mydatabase数据库的创导语句。

NoSQL 10

 

9.3 更新数据库

  • 数据库名字是不得以变动的,不然怎么定位哪一个数据库,换句话说,原来有一个数据库名为test,你现在将其它数据库改为test,那样好啊?
  • 数据库的修改仅限库选项:字符集和核对集(核查集依赖于字符集)。

 

  • 主干语法

    alter database 数据库名字 [库选项]。
    character set [字符集]
    collate 绞对集

 

  • 示范:修改mydatabase数据库的默许编码。

NoSQL 11

 

9.4 删除数据库

  • 抱有的操作中:删除是最简易的。
  • 宗旨语法

    — 删除数据库
    drop database 数据库名字;

 

  • 示例:删除mydatabase数据库。

NoSQL 12

 

  • 当删除数据库语句执行之后,暴发了怎么?
    • 在数据库内部看不到对应的数据库。
    • 在相应的数据库存储的公文夹内,数据库名字对应的文件夹也被删除(级联删除:里面的数目库表一起被剔除)。  

 

  • 留神:数据库的去除不是闹着玩的,不要擅自的删减,应该先进行备份操作,然后才考虑是还是不是删除(删除不可逆)。

 

10 表操作

  •  表和字段是一体的。

 

10.1 新增数据表

  • 基本语法

    — 新增多少表
    create table [if not exists] 数据表名字(

    字段名字 数据类型,
    字段名字,数据类型   -- 最后一行不不要逗号
    

    )[表选项];
    if not exists:若是表名不存在,那么就创办,否则不履行创设。
    表选项:控制表的显示。
    字符集:charset/character set 具体字符集;–有限协理表中多少存在的字符集。
    核对集:collate 具体核对集。
    存储引擎:engine 具体的囤积引擎(innodb和myisam)

 

  • 演示:创制一个名为student的表。

NoSQL 13

    • 任何一个表的规划都必须指定数据库。  
    • 解决方案:
      • ①显示指定表所在的数据库。  

    — 呈现的指定表所在的数据库
    create table 数据库名.表名(
    字段1 数据类型,
    字段2 多少类型
    );

NoSQL 14

      • ②隐式的指定表所属数据库:先进入到某个数据库环境,然后那样创立的数量库表自动归属到某个数据库。    

    — 进入到数据库环境
    use 数据库名字;
    — 成立数量表
    create table 数据表名(
    字段1 数据类型,
    字段2 数码类型
    );

NoSQL 15

 

  • 当成立数据库的SQL指令执行之后,到底暴发了什么?
    • 点名数据库下已经存在对应的表。
    • 在数据库对应的文书夹下,会发生对应表的构造文件(和储存引擎有关)。  

NoSQL 16

 

10.2 查看数据表

  • 数据库能查看的艺术,表都可以查阅。

 

  • 中央语法

    • 查阅所有表  

    — 查看所有表
    show tables

    • 翻看部分表  

    — 查看部分表
    show tables like ‘pattern’;

    • 查看表的创制语句  

    — 查看表的创建语句
    show create table 表名;

    • 查看表结构:查看表中的字段音讯  

    — 查看表结构
    ①desc 表名;
    ②describe 表名;
    ③show columns from 表名;

 

  • 演示:查看所有表

NoSQL 17

 

  • 示范:查看创制student表的讲话。

NoSQL 18

 

  • 演示:查看表结构。

NoSQL 19

 

10.3 修改数据表

  • 表本身存在,还带有字段,所以表的修改分为七个部分:修改表本身和改动字段。

 

  • 修改表本身:

    • 表名  
      • 基本语法:    

    — 修改表名
    rename table 老表名 to 新表名;

      • 演示:将student表的名字改为stu.    

NoSQL 20

 

    • 表选项:字符集,核查集和存储引擎。  

    alter table 表名 [表选项];

      • 示范:修改stu表的编码为gbk          

NoSQL 21

 

  • 修改字段

    • 增产字段    

    alter table 表名 add [column] 字段名 数据类型[列属性][地点];
    地点:字段名可以存在表中的妄动地方

     first:第一个位置
     after:在哪个字段之后,after 字段名,默认在最后
    

NoSQL 22

 

    • 修改字段  

    alter table 表名 modify 字段名 数据类型[列属性] [位置];

NoSQL 23

 

    • 重命名字段  

    alter table 表名 change 旧字段名 新字段名 数据类型[列属性][位置];

NoSQL 24

 

    • 去除字段  

    alter table 表名 drop 字段名;

NoSQL 25

 

10.4 删除数据表

  • 骨干语法

    — 删除表
    drop table 表名1,表名2,……;

NoSQL 26

 

  • 当删除数据表的一声令下执行之后暴发了如何?
    • ①在表空间中,没有了指定的表(数据也不曾了)。
    • ②在数据库对应的文书夹下,表对应的文书(与仓储引擎有关)也会被去除。  

NoSQL 27

 

11 数据操作

11.1 新增多少

  • 有两种方案

    • ①给全表字段插入数据,不必要指定字段列表:须求数据的值现身的职责必须和表中设计的字段出现的依次一致,凡是非数值的数额,都亟需利用引号包裹。  

    insert into 表名 values (值列表)[,(值列表)]; — 能够一回性插入多条记下

NoSQL 28

    • ②给部分字段插入数据:需要选定字段列表,字段列表出现的顺序和字段的相继非亲非故,不过值列表的相继必须和选定的字段的逐一一致。

    insert into 表名 (字段列表) values (值列表); 

NoSQL 29

 

11.2 查看数据表

  • 宗旨语法

    select */字段列表 from 表名 [where 条件] ;

 

  • 示范:查看学生的有着音信

NoSQL 30

 

  • 演示:查看学生的姓名和性别

NoSQL 31

 

11.3 更新数据

  • 主导语法

    update 表名 set 字段1=值1,字段2=值2,……[where 条件];

 

  • 以身作则:更新id=1的年龄为32

NoSQL 32

 

11.4 删除数据

  • 着力语法

    delete from 表名 [where 条件];

 

  • 演示:删除name为zhangsan的学员音信

NoSQL 33

 

12 中文数据问题

  • 中文数据问题本质是字符集问题。
  • 处理器只辨认二进制,人类越来越多的是甄别标志,所以必要有个二进制和字符的附和关系(字符集)。

 

  • 客户端向服务器插入中文数据:未能如愿

NoSQL 34

  • 原因:\xD5\xC5\xC8\FD
    代表的是“”张三”在现阶段编码(字符集)下的二进制转换为十六进制,多个汉字–>多少个字节(GBK)。

NoSQL 35

  • 报错:服务器并未识别对应的多个字节,服务器认为数额是utf8的,一个汉字对应两个字节;所以服务器读取多少个字节转换成汉字,败北了;剩余的再读几个字节,最后战败。
  • 不无的数据库服务器认为(表现)的片段特点是经过服务器端的变量来保存的,系统先读取自己的变量,看看应该怎么表现。

 

  • 查看服务器识其余所有字符集

    show character set;

NoSQL 36

 

  • 服务器默许的和客户端打交道的字符集。

    show variables like ‘character_set%’;

NoSQL 37

  • 题目来自:客户端数据只好是GDK,而服务器认为是utf8。
  • 竭泽而渔方案:改变服务器。默认的收到字符集为GBK。

    — 修改服务器认为的客户端数据的字符集为GBK
    set character_set_client=gbk;

NoSQL 38

  • 安排中文的功力

NoSQL 39

  • 查看数据效果:照旧是乱码

NoSQL 40

  • 原因:数据来源是服务器,解析数据是客户端(客户端只识别GBK:只会五个字节一个汉字),可是服务器给的数据是UTF8,所以造成乱码。
  • 杀鸡取卵方案:修改服务器给客户端的数码字符集为GBK。

    set character_set_results=gbk;

NoSQL 41

  • 翻看数据效果

NoSQL 42

 

  • set
    变量=值;那样修改只是会话级别(当前客户端当次连接有效,关闭失效)

NoSQL 43

  • 设置服务器对客户端的字符集的咀嚼,如果根据上边的章程,太忙碌了。可以接纳快速形式。

    set names 字符集;

NoSQL 44

 

13 核查集问题

  • 核对集:数据相比较的方式。
  • 核查集有二种办法:
    • _bin:binary,二进制比较,取出二进制位,一位一位的相比。区分轻重缓急写。
    • _cs:case sensitive,大小写敏感,区分轻重缓急写。
    • _ci:case insensitive.大小写不敏感,不区分轻重缓急写。  

 

  • 查阅数据库所支撑的绞对集

    show collation;

NoSQL 45

NoSQL 46

NoSQL 47

NoSQL 48

 

  • 核查集应用:只有当数码爆发比较的时候,核对集才会生效。

 

14 Web乱码问题

  • 动态web由多少个部分组成:浏览器、web服务器(如汤姆(Tom)cat等)、数据库服务器,多少个部分都有自己的字符集(尤其是华语),数据须要在七个部分之间来回传递,很简单发生乱码。
  • 比方解决乱码问题:统一编码(三码合一)。
网站地图xml地图