美文网首页
mysql-基础

mysql-基础

作者: 秋水涟漪 | 来源:发表于2017-08-01 21:35 被阅读0次

参考资料:MySQL 5.7 官方文档

1. 约束 Cosntraints

键值约束-Miss锦

  • NOT NULL: 非空约束
  • UNIQUE: 唯一约束,指定列和组合列的数据不重复

[unique约束查值时速度快,但是插入时需要锁住,防止重复插入?]:

  • PRIMARY KEY: 主键约束,指定列的数据唯一且非空
    每张表最多只允许一个主键,建立主键可以在列级别也可以在表级别。
  • FOREIGN KEY: 外键
  • CHECK: 检查,指定一个表达式,用于检验指定数据,但是mysql不起作用

2. 索引 KEY

3. mysql在表的列数及行数上的限制

Limits on Table Column Count and Row Size

  • 列数限制: 即一个表最多有多少COLUMNS
  • 行的限制:指的是该表存储一行数据所占的存储空间大小(个人理解,也就是 row buffer的大小)。其中TEXT和BLOB的存储位置不在行缓冲(row buffer),它们仅占用9到12bytes的大小。也就是说表的所有列的大小(刨除TEXT和BLOB)不能超过该限制。

MySQL对于表的COLUMN有数量限制:4096个。ROW的限制是:65,535 bytes。但是根据不同的存储引擎和字符集设置等,该限制也会有变化。

/*行数超过限制*/
mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
       f VARCHAR(10000), g VARCHAR(6000)) ENGINE=InnoDB CHARACTER SET latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used 
table type, not counting BLOBs, is 65535. This includes storage overhead, 
check the manual. You have to change some columns to TEXT or BLOBs

/*将其中的一列数据类型改为TEXT*/
mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
       f VARCHAR(10000), g TEXT(6000)) ENGINE=InnoDB CHARACTER SET latin1;
Query OK, 0 rows affected (0.02 sec)

4. 数据类型

MySQL 支持SQL的数据类型有:数字、日期及时间、字符及字符串等

类型 大小
BIT 1 比特
TINYINT 1 字节
SMALLINT 2 字节
INT 4 字节
BIGINT 8 字节
FLOAT 4 字节
DOUBLE 8 字节

FLOAT: 单精度浮点型,精度大概小数点后7位,是约数(Floating-Point Types (Approximate Value)), 浮点型用于比较时可能会得到不期望的结果(Problems with Floating-Point Values)。
DOUBLE: 双精度浮点型,精度为小数点后15位,是约数
DECIMAL: 固定浮点, 是准确数 (Fixed-Point Types (Exact Value) )
DECIMAL(M,D): M默认为30,最大为65;D默认为0,最大为30.

5. 字符类型

  • CHAR(M):定长字符串,存储时不足M个字符,以空字符补全。CHAR 在查询是会去掉字符串尾部的空白字符。
  • VARCHAR(M):可变长字符串。VARCHAR 相比于CHAR存储时需要1字节或2个字节的前缀(The CHAR and VARCHAR Types), 如果所存字符大小大于255个字节则需要2个字节,否则1个字节。
    M是指该列的字符数量,它受限于编码方式和MySQL在表的列数及行数上的限制。字符数量,不是字节数量。如果设置数据库编码方式为UTF-8, 一个字符需要三个字节表示。M=4,存了4个UTF-8字符后,则占用12+1个字节的ROW SIZE。
    char-vs-varchar
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab  )              | (ab)                |
+---------------------+---------------------+
1 row in set (0.06 sec)

相关文章

  • MySQL-15分布式架构-MyCAT

    MySQL-分布式架构-MyCAT 1. MyCAT基础架构图 2. MyCAT基础架构准备 2.1 环境准备: ...

  • Java进阶-MySQL-基础

    一、Java进阶-MySQL-基础 1.1 客户端连接 1.2 字符集和比较规则 SHOW CHARSET; /...

  • mysql-基础

    参考资料:MySQL 5.7 官方文档 1. 约束 Cosntraints 键值约束-Miss锦 NOT NULL...

  • MySql-基础

    1.MYSQL数据类型 整数类型 TINYINT、SMALLINT、 MEDIUMINT、INT、BIGINT属性...

  • 【mysql-基础篇】

    mysql-基础篇 一、常见命令 1、sql常见命令 查看当前所有的数据库:show databases; 打开指...

  • MySQL优化

    mysql-基础-视图,存储过程,触发器 面试题 面试你所要知道的:MySQL存储过程 https://blog....

  • MySQL基础-存储引擎/索引/SQL优化

    前言:本文均是基础内容,已掌握的建议跳过,你有更重要的内容需要学习。MySQL-存储引擎[https://www....

  • MySQL-基础操作

    创建数据库 语句-CREATE DATABASE name 使用数据库 语句-USE name 创建表 语句-CR...

  • 08 MySQL-初识MySQL-事务-隔离鉴别

    如果没有特别说明,都是默认autocommit=1 根据我的第三篇03 MySQL-初识MySQL-事务隔离级别提...

  • MySQL相关

    基础 MySQL-视图 什么是视图 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的...

网友评论

      本文标题:mysql-基础

      本文链接:https://www.haomeiwen.com/subject/fdeslxtx.html