前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 之默认值

MySQL 之默认值

作者头像
DataScience
发布2020-01-01 22:23:25
4.1K0
发布2020-01-01 22:23:25
举报
文章被收录于专栏:A2DataA2Data

本文标识 : MQ0020

本文编辑 : 长安月下赏美人儿

编程工具 : MySQL、DBeaver

阅读时长 : 6分钟

前言

关于之前的文章分享,大致同小伙伴儿们共同学习了一些基础的 MySQL 知识,但是有一些很细碎的内容并未一一指出,故在此进行补充完善。

默认值问题的由来

在一个风和日丽的早晨,小编欢快的进行习题练习,插入了一个数据库,然后报错了,#1364 习惯性去网上查原因,于是发现了这个被忽略已久的问题,默认值。莫名发现,它是不声不响的大侠,如果没有处理好与它的关系,会死得很有节奏感!

MySQL 严格模式与非严格模式

小编也是瞪大了狗眼,原来还有不同的模式,也是新奇有趣。

  • MySQL 数据库严格模式 数据库自身对数据进行严格的校验(格式、长度、类型等),一旦出现不符合需求的数据出现,会直接报错。
  • MySQL 数据库非严格模式 数据库自身会容忍开发上的疏忽,譬如 varchar(50),插入了长度 1200 的字符串,就会悄咪咪的取前 50 个,后面的 1150 个会截断,且也不报错。

如何开启MySQL 的严格模式

  • 方法一,执行 SQL 语句来开启
代码语言:javascript
复制
set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
  • 方法二,找到mysql安装目录下的 my.ini(windows系统)
代码语言:javascript
复制
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

MySQL 严格模式需要注意的小问题

  • 不支持对 not null 字段插入 null 值
  • 不支持对自增长字段插 '' 值
  • 不支持 text 字段有默认值

1、not null 字段插入 null 值测试

例,插入一条 name 值为 null 的记录

在非严格模式下执行

代码语言:javascript
复制
CREATE TABLE test11 (
 id int(11) NOT NULL AUTO_INCREMENT,
 name VARCHAR(50),
 other TEXT,
 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO  test11(other) VALUES('aaaaaaaaaa');

数据结果:

在严格模式下执行

代码语言:javascript
复制
CREATE TABLE test00 (
 id INT(11) NOT NULL AUTO_INCREMENT,
 name VARCHAR(50) NOT NULL,
 other TEXT NOT NULL,
 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO test00(other) VALUES('aaaaaaaaaa');

数据结果:

代码语言:javascript
复制

2、自增长字段插入 '' 值测试

例,对 id 字段插入”值

在非严格模式下执行

代码语言:javascript
复制
INSERT INTO test11(id,name,other) VALUES('','','aaaaaa');
Query OK, 1 row affected, 1 warning (0.00 sec)

在严格模式下执行

代码语言:javascript
复制
INSERT INTO test00(id,name,other) VALUES('','','bbbbbbb');

数据结果:

3、text 字段默认值测试

例,创建数据表,设置 text 为默认值 default=''

在非严格模式下执行

代码语言:javascript
复制
CREATE TABLE test33 (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
other TEXT NOT NULL DEFAULT'',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected, 1 warning (0.03 sec)

在严格模式下执行

代码语言:javascript
复制
CREATE TABLE test44 (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
other TEXT NOT NULL DEFAULT'',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据结果:

代码语言:javascript
复制

如何设置默认值

  • 数据表中单个字段
代码语言:javascript
复制
ALTER TABLE 数据表名 MODIFY name VARCHAR (255) DEFAULT NULL;
  • 同一个数据表中多个字段
代码语言:javascript
复制
#用逗号(,)隔开即可
ALTER TABLE 数据表名 
MODIFY name VARCHAR (255) DEFAULT NULL,
MODIFY type INT (11) DEFAULT 0,
MODIFY com_id INT (11) DEFAULT 0,
MODIFY order_id INT (11) DEFAULT 0,
MODIFY farm_id INT (11) DEFAULT 0;

如何删除默认值

代码语言:javascript
复制
ALTER TABLE 数据表名
ALTER 字段名1 DROP DEFAULT,
ALTER 字段名2 DROP DEFAULT;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在严格模式下执行
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档