首页 > 语言 > 关键词  > Mysql字符集最新资讯  > 正文

简简单单掌握对MySQL无效数据的约束

2008-05-26 13:28 · 稿源:互联网

在MySQL 5.0.2之前,MySQL对非法或不当值并不严厉,而且为了数据输入还会强制将它们变为合法值。在MySQL 5.0.2和更高版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。本节介绍了MySQL的默认行为(宽大行为),新的严格的SQL模式,以及它们的区别。

如果你未使用严格模式,下述情况是真实的。如果将“不正确”的值插入到列,如将NULL值插入非NULL列,或将过大的数值插入数值列,MySQL会将这些列设置为“最可能的值”,而不是生成错误信息。

· 如果试图将超范围的值保存到数值列,MySQL服务器将保存0(最小的可能值)取而代之,或最大的可能值。

· 对于字符串,MySQL或保存空字符串,或将字符串尽可能多的部分保存到列中。

· 如果打算将不是以数值开头的字符串保存到数值列,MySQL将保存0。

· MySQL允许将特定的不正确日期值保存到DATE和DATETIME列(如“2000-02-31”或“2000-02-00”)。其观点在于,验证日期不是SQL服务器的任务。如果MySQL能保存日期值并准确检索相同的值,MySQL就能按给定的值保存它。如果日期完全不正确(超出服务器能保存的范围)将在列中保存特殊的日期值“0000-00-00”取而代之。

· 如果试图将NULL值保存到不接受NULL值的列,对于单行INSERT语句,将出现错误。对于多行INSERT语句或INSERT INTO ... SELECT语句,MySQL服务器会保存针对列数据类型的隐含默认值。一般情况下,对于数值类型,它是0,对于字符串类型,它是空字符串(''),对于日期和时间类型是“zero”。

· 如果INSERT语句未为列指定值,如果列定义包含明确的DEFAULT子句,MySQL将插入默认值。如果在定义中没有这类DEFAULT子句,MySQL会插入列数据类型的隐含默认值。

采用前述规则的原因在于,在语句开始执行前,无法检查这些状况。如果在更新了数行后遇到这类问题,我们不能仅靠回滚解决,这是因为存储引擎可能不支持回滚。中止语句并不是良好的选择,在该情况下,更新完成了“一半”,这或许是最差的情况。对于本例,较好的方法是“仅可能做到最好”,然后就像什么都未发生那样继续。

在MySQL 5.0.2和更高版本中,可以使用STRICT_TRANS_TABLES或STRICT_ALL_TABLES SQL模式,选择更严格的处理方式。

STRICT_TRANS_TABLES的工作方式:

· 对于事务性存储引擎,在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。

· 对于非事务性存储引擎,如果错误出现在要插入或更新的第1行,将放弃语句。(在这种情况下,可以认为语句未改变表,就像事务表一样)。首行后出现的错误不会导致放弃语句。取而代之的是,将调整不良数据值,并给出告警,而不是错误。换句话讲,使用STRICT_TRANS_TABLES后,错误值会导致MySQL执行回滚操作,如果可以,所有更新到此为止。

要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存储引擎,它与STRICT_TRANS_TABLES等同,即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语句。这意味着,如果错误出现在非事务性表多行插入或更新过程的中途,仅更新部分结果。前面的行将完成插入或更新,但错误出现点后面的行则不然。对于非事务性表,为了避免这种情况的发生,可使用单行语句,或者在能接受转换警告而不是错误的情况下使用STRICT_TRANS_TABLES。要想在第1场合防止问题的出现,不要使用MySQL来检查列的内容。最安全的方式(通常也较快)是,让应用程序负责,仅将有效值传递给数据库。

有了严格的模式选项后,可使用INSERT IGNORE或UPDATE IGNORE而不是不带IGNORE的INSERT或UPDATE,将错误当作告警对待。

