MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性

1. SQL 介绍

  • 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

  • 关系型数据库中通用的一种命令。

  • 使用SQL_MODE规范SQL语句的语法标准.

sql1992 sql分类
1.笛卡尔积 (表乘表)
2.等值连接 表的连接条件使用“=”
3.非等值连接 表的连接条件使用“>、>=、 <、<=、!=、any等”
4.自连接 自己连接自己
5.外连接
1.左外连接,“(+)”在等号右边
2.右外连接,“(+)”在等号左边
3.“(+)”在哪一边的列,该表就补充null

sql1999 sql分类
1.cross join 交叉连接 (笛卡尔积) ,不需要on关键字
2.natural join 自然连接 (找两个表中相同的列,进行等值匹配),不需要on关键字
3.inner join 内连接 1)必须有on关键字,on表示连接条件 2)inner关键字可以省略
4.outer join 外连接,outer关键字可以省略 1) left outer join 2) right outer join 3) full outer join

2.SQL_MODE

MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性
ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION
确保数据有意义

3. SQL 常用分类

  • DDL: 数据库定义语言
    • DQL: 数据查询语言
  • DCL: 数据库控制语言
  • DML: 数据库操作语言

4. 字符集 & 校对规则

字符集 :
utf8 : 最多允许字符长度为3个字节
utf8mb4 :最多允许字符长度为4个字节

一、简介
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes
4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

二、内容描述

那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为
3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是
Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8
字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android
手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等(utf8的缺点)。

  • 查看当前校对规则
    mysql> show collation;

MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性

  • 查看当前排序规则
    mysql> show charset;

MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性

  • 说明:
    - 可以作用与库级别和表级别,一般是在建库建表时设定

5. 表的属性和列的属性

5.1 表定义属性 (创建)

  • 存储引擎 :InnoDB
  • 字符集 & 校对规则: utf8mb4
  • 注释 :

5.2 列的属性

5.2.1 数据类型

保证数据有意义
(1) 数值类型

类型 说明
整数 TINYINT -128~127,0-255 最多存储1个字节长度数值 1Bytes=8bit
整数 INT 4Bytes,0-2^32,-2^31~2^31-1,10位数
整数 BIGINT 8Bytes,0-2^64,-2^63~2^63-1,20位数

(2) 字符串类型(万能)
MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性
64个字符

一个中文字符占3个字节

gbk 128字节
utf8 192字节
utf8mb4 256字节
最大255字节

类型 说明
文本 CHAR 固定长度字符串类型 一次性分配固定长度存储空间,存不满,用空字符串填充
文本 VARCHAR 可变长度字符串 65535字节 最多65533.1-255字符之间,单独占用1字节存储字符长度,256-65535字符长度,单独占用存储符长度
整数 ENUM 固定的合法值组成的枚举

区别: char(64) 定长 的字符串类型,在存储字符串时,最大字符长度64个,立即分配11个字符长度的存储空间,如果存不满,空格填充。
varchar(64) 变长的字符串类型看,最大字符长度64个。在存储字符串时,自动判断字符长度,按需分配存储空间

  • 64代表了,最多可以存储字符的个数
  • 字节限制255 65535字节
  • varchar 需要花费额外的1-2字节存储字符长度
    enum(‘bj’,‘tj’,‘sh’):
    枚举类型,比较适合于将来此列的值是固定范围内的特点,可以使用enum,可以很大程度的优化我们的索引结构。
    注意:数字列不要使用,经常变化的列不要使用

如何选择:
1.业务数据是定长还是变长
2.字符长度

数据类型选择是否会影响到查询效率?

(3)时间类型
MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性

DATETIME 范围为从 1000-01-01 00:00:00.000000 至 9999-12-31
23:59:59.999999。 TIMESTAMP 1970-01-01 00:00:00.000000 至 2038-01-19
03:14:07.999999。 timestamp会受到时区的影响

(4)二进制类型
MySQL 基础介绍 & 校对规则 & 排序规则 & 表的属性和列的属性
(5)Json类型(8.0以后使用较多)

5.3 约束(一般建表时添加):

  • primary key :主键约束
    设置为主键的列,此列的值必须非空且唯一,主键在一个表中只能有一个,但是可以有多个列一起构成。

  • not null :非空约束
    列值不能为空,也是表设计的规范,尽可能将所有的列设置为非空。可以设置默认值为0

  • unique key :唯一键,唯一约束
    列值不能重复

  • unsigned :无符号
    针对数字列,非负数。

5.4 其他属性

  • default :默认值
    列中,没有录入值时,会自动使用default的值填充
  • auto_increment:自增长
    针对数字列,顺序的自动填充数据(默认是从1开始,将来可以设定起始点和偏移量)
  • comment : 注释