Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

什么是视图

视图(view)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不存在数据库中真实存在,行和列数据来自定义视图的查询中使用的表,并且是在使用时动态生成的。

使用视图的优势

  • 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集
  • 安全:使用视图的用户只能访问他们被允许查询的结果集,对应的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现
  • 数据独立:一单视图的结构确定了,可以屏蔽表结构变化对用户的影响、源表增加列队视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响

创建与修改视图

note

MySQL InnoDB 引擎特性

  1. 自增长列
  2. 外键约束
  3. 主键和索引

自增长列

数据自增

当向设置了自增长的列插入数据时如果插入值为 null 或 0 则会插入自增后的值,默认起始值为 1,当有数据时默认为当前列最大索引数+1

create table t1
(
    i    smallint not null auto_increment,
    name varchar(10),
    primary key (i)
);
insert into t1 (i, name)
values ( null
       , 'dudulu');
insert into t1 (i, name)
values ( 0
       , 'dudulud');
select * from t1;
mysql> select * from t1;
+---+---------+
| i | name    |
+---+---------+
| 1 | dudulu  |
| 2 | dudulud |
+---+---------+
2 rows in set (0.01 sec)

手动设置自增初始值

note

算术运算符

运算符 作用
+ 加法
- 减法
* 乘法
/,DIV 除法,返回商(div 只保留整数)
%,MOD 除法,返回余数
select 0.1+0.3333,0.1-0.3333,0.1*0.3333,1/2,1/0,1%2,1 div 2,1 mod 2;
+------------+------------+------------+--------+------+------+---------+---------+
| 0.1+0.3333 | 0.1-0.3333 | 0.1*0.3333 | 1/2    | 1/0  | 1%2  | 1 div 2 | 1 mod 2 |
+------------+------------+------------+--------+------+------+---------+---------+
|     0.4333 |    -0.2333 |    0.03333 | 0.5000 | NULL |    1 |       0 |       1 |
+------------+------------+------------+--------+------+------+---------+---------+
1 row in set, 1 warning (0.00 sec)

比较运算符

note

JSON 简介

JSON 类型是 JavaScript Object Notation 的缩写,他是一种数据交换格式。在 JSON 出现之前,数据交换多数由 XML 来实现,但随着 XML 的规范越来越复杂,开发人员使用越来越不方便。因此出现了这种数据格式。

MySQL 从 5.7.8 版本开始支持 JSON 格式数据。JSON 类型对比字符类型有以下特点:

  • JSON 数据类型会自动校验数据是否为 JSON 格式,如果不是 JSON 格式则会报错。
  • MySQL 提供了一组操作 JSON 的内置函数,可以方便的提取各类数据,可以修改特定的键值。
  • 优化的存储格式,存储在 JSON 列中的 JSON 数据被转换成内部的存储格式,允许快速读取
note

MySQL 提供了多种对字符数据的存储类型,不同的版本可能有所差异。以 5.7 版本为例,MySQL 包括了 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 多种字符串类型。

字符串类型 字节 描述及储存需求
CHAR(M) M M 为 0~255 之间的整数
VARCHAR(M) M 为 0~65535 之间的整数,值的长度+1 个字节
TINYBLOB 允许长度 0~255 字节,值的长度+1 个字节
BLOB 允许长度 0~65535 字节,值的长度+2 个字节
MEDIUMBLOB 允许长度 0~167772150 字节,值的长度+3 个字节
LONGBLOB 允许长度 0~4294967295 字节,值的长度+4 个字节
TINYTEXT 允许长度 0~255 字节,值的长度+2 个字节
TEXT 允许长度 0~65535 字节,值的长度+2 个字节
MEDIUMTEXT 允许长度 0~167772150 字节,值的长度+3 个字节
LONGTEXT 允许长度 0~424967295 字节,值的长度+4 个字节
VARBINARY(M) 允许长度 0~M 个字节的变长字节字符串 ,值的长度+1 个字节
BINARY(M) M 允许长度 0~M 个字节的定长字符串
note

MySQL 中有多种数据类型可以用于日期和时间的表示,以下为 MySQL5.7 之后的日期和时间类型。

日期和时间类型 字节 零值 最小值 最大值
DATE 4 0000-00-00 1000-01-01 9999-12-31
DATETIME 8 0000-00-00 00:00:00:00 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 00000000000000 19700101080001 2038 年的某个时刻
TIME 3 00:00:00 -838:59:59 838:59:59
YEAR 1 0000 1901 2155
  • 如果要用来表示年月日,通常用 DATE 来表示
  • 如果要表示年月日时分秒,通常用 DATETIME 或 TIMESTAMP 来表。
  • 如果只用来表示时分秒则用 TIME 来表示
  • 如果只表示年份则用 YEAR
note

—-数据类型篇

整数类型 字节 最小值 最大值
TINYINT 1 有符号-128
无符号 0
有符号 128
无符号 255
SMALLINT 2 有符号-32768
无符号 0
有符号 32768
无符号 65535
MEDIUMINT 2 有符号-8388608
无符号 0
有符号 8388607
无符号 1677215
INT\INTEGER 4 有符号-2147483648
无符号 0
有符号 2147483647
无符号 4294967295
BIGINT 8 有符号-9223372036854775808
无符号 0
有符号 9223372036854775807
无符号 18446744073709551615

在整数类型中共有上述几种类型,如果超出类型范围的操作,会发生”OUT OF RANGE”的错误。

note

Mysql 学习笔记

DDL(Data Definition Language)语句

创建数据库

create database test1;``

查询数据库

show databases;

mysql 自带表

mysql: 储存了系统的用户权限信息
information_schema:主要储存系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息等、每个用户都可以查看这个数据库,但根据权限可查看的内容不同。
performance_schema:MySql5.5 引入的系统库,用户储存系统性能相关参数的动态参数表。
sys:MySql5.7 引入的系统库,本身不记录系统数据,给予performance_schemainformation_schema之上,封装了一层更加易于调优和诊断的系统视图。

note

说在前面:虽然说现在主从同步的配置多数情况下都采用 docker 的方式快速部署,但是我们可以从手动部署的方式上学到更多的知识。 为什么要使用 MySQL 主从同步?在我们日常的项目生产或运行过程中,数据库都扮演着一个至关重要的角色,一旦数据库出现问题,整个服务就会瘫痪。另外,数据库也面临着被恶意修改的风险…所以,为了能够减少甚至避免在意外情况下发生的损失,我们就会采取主从同步的方式来部署 ...
note