跟我一起学习MySQL技术内幕(第五版):(第三章学习日记3)

3.2MySQL数据类型

3.2.1数据类型概述

3.2.2表定义里的特殊列类型

3.2.3指定列的默认值

———————————————————————————————

3.2.1数据类型概述

MySQL数字类型包括整数,定点数,浮点数和位值。除bit外其他的数据类型可以带有正负号,也可以不带正负号。

类型名称               含义
tinyint               非常小的整数
smallint              小整数
mediumint             中等大小的整数
int                   标准的整数
bigint                大整数
decimal               定点数
float                 单精度浮点数
double                双精度浮点数
bit                   位域

字符串可以容纳任何内容,可以容纳表示图像和声音的二进制数据,可以按照大写进行比较,也可以进行模式匹配。

类型名称               含义
char                  固定长度的非二进制字符串
varchar               可变长度的非二进制串
binary                固定长度的二进制串
varbinary             可变长度的二进制串
tinyblob              非常小型的blob(二进制大对象)
blob                  小型blob
mediumblob            中型blob
longblob              大型blob
tinytext              非常小型的非二进制串
text                  小型非二进制串
mediutext             中等大小的非二进制串
longtext              大型非二进制串
enum                  枚举集合
set                   集合(每个列取值可以为若干个集合元素)

时态类型:

MySQL提供的类型有:

日期与时间(合并或者分开表示)

时间戳(专门记载某个行最近一次修改时间的类型)

类型名称              含义
date                 日期值,格式为‘ccyy-mm-dd’
time                 时间值,格式为‘hh:mm:ss’
datetime             日期加时间值,格式为‘ccyy-mm-dd hh:mm:ss’
timestamp            时间戳值,格式为‘ccyy-mm-dd hh:mm:ss’
year                 年份值,格式为ccyy或yy

分别表示:

        cc      yy       mm     dd      hh      mm      ss
        世纪、   年、      月 、   日   、 小时  、 分钟   、秒

3.2.2表定义里的特殊 列 类型

create table mytabl1
(
   f float(10,4),
   c char (15)  not null default ‘none‘
   i tinyint unsigned null
);

列定义的语法如下:

col_name col_type [type_attrs] [general_attrs]

col_type表示列类型,即表明这一列可以用来容纳何种类型的值。

1.有些类型说明符会表明存储在列里的值所允许的最大长度(char(10))

2.有些类型说明符允许长度隐含在名称里(tinytext)

3.有些类型说明符允许你指定一个最大显示宽度

4.对于定点类型和浮点类型,还可以指定有效位和小数位

在列的数据类型后面,除了指定多个通用属性外,还可以指定一些类型特有的可选属性。这些属性的作用是对该类型做进一步的修饰和限定

1.所允许的特有类型取决于具体的数据类型
2.通用属性可用于任何一种数据类型
3.如果存在多个属性,通常将数据类型特有的属性放在通用属性的前面

3.2.3指定列的默认值

除了blob与text类型、空间类型或者具有auto_increment属性的列以外,

还可以指定default def_value 子句.用以表明创建新的行时,如果没有显示地指定某个值,该列将会被默认值 def_value

除了timestamp列和datetime列有限制以外,这里的默认值def_value必须是一个常量。他不能为表达式,也不能引用其他列

如果没有显式包含default子句,且该列允许为null值,那么其默认值为NULL

如果该列不允许为NULL值,也没有default子句,这就会影响MySQL对列的处理:

1.如果没有启用SQL的严格模式,这列将会被设置成其数据类型的隐含默认值。
2.启用SQL严格模式之后,如果表是事务性的,就会出现错误。这条语句会中止执行,然后回滚。对于非事务性的表,
如果这行是该语句插入的第一个行,那么会出现一个错误,该语句中止执行,
如果不是第一行,那么可以选择中止执行,或选择把这列设置为它的隐含默认值,同时发出一条警告信息

列的隐含默认值取决于它的数据类型。

1.对于数字列(不包含那些具有auto_increment属性的列),其默认值为0.
  对于auto_increment列,默认值是下一个列的列序号。
2.对于大多数时态类型列,其默认值为该类型的“零”值
  对于enum列,默认值为枚举集里的第一个元素,
  对于set列,如果不允许NULL值,默认值将是一个空集不过它等价于空串。
时间: 2024-11-10 12:07:48

