我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL数据类型 - 数据类型默认值

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码


	MySQL数据类型 - 数据类型默认值


	MySQL数据类型 - 数据类型默认值
[数据库教程]

数据类型默认值

数据类型规范可以有显式或隐式的默认值。

数据类型规范中的DEFAULT值子句显式指示列的默认值。示例:

技术图片

SERIAL DEFAULT VALUE是一种特殊情况。在整数列的定义中,它是NOT NULL AUTO_INCREMENT UNIQUE的别名。

处理显式DEFAULT子句,某些方面依赖于特定版本,如下所述。

●MySQL 8.0.13处理显式默认值

●MySQL8.0.13之前处理显式默认值

●处理隐式默认值

MySQL 8.0.13处理显式默认值

DEFAULT子句中指定的默认值可以是字面常量或表达式。有一个例外,将表达式默认值括在括号内,以区别于字面常量默认值。示例:

例外情况是,对于TIMESTAMP和DATETIME列,可以指定CURRENT_TIMESTAMP函数作为默认值,而不需要用括号括起来。

只有用表达式才能给BLOB、TEXT、GEOMETRY和JSON数据类型分配默认值,即使表达式值是字面量:

●这种方式可行(字面量默认值指定为表达式):
技术图片

●这种方式将产生错误(字面量默认值未指定为表达式):

技术图片

表达式默认值必须符合以下规则。如果表达式包含不允许的结构,则会发生错误。

●允许使用字面量、内置函数(确定性函数和非确定性函数)以及运算符。

●不允许使用子查询、参数、变量、存储过程和用户定义函数。

●表达式默认值不能依赖于具有AUTO_INCREMENT属性的列。

●列的表达式默认值可以引用其他列,但是表达式默认值引用的生成列或具有表达式默认值的列必须是前向引用。

这个顺序约束也适用于使用ALTER TABLE语句重新排序表的列。如果结果表的表达式默认值包含对生成的列或具有表达式默认值的列的后向引用,则该语句将失败。

对于CREATE TABLE ... LIKE 和 CREATE TABLE ... SELECT语句,则目标表将保留原始表中的表达式默认值。

如果表达式默认值引用不确定函数,则导致表达式计算的任何语句对于基于语句的复制来说都是不安全的。这包括INSERT和UPDATE等语句。在这种情况下,如果禁用了二进制日志记录,则该语句将正常执行。如果启用了二进制日志记录,并且binlog_format设置为STATEMENT,则会记录并执行该语句,但会在错误日志中写入一条警告消息,因为复制从属服务器可能会发生分歧。当binlog_format设置为MIXED或ROW时,语句将正常执行。

插入新行时,可以通过省略列名或将列指定为DEFAULT(就像对于具有字面量默认值的列一样)来插入具有表达式默认值的列:
技术图片

但是,仅允许对具有字面量默认值的列使用DEFAULT(col_name)指定列为默认值,而不允许对具有表达式默认值的列使用。

并非所有存储引擎都允许表达式默认值。对于不支持的存储引擎,会引发 ER_UNSUPPORTED_ACTION_ON_DEFAULT_VAL_GENERATED 错误。

如果默认值的计算结果与声明的列类型不同,则会根据通常的MySQL类型转换规则隐式转换为声明的类型。

MySQL8.0.13之前处理显式默认值

有一个不同情况,DEFAULT子句中指定的默认值必须是字面常量;它不能是函数或表达式。这意味着,不能将日期列的默认值设置为函数的值,例如NOW()或CURRENT_DATE。例外情况是,对于TIMESTAMP和DATETIME列,可以将CURRENT_TIMESTAMP指定为默认值。

无法为BLOB、TEXT、GEOMETRY和JSON数据类型分配默认值。

如果默认值的计算结果与声明的列类型不同,则会根据常规的MySQL类型转换规则隐式转换为声明的类型。

处理隐式默认值

如果一个数据类型规范中没有显式的默认值,那么MySQL会按如下方式确定默认值:

如果列可以接受NULL值,则使用显式的DEFAULT NULL子句定义该列。

如果列不能接受NULL值,MySQL将不使用显式DEFAULT子句定义该列。

对于没有显式DEFAULT子句的NOT NULL列的数据输入,如果INSERT或REPLACE语句不包含该列的值,或者UPDATE语句将该列设置为NULL,则MySQL会根据当时有效的SQL模式处理该列:

●如果启用了严格SQL模式,事务表将出错,语句将回滚。对于非事务表,会引发错误,但如果多行语句的第二行或后续行发生这种情况,则前面的行将被插入。

●如果未启用严格模式,MySQL会将列设置为列数据类型的隐式默认值。

假设表t的定义如下:
技术图片

