插入不适用于 mysql 5.7.12-0?
insert not working on mysql 5.7.12-0?
我的 table 结构是
CREATE TABLE IF NOT EXISTS `emp` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`name` varchar(11) DEFAULT NULL,
`age` varchar(31) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
我的查询是:
INSERT INTO `emp` (`id`, `name`) VALUES ('1', 'prashant');
这适用于 5.7 以下的所有 MYSQL 版本,但不适用于 MYSQL 版本 5.7.12-0ubuntu1
获取错误:
#1364 - Field 'age' doesn't have a default value
这个版本有什么新内容??
在5.7以下的mysql版本上试试看,你会看到区别的。
谢谢 :-)
您的 table 年龄描述为 not null
。
`age` varchar(31) NOT NULL
所以,它是插入的必填字段。
如果这在 mysql 的任何版本中都有效,那将是一个巨大的惊喜。将其复制粘贴到 sqlfiddle.com(mysql 5.6 或 5.5)并自行确认。
age
定义为 varchar(31)
而不是 null。因此,您的插入语句应该具有该列的值。或者你应该给它一个默认值。当你在使用它时,将其更改为更合适的数据类型。
CREATE TABLE IF NOT EXISTS `emp` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`name` varchar(11) DEFAULT NULL,
`age` int(3) NOT NULL default 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
更新:
再考虑一下,我想你已经关闭了旧版本的 mysql
中的 Strict Mode
Strict mode controls how MySQL handles invalid or missing values in
data-change statements such as INSERT or UPDATE. A value can be
invalid for several reasons. For example, it might have the wrong data
type for the column, or it might be out of range. A value is missing
when a new row to be inserted does not contain a value for a non-NULL
column that has no explicit DEFAULT clause in its definition. (For a
NULL column, NULL is inserted if the value is missing.) Strict mode
also affects DDL statements such as CREATE TABLE.
原来我的说法是错误的!关闭字符串模式后,varchar 的默认值可能是 ''(不确定,但从未关闭过严格模式)
NOT NULL
约束强制字段始终包含一个值。这意味着您无法插入新记录或更新记录而不向此 field.You 添加值必须在您的 insert
查询中也为年龄提供值,因为它不能 null
。例如:-
insert into emp(`id`,`name`,`age`) values('1','rahul','26')
希望这对您有所帮助!!.评论进一步查询
我的 table 结构是
CREATE TABLE IF NOT EXISTS `emp` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`name` varchar(11) DEFAULT NULL,
`age` varchar(31) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
我的查询是:
INSERT INTO `emp` (`id`, `name`) VALUES ('1', 'prashant');
这适用于 5.7 以下的所有 MYSQL 版本,但不适用于 MYSQL 版本 5.7.12-0ubuntu1
获取错误:
#1364 - Field 'age' doesn't have a default value
这个版本有什么新内容??
在5.7以下的mysql版本上试试看,你会看到区别的。
谢谢 :-)
您的 table 年龄描述为 not null
。
`age` varchar(31) NOT NULL
所以,它是插入的必填字段。
如果这在 mysql 的任何版本中都有效,那将是一个巨大的惊喜。将其复制粘贴到 sqlfiddle.com(mysql 5.6 或 5.5)并自行确认。
age
定义为 varchar(31)
而不是 null。因此,您的插入语句应该具有该列的值。或者你应该给它一个默认值。当你在使用它时,将其更改为更合适的数据类型。
CREATE TABLE IF NOT EXISTS `emp` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`name` varchar(11) DEFAULT NULL,
`age` int(3) NOT NULL default 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
更新:
再考虑一下,我想你已经关闭了旧版本的 mysql
中的 Strict ModeStrict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.) Strict mode also affects DDL statements such as CREATE TABLE.
原来我的说法是错误的!关闭字符串模式后,varchar 的默认值可能是 ''(不确定,但从未关闭过严格模式)
NOT NULL
约束强制字段始终包含一个值。这意味着您无法插入新记录或更新记录而不向此 field.You 添加值必须在您的 insert
查询中也为年龄提供值,因为它不能 null
。例如:-
insert into emp(`id`,`name`,`age`) values('1','rahul','26')
希望这对您有所帮助!!.评论进一步查询