举报

  • 相关推荐
  • 忆联 Docker+MySQL 流控方案:打造安全高效存储底座,释放 AI 极致性能

    文章探讨了在AI时代背景下,基于Docker部署MySQL数据库的高效解决方案。通过Docker容器化技术,MySQL实现了灵活部署、资源高效利用和稳定隔离性,成为AI应用的首选数据库方案。测试结果显示,采用PCIe5.0企业级SSD配合Namespace技术和QoS优化策略,能精准控制性能偏差在2%以内,在混合读写场景下更可控制在1%以内。该方案显著提升了存储资源管理效率,为AI应用提供稳定可靠的数据存储支持,同时降低企业TCO成本,推动数据价值释放。

  • 这届消费者,真愿意为“简单”的618买单

    正值618,电商平台的反内卷终于迈出了一大步。 今年的618大概是史上最简单的618,作为主力平台之一的天猫将“满减”取消,改成了“立减叠券”,而简单的玩法恰恰迸发出了更大的活力。据天猫公布,截至5月30日晚9点,217个品牌在天猫平台成交破亿,各大行业成交超越预期。 曾几何时,电商购物节规则复杂得像迷宫。消费者为省折扣,在海量商品里反复横跳、精心计算凑

  • 毕业6年存130万小伙每月吃饭500元 称不会去无效社交

    ​近日,一位29岁小伙毕业六年存下130万元,且每餐吃饭仅花几块钱的消息在网络上引发广泛关注。 小小草(网名“北漂的小小草”)大学毕业六年来,工作经历颇为丰富,曾尝试过多份不同工作,如今在互联网大厂担任主播一职,同时还发展了自媒体作为副业。在消费方面,他有着自己独特的理念和方式。小小草透露,每月最大的开支是房租,大概在2500元到2600元之间。为�

  • 销售易营销Agent重磅上线!智能拓客、精准触达,让业绩增长更简单

    文章探讨了企业如何通过智能营销Agent实现精准获客。在流量红利消退、降本增效的背景下,企业转向存量客户价值挖掘。营销Agent能:1)分析客户画像,精准推荐潜在客户;2)识别老客户复购机会;3)智能匹配营销策略,实现一键触达。通过三个典型场景展示了如何"以存量博增量",包括复制成功客户案例、挖掘交叉销售机会、个性化营销触达。该方案打破了数据壁垒,解决了客户识别难、拓客难、触达难等问题,为企业提供持续增长动能。

  • 如何用内网穿透实现Windows远程桌面异地访问?只需简单3步!

    文章介绍了远程访问公司电脑的解决方案。传统Windows远程桌面存在配置复杂、网络穿透困难等问题,而花生壳内网穿透工具能简化这一过程。具体操作分三步:1)在公司电脑安装花生壳客户端并登录;2)在管理平台添加内网映射,填写主机IP和端口;3)生成远程访问地址后,在外网电脑通过mstsc命令连接。该方法无需复杂配置,能实现跨网络远程办公,支持文件编辑等操作,有效提升工作效率,满足不同场景下的远程办公需求。

  • 给AI打工的人,迷失在数据标注里

    北京798附近的一家咖啡馆内,AI数据标注师廖仔在交谈中一再提到店里的咖啡机器人。 在这家占地近3000平米的咖啡馆内,不少咖啡师围绕着中央圆形岛台工作,但其中最引人瞩目的是一台人型机械臂的咖啡机器人。据说,该机器人的脸还是依据咖啡店主理人建模而成。 如果时间回到三四年前,廖仔想不到机器人可以冲咖啡,也想不到自己会进入AI赛道。 99年出生的他,专科�

  • 深耕大数据与AI,我来数科夯实科技底座

    文章介绍了金融科技行业数字化转型的快速发展,重点聚焦"我来数科"这一领先金融科技平台。该平台以大数据和人工智能技术为核心,通过自主研发的实时大数据处理平台,在风控、营销预测等场景实现秒级数据分析,已累计服务超6000万用户。平台通过与金融机构、互联网巨头等深度合作,优化产品逻辑和用户体验,解决普惠金融痛点。未来将持续深耕"科技+服务"双轮驱动模式,在合规与创新间寻求平衡,探索更具创造力的数字金融解决方案。

  • 2025年数据建模工具推荐榜单:三款领先产品深度测评,破解源端数据治理难题

    文章介绍了三款2025年主流数据建模工具:Datablau DDM、ERwin Data Modeler和PowerDesigner。Datablau DDM是国产新一代数据建模工具,由原ERwin核心团队打造,深度融合数据治理理念,支持从源头进行数据治理,已广泛应用于金融、能源等行业。ERwin Data Modeler是行业标杆产品,提供全生命周期建模能力,支持传统数据库到大数据平台。PowerDesigner是企业级综合建模平台,支持数据建模、业务流程建模和应用架构设计,具有强大的集成与可追溯性。三款工具各具特色,分别从国产化、行业严谨性和企业架构整合等维度,为企业破解数据标准落地难题、实现高效数据治理提供有力支撑。

  • 金蝶征信以AI技术加大数据征信服务

    中国人民银行备案企业征信机构金蝶征信表示,将运用AI和大数据技术提升企业征信服务能力,助力中小微企业融资。作为"珠三角征信链"首批共建单位,该公司创新运用非信贷替代数据,通过AI模型进行风险评估,解决小微企业融资难题。目前企业注册登记等公开信息已实现全覆盖,征信机构提供智能信用评分、AI反欺诈等智能化产品服务。人民银行推动建立全国统一的企业金融信用信息基础数据库,并构建长三角、珠三角等区域征信链,截至2022年8月末已共享2.51亿条信用信息,为AI分析提供数据支撑。

  • B端制胜:商业大数据行业的未来战场

    中国商业大数据行业正迎来高速发展期,市场规模从2017年的131.1亿元增长至2022年的406.2亿元,预计2027年将达1040.9亿元,年复合增长率20.7%。当前行业面临关键转折:虽然C端服务因用户基数庞大成为流量入口,但未来决胜点在于B端企业级市场。企业需从工具提供转向解决方案交付,深入垂直行业痛点场景,如供应链安全数字化管理等刚需领域。唯有通过标准化、智能化方案解决企业核心业务痛点,服务商才能在这片蓝海中赢得未来。行业终局将属于那些真正赋能企业、让数据创造价值的深耕者。