跟我一起学习MySQL技术内幕(第五版):(第三章学习日记3)的相关文章

mysql技术内幕 第五版

第二章 涉及到database的所有语句里,schema关键字和database同义 1. 查询当前回话,和全局回话的sql_mode Select @@session.sql_mode; select @@global.sql_mode; set sql_mode = 'TRADITIONAL' set GLOBAL sql_mode = 'TRADITIONAL' 2.4.字符集支持 查询当前server支持那些字符集,和排序规则 show charset;   # show charact

mysql技术内幕InnoDB存储引擎-阅读笔记

mysql技术内幕InnoDB存储引擎这本书断断续续看了近10天左右,应该说作者有比较丰富的开发水平,在源码级别上分析的比较透彻.如果结合高可用mysql和高性能mysql来看或许效果会更好,可惜书太厚,还在啃当中,希望能早点读完……. 应该说与oracle相比,mysql数据库还是相对比简单,以后还是深入学习下oracle去. 搞数据库也比搞应用运维相对单纯,不用知道各种应用架构,不用写各种脚本工具,只要掌握这个软件就足够了.当然希望自己的知识还是全面一些好.

MySQL技术内幕-InnoDB存储引擎-读书笔记(二)

MySQL技术内幕-InnoDB存储引擎-读书笔记(二) 作为php开发,使用mysql总是少不了的 系列文章博客链接 http://itsong.net/articles/466.html 第三章 文件 mysql与innodb几个类型的文件 参数文件,配置路径.初始化参数.内存大小等 日志文件,包括错误日志,二进制日志,慢查询日志,查询日志 socket文件,用unix域套接字,unix domain socket来进行连接时需要的文件,这一般是本机连接,比通常tcp快 pid文件,进程id

《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记

一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是按主键的顺序记性存放 支持全文索引(InnoDB1.2.x - mysql5.6) 支持MVCC(多版本并发控制)实现高并发 MyISAM: 不支持事务 表锁 支持全文索引 三.InnoDB体系架构 1.后台线程 Master Thread 负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性 IO

MySQL技术内幕-InnoDB存储引擎-读书笔记(一)

MySQL技术内幕-InnoDB存储引擎-读书笔记(一) 作为php开发,使用mysql总是少不了的 博客链接 http://itsong.net/articles/466.html 第一章 MySQL体系结构和存储引擎 MySQL被设计为一个单进程多线程架构的数据库 ./mysql --help | grep my.cnf 可以查看mysql数据库实例启动时,它会在哪些位置查找配置文件. 配置文件中有一个datadir参数,指定了数据库所在的路径.默认为/usr/local/mysql/dat

Mysql技术内幕——表&索引算法和锁

表 4.1.innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键.首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键.不符合上述条件,innodb存储引擎会自动创建一个6字节大小的指针,rowid(). 4.2.innodb逻辑存储结构 innodb的逻辑存储单元由大到小分别是

jQuery技术内幕预览版.pdf2

第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数jQuery()时传入的参数不同,创建的jQuery对象的逻辑也会随之不同 jQuery(selector[,context]): 如果传入一个字符串参数,jQuery会检查这个字符串是选择器表达式还是HTML代码.如果是选择器表达式,则遍历文档,查找与之匹配的DOM元素,并创建一个包含了这些DOM

jQuery技术内幕预览版.pdf3

jQuery.fn.init(selector,context,rootjQuery):构造函数 jQuery.fn.init() 负责解析参数 selector 和 context 的类型,并执行相应的逻辑,最 后返回 jQuery.fn.init() 的实例,共有12个有效分支 源码分析 定义jQuery.fn.init(selector,context,rootjQuery) init:function(selector,context,rootjQuery){ var match,ele

《构建之法》第三章学习心得

这周我学习了<构建之法>第三章,讲述了软件工程师的成长.软件系统的绝大部分模块都是由个人开发或维护的.在软件工程的术语中,这些单个的成员叫做Individ-ual Contributor(IC).IC在团队中的流程是怎么样的呢?以开发人员为例,流程如下. 1.通过交流.实验.快速原型等方法,理解问题.需求或任务 2.提出多种解决办法并估计工作量 3.其中包括寻找以前的解决方案,因为很多工作是重复性的 与相关角色交流解决问题的提案,决定一个可行的方案 执行,把想法变成实际中能工作的代码,同时验证