首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL插入数据问题

MySQL插入数据问题
EN

Stack Overflow用户
提问于 2010-05-05 02:47:35
回答 3查看 222关注 0票数 0

假设我已经在MySQL中创建了一个表,如下所示

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `sales` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `client_id` smallint(5) unsigned NOT NULL,
  `order_time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `sub_total` decimal(8,2) NOT NULL,
  `shipping_cost` decimal(8,2) NOT NULL,
  `total_cost` decimal(8,2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Dumping data for table `sales`
--

如果我为当前表添加了一个新字段must_fill

代码语言:javascript
复制
 `must_fill` tinyint(1) unsigned NOT NULL,

默认情况下,用户可以向表中插入少于fiels项的数目,就像下面的脚本一样。

代码语言:javascript
复制
INSERT INTO `sales` (`id`, `client_id`, `order_time`, `sub_total`, `shipping_cost`, `total_cost`) VALUES
(8, 12312, '2007-12-19 01:30:45', 10.75, 3.00, 13.75);

这很好。

但是,当用户计划插入新数据时,如何将字段(must_fill)配置为必须包含的数据字段。

顺便说一句,代码将集成到PHP脚本中。

或者,我只能编写特殊的PHP脚本来判断must_fill是否为null,当用户试图运行插入到绑定了某些数据值的脚本时,是否为空?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-05 03:20:00

很难执行这一点,因为MySQL从来都不是这样设计的。NOT NULL表中的MySQL名称仅仅意味着该值永远不可能是NULL,而不是必须提供一个值:如果省略该值,MySQL将找到一个默认值。但是,如果省略了一个真正的值,则可以提供一个很烦人的默认值;确切地说,要使用什么取决于应用程序。

我也会看看MySQL服务器模式。您可能希望启用STRICT_ALL_TABLES,但这是一个相当苛刻的设置,如果您的应用程序是针对MySQL的宽松默认机制编程的,那么它可能会中断。

票数 2
EN

Stack Overflow用户

发布于 2010-05-05 03:30:44

甚至连check constraint都不能阻止MySQL插入整数的默认隐式:

代码语言:javascript
复制
create table YourTable (
  id int primary key
, must_fill tinyint not null
, constraint must_fill_constraint check (must_fill <> 0)
);
insert into YourTable (id) values (1);
select must_fill from YourTable t1;

这将打印0,尽管存在禁止0的约束。您可以更改此行为--我的启用严格模式

票数 0
EN

Stack Overflow用户

发布于 2010-05-05 03:35:02

如果不指定“严格模式”,MySQL将默认一个整数列(如must_fill )为零。尝试添加一个

设置会话sql_mode=STRICT_ALL_TABLES

在插入之前,您的示例插入现在应该会产生一个错误,因为没有为must_fill列提供任何值。

在启动MySQL守护进程时,可以将严格模式设置为命令行选项。详细信息在下面我提到的MySQL模式文档页面中。

MySQL模式http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2770314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档