IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> MySQL8.0学习记录08 - 数据类型默认值 -> 正文阅读

[游戏开发]MySQL8.0学习记录08 - 数据类型默认值

定义默认值的方式

类型默认值可以使用字面量和表达式来定义,表达式需要用括号括起来:

create table t_text(
	a int default 0,
	b varchar(64) DEFAULT (UUID()),
	c DATE DEFAULT (CURRENT_DATE + INTERVAL 1 YEAR),
	d float default (RAND() * RAND()),
	e DATETIME default CURRENT_TIMESTAMP  ON UPDATE CURRENT_TIMESTAMP,
	f BLOB default ('hello')
);

insert into t_text() values();

SELECT * FROM t_text;
a|b                                   |c         |d       |e                  |f    |
-+------------------------------------+----------+--------+-------------------+-----+
0|66f735d9-c17c-11ec-89b9-0242ac120003|2023-04-21|0.496599|2022-04-21 14:07:38|hello|

日期类型有个可以自动更新的属性 ON UPDATE,在更新其他列值的时候,该列自动更新

update t_text set a = 1 where a=0;
SELECT * FROM t_text;

可以看到时间e更新了:

a|b                                   |c         |d       |e                  |f    |
-+------------------------------------+----------+--------+-------------------+-----+
1|66f735d9-c17c-11ec-89b9-0242ac120003|2023-04-21|0.496599|2022-04-21 14:08:23|hello|

表达式的要求

  • 可以使用字面量、内置函数以及操作符
  • 不能使用子查询、参数、变量、存储函数
  • 列不能拥有AUTO_INCREMENT属性
  • 表达式可以引用其他列,但是如果引用生成列或者带有表达式默认值的列,被引用的列要先定义

一般列表达式引用其他列的顺序无限制:

create table t_text(
  a int default 0,
  b int DEFAULT (a + 2),
  c varchar(10) default(concat(d,'_c')),
  d varchar(10) default 'd'
);

insert into t_text() values();
/* 
 a|b|c  |d|
 0|2|d_c|d|
 */
insert into t_text(a,d) values(100,'hello');
/* 
 a  |b  |c      |d    |
 100|102|hello_c|hello|
 */

如下,d的默认值是表达式,c在d前面定义,c的表达式引用d是不合法的:

create table t_text(
	a int default (0),
	b int default (a+10), --正确
	c varchar(10) default(concat(d,'_c')), -- 错误
	d varchar(10) default ('d')
);

另外:BLOB, TEXT, GEOMETRY和 JSON只能拥有带表达式的默认值

隐式默认处理

如果未显式指定DEFAULT,而且类型可以为NULL,那么MySQL也会加上DEFAULT NULL。

对于定义NOT NULL的列,如果在INSERT、REPLACE、UPDATE语句中,给该列赋值为NULL,那么根据SQL模式进行相应的处理:

  • 如果是严格模式,会报错,并回滚事务
  • 如果是非严格模式,那么根据数据类型来决定其默认值:
create table t_text(
   a int not null,
   b varchar(10) not null,
   c decimal(4,2) not null,
   d datetime not null,
   e BLOB not null,
   f JSON not null
);

SET sql_mode = '';
insert into t_text() values();

结果如下:

a|b|c   |d                  |e|f   |
-+-+----+-------------------+-+----+
0| |0.00|0000-00-00 00:00:00| |null|

这里注意f 并不是MySQL的NULL类型,而是JSON的NULL。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 11:07:26  更:2022-04-23 11:08:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:47:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码