本文标识 : MQ0020
本文编辑 : 长安月下赏美人儿
编程工具 : MySQL、DBeaver
阅读时长 : 6分钟
前言
关于之前的文章分享,大致同小伙伴儿们共同学习了一些基础的 MySQL 知识,但是有一些很细碎的内容并未一一指出,故在此进行补充完善。
默认值问题的由来
在一个风和日丽的早晨,小编欢快的进行习题练习,插入了一个数据库,然后报错了,#1364 习惯性去网上查原因,于是发现了这个被忽略已久的问题,默认值。莫名发现,它是不声不响的大侠,如果没有处理好与它的关系,会死得很有节奏感!
MySQL 严格模式与非严格模式
小编也是瞪大了狗眼,原来还有不同的模式,也是新奇有趣。
如何开启MySQL 的严格模式
set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
MySQL 严格模式需要注意的小问题
1、not null 字段插入 null 值测试
例,插入一条 name 值为 null 的记录
在非严格模式下执行
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');
数据结果:
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');
数据结果:
2、自增长字段插入 '' 值测试
例,对 id 字段插入”值
在非严格模式下执行
INSERT INTO test11(id,name,other) VALUES('','','aaaaaa');
Query OK, 1 row affected, 1 warning (0.00 sec)
在严格模式下执行
INSERT INTO test00(id,name,other) VALUES('','','bbbbbbb');
数据结果:
3、text 字段默认值测试
例,创建数据表,设置 text 为默认值 default=''
在非严格模式下执行
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)
在严格模式下执行
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;
数据结果:
如何设置默认值
ALTER TABLE 数据表名 MODIFY name VARCHAR (255) DEFAULT NULL;
#用逗号(,)隔开即可
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;
如何删除默认值
ALTER TABLE 数据表名
ALTER 字段名1 DROP DEFAULT,
ALTER 字段名2 DROP DEFAULT;