在本例中,i没有显式默认值,因此在严格模式下,下面的每个语句都会产生一个错误,并且不会插入任何行。不使用严格模式时,只有第三条语句产生错误;前两条语句插入隐式默认值,但第三条语句失败,因为DEFAULT(i)无法生成值:

技术图片
对于给定的表,SHOW CREATE TABLE语句显示哪些列具有显式DEFAULT子句。

隐式默认值定义如下:

●对于数值类型,默认值为0,但是有个例外,对于使用AUTO_INCREMENT属性声明的整数或浮点类型,默认值是序列中的下一个值。

●对于TIMESTAMP以外的日期和时间类型,默认值是该类型的适当的"零"值。如果启用了explicit_defaults_for_timestamp系统变量,则TIMESTAMP类型也是如此。否则,对于表中的第一个TIMESTAMP列,默认值为当前日期和时间。

●对于ENUM以外的字符串类型,默认值为空字符串。对于ENUM,默认值是第一个枚举值。

官方文档:
https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html
阅读 9

MySQL数据类型 - 数据类型默认值

原文地址:https://blog.51cto.com/15023289/2560949

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL数据类型 - 数据类型默认值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL数据类型 - 数据类型默认值

数据类型默认值数据类型规范可以有显式或隐式的默认值。数据类型规范中的DEFAULT值子句显式指示列的默认值。示例:SERIAL DEFAULT VALUE是一种特殊情况。在整数列的定义中,它是NOT NULL AUTO_INCREMENT UNIQUE的别名。

	MySQL数据类型 - 数据类型默认值
2021-04-15

Python数据类型 -数值类型(整数,

一、整数:1)整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。如:num01 =100
2023-01-31

MySQL数据类型 - JSON数据类型 (4)

JSON值的比较和排序JSON值可以使用=,=,,!=,和运算符进行比较。JSON值尚不支持以下比较运算符和函数:●BETWEEN●IN()●GREATEST()●LEAST()要想使用上面这些列出的比较运算符和函数,一个解决方法是将JSON值转换为原生MyS

	MySQL数据类型 - JSON数据类型 (4)
2016-08-23

MySQL数据类型 - JSON数据类型 (2)

JSON值的规范化、合并和自动包装当一个字符串被解析并发现是一个有效的JSON文档时,它也会被规范化。这意味着,具有与稍后在文档中找到的键(从左到右)重复的键的成员将被丢弃。JSON_OBJECT()调用生成的对象值只包含第二个key1元素,因为该键名在之前值

	MySQL数据类型 - JSON数据类型 (2)
2019-09-03

MySQL数据类型 - JSON数据类型 (3)

最右边的数组元素。MySQL支持last关键字,作为数组中最后一个元素的索引的同义词。last - N 形式的表达式可用于相对寻址和范围定义,如下所示:如果不是针对数组计算路径,则求值结果与将该值包装在单个元素数组中的结果相同:可以使用带有JSON列标识符和J

	MySQL数据类型 - JSON数据类型 (3)
2021-03-13

MySQL基础教程1 —— 数据类型之数值类型

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INT
2022-05-31

MySQL 数据类型

1、数值型类型                    范围、小数位数TINYINT(-128,127)SMALLINT正负3w+MEDIUMINT正负800w+INT正负21亿+BIGINT正负900千万亿+FLOAT  单精度10的-38次方DOUBLE 
MySQL  数据类型
2018-12-08

mysql数据类型

1.整型(整数类型)create table t2(id int(5) unsigned zerofill);注意:  ①int后面的5表示的是显示宽度(就是你select * from t2;时看到的数字最大长度为5),而不是数据库存储时的宽度,一般在创建表
mysql数据类型
2020-10-18

【MySQL】MySQL数据类型

文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar
2023-08-22

PHP 函数参数类型的默认值是什么?

php 函数中的参数可以具有默认值,可在函数声明中指定,在省略时使用。语法:function function_name(type $parameter1 = default_value, type $parameter2 = defaul
PHP 函数参数类型的默认值是什么?
2024-04-10

MySQL数据类型(精)

数据类型(精)MySQL中的数据类型整型类型类型介绍可选属性M显示宽度不会影响类型的实际宽度设置字段f1,f2,f3f1 INT,f2 INT(5),f3 INT(5) ZEROFILL#不足宽度时,会自动补0;并且自动变成UNSIGNED添加数据INSERT
MySQL数据类型(精)
2021-02-11

MYSQL的数据类型

基本数据类型:整数(int),小数(double),固定长度字符(char),可变长度字符(varchar),文本(text),二进制大对象(blog)
MYSQL的数据类型
2016-03-05

【MySQL】数据库的数据类型

数据类型 一、数据类型分类二、数值类型1. tinyint2. bit3. 小数类型(1)float(2)decimal 三、字符串类型1. char2. varchar3. varchar 和 char 比较 四、日
【MySQL】数据库的数据类型
2023-12-23

编程热搜

目录