MySQL列类型、SQL模式、数据字典
MySQL列类型的作用:
列类型可以简单理解为用来对用户往列种存储数据时做某种范围"限定",它可以定义数据的有效值(字符、数字等)、所能占据的最大存储空间、字符长度(定长或变长)、是否能够被索引、如何被索引及如何排序等。在关系型数据库系统中,为了实现数据的易于管理,必须为表字段(列)指定对应的列类型。MySQL的列类型可以分为4类:字符型、数值型、日期及时间型、自有类型。
字符型:
字符型限定值只能为字符,MySQL的字符类型如下:
类型 最大字符长度 名称及特性 char 255 定长字符串,区分大小写 varchar 65535 变长字符串,区分大小写 binary 255 二进制定长字符串,区分大小写 varbinary 65535 二进制变长字符串,区分大小写 tinytext 255 text类型是文本大对象存储,就是说它存储的并不是数据本身,而是一个指针,指向数据的存储所在位置;text不区分大小写 text 65535 mediumtext 16777215 longtext 4294967295 tinyblob 255 blob类型是二进制大对象存储,它是text的二进制形式,区分大小写 blob 65535 mediumblob 16777215 longblob 4294967295
数值型:
数值型限定只能存储数值类数据,MySQL的数值类型如下:
类型 名称 取值范围(有符号,无符号) TINYINT 最小整数 -128到127,0到255 SMALLINT 小整数 -32768到32767,0到65535 MEDIUMINT 中整数 -8388607到8388607,0到16777215 INT 整数 -2147483647到2147483647,0到4294967295 BIGINT 大整数 -9223372036854775807到9223372036854775807,0到18446744073709551615 decimal 十进制 FLOAT 单精度浮点 DOUBAL 双精度浮点
日期及时间型:
日期时间型用来记录日期或时间,MySQL的日期时间类型如下:
类型 名称 取值范围
DATE 日期 '1000-01-01'到'9999-12-31'
TIME 时间 '-838:59:59'到'838:59:59'
DATETIME 日期时间 '1000-01-01 00:00:00'到'9999-12-31 23:59:59'
TIMESTAMP 时间戳 '1970-01-01 00:00:00'到’2037年某时'
YEAR 年 4位格式:1901到2155,2位格式:1970-2069(70-69),或:0000
自有类型:
自有类型是MySQL内置的类型,有两种:
SET:字符串集合,事先给出多个元素(最多64个)供用户选择,用户可以选多个元素填入
ENUM:枚举,事先给出多个元素(最多65536个)供用户选择,用户只能选一个元素填入
MySQL的SQL模式:
MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL。MySQL常用的有三种SQL模式,传统模式、严格模式和ANSI模式。MySQL的SQL模式默认为空,该模式为非严格模式。
可以通过如下命令查看MySQL当前的SQL模式:
mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode'; mysql> SELECT @@sql_mode;
设置MySQL的SQL模式:
mysql> SET [GLOBAL|SESSION] sql_mode='modes';
或启动MySQL时指定SQL模式:
shell> mysqld --sql-mode="modes"
TRADITIONAL,传统模式:
该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,那么出现错误前进行的数据更改不会“回滚”,会导致结果更新“只进行了一部分”。
mysql> SET [GLOBAL|SESSION] sql_mode='TRADITIONAL';
STRICT,严格模式:
如果不能将给定的值插入到表中,则放弃该语句。严格模式具有两种:STRICT_TRANS_TABLES和STRICT_ALL_TABLES。STRICT_TRANS_TABLES对支持事务的表实行严格模式,STRICT_ALL_TALBES在所有表执行严格模式。
mysql> SET [GLOBAL|SESSION] sql_mode='STRICT_TRANS_TABLES'; mysql> SET [GLOBAL|SESSION] sql_mode='STRICT_ALL_TABLES';
ANSI模式:
更改操作的语法和行为,使其更适合标准的SQL。
数据字典:
数据字典就类似于系统编目或花名册(和目录不太相同),它保存数据库服务器上的元数据信息(数据库的整体属性信息)。元数据信息包括:关系(表)的名字、每个关系的各字段的名字、各字段的数据类型和长度约束、每个关系上的视图的名字及视图的定义、授权用户的名字、用户的授权和账户信息、统计类的数据:、每个关系字段的个数、每个关系中的行数、每个关系的存储方法;
在mysql上保存元数据的数据库有:mysql库、infomation_schema库、和performance_schema库,performance_schema库是一个虚拟的库,类似于Linux的/proc等伪文件系统。