前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >新增非空约束字段在不同版本中的演进

新增非空约束字段在不同版本中的演进

作者头像
bisal
发布于 2019-01-29 07:30:27
发布于 2019-01-29 07:30:27
3.3K00
代码可运行
举报
运行总次数:0
代码可运行

开发提了一个数据库变更需求,新增一字段,没有NOT NULL非空约束,但有默认值为NULL。看起来有些奇怪,因为若字段允许NULL,其默认值就是NULL,不用显示声明,可以创建一个无DEFAULT NULL的新增字段再查看desc表结构,就可以证明这点。

基于这问题,引申出的NOT NULL字段问题还有不少,也是比较容易忽视的一些细节,例如杨长老最近连续发表过两篇关于NOT NULL字段的文章确实很有启发,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
非空字段空值对查询的影响
http://yangtingkun.net/?p=1481
非空字段空值的产生
http://yangtingkun.net/?p=1483

具体各位可以参考这两篇博文,简单总结一下,11.2.0.3的库, 1.使用where type is null和is not null得到的记录结果判断值为非空。 2.使用dump(type)和nvl(type, ‘is null’)得到的记录结果判断值为空。 表定义中此字段为DEFAULT ” NOT NULL,事实证明(2)是正确的,之所以有(1)的结论,原因是CBO太智能了。 对于IS NOT NULL,type字段定义为NOT NULL,此SQL明显违反了表中的约束条件,则会在执行计划最上层增加一个NULL IS NOT NULL恒为假的条件,根本不需要真正执行这个SQL,直接返回0条记录。 对于IS NULL,由于查询条件满足约束的条件,因此Oracle会做全表扫描,并且省略了type is not null的过滤,直接返回所有记录,就造成了type非空的假象。 出现以上问题的核心,还是为何有为空的记录存储于有NOT NULL非空约束的表中。原因就是11g新特性,新增一个有默认值的NOT NULL约束的字段,默认值不会像以前一样,插入每条记录中,而是会存储于一张数据字典表sys.ecol$,Oracle允许NOT NULL列默认值为NULL,因此对于11g来说,需要禁止DEFAULT为NULL的这种行为。

这种新增非空约束字段在不同版本中确实有一些细节的变化,下面做一些简单测试。 首先,创建测试表,插入一条数据,新增列为NOT NULL且默认值是”的字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table bisal (id number);
insert into bisal values(1);
alter table bisal add name varchar2(10) default '' not null;

10.2.0.3库,从报错信息看ORA-01407,不能更新NAME列为空,可以看出此时是要将表中已存在记录的新列name做UPDATE设置为默认值的操作,由于有非空约束,因此不允许。

11.2.0.1库,可以新增字段,表中已存记录该值确实为空,即允许一个有NOT NULL约束的字段包含NULL值。

关于这新特性的好处,可以参考之前写的 《alter table新增字段操作究竟有何影响?(上下篇)》 http://blog.csdn.net/bisal/article/details/45418303 http://blog.csdn.net/bisal/article/details/49182025

12.1.0.2库,我们可以看出和10g一样,禁止新增一个默认值为NULL的NOT NULL约束字段,但报错信息变了,ORA-01758: table must be empty to add mandatory (NOT NULL) column,这个错误号在之前的版本有定义,不是新号。

根据错误提示,我们删除表中数据,再新增字段,可以增加,但不能再插入一条NULL至这个非空约束字段。

我们再看下官方文档的描述,11g中对于新增默认值字段的描述部分,明确指出NOT NULL约束包含默认值的情况下,是将默认值存储于数据字典中。

12c中描述允许为空的字段,若有默认值,不会更新已存数据,而是会借助数据字典完成存储,这种新特性的适用范围更广了。

由于我没有12c的sys真实环境,朋友可以自己尝试下,有机会我会自己再验证下。

至此,12c修复了11g中这个非空约束字段允许保存空值的bug,同时又支持11g新增默认值非空字段使用数据字典存储的特性,并且做了扩展支持,满足范围更大了。

小问题隐藏了大智慧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年11月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
视频融合平台EasyCVR多种协议的接入方式汇总及注意事项
EasyCVR具备较强的视频能力,可支持海量设备接入、汇聚与管理、视频监控、视频录像、云存储、回放与检索、智能告警、平台级联等功能。平台可支持多协议接入,包括:国标GB/T28181、RTMP、RTSP/Onvif协议,以及厂家的私有协议,如海康Ehome、海康SDK、大华SDK等,可覆盖市面上大多数的视频源设备。
TSINGSEE青犀视频
2022/10/13
1.4K0
EasyCVR实时录像接口教程:如何获取国标接入的摄像头设备录像?
EasyCVR视频融合云服务平台支持多协议、多类型的设备接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK,如海康Ehome、海康SDK、大华SDK等,对外可分发RTSP、RTMP、FLV、HLS、WebRTC等格式的高清/超高清(720p/1080p/2k/4k等)视频流,能覆盖市面上绝大多数的视频源设备,如网络摄像机、DVR、NVR、4G车载、4G手持单兵等。
TSINGSEE青犀视频
2022/05/25
7510
EasyCVR平台GIS电子地图:如何实现GPS坐标转换?
EasyCVR平台近期正在开发电子地图功能,该功能可将前端接入的设备(摄像头、车载监控、单兵、执法仪等)在GIS电子地图上实时显示,并且支持点击图标就能观看当前设备的实时视频监控。此外,平台还可支持绘制历史行驶轨迹、历史轨迹回放等功能,可应用在移动执法、车载监控等场景中。
TSINGSEE青犀视频
2022/05/11
8560
EasyCVR视频融合平台设备接入的步骤及端口配置的相关注意事项
EasyCVR视频融合平台基于云边端架构,能实现视频汇聚与集中管理、视频多端分发、多屏展示。平台可支持多协议与多类型设备接入,具体包括国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等,能对外分发RTMP、RTSP、HTTP-FLV、WS-FLV、HLS、WebRTC等。今天来给大家详细介绍下EasyCVR视频融合云平台的设备接入步骤。
TSINGSEE青犀视频
2023/05/11
6470
视频监控汇聚平台EasyCVR视频监控录像的3种方式介绍
视频监控综合管理平台EasyCVR可以实现海量资源的接入、汇聚、计算、存储、处理等,平台具备轻量化接入能力,可支持多协议方式接入,包括主流标准协议GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。
TSINGSEE青犀视频
2023/07/25
1K0
盘点:我国安防监控市场上3大常见的安防视频监控平台
我国的安防视频监控行业在过去几年里取得了快速发展,安防监控市场规模日益增长,预计未来几年还将保持较高增长率,这主要受到日益增长的需求和视频监控在公共安全领域的推动。今天我们就来盘点市面上性价比高、功能较多的3大常用视频监控平台及其特点。
TSINGSEE青犀视频
2023/09/15
5710
EasyCVR平台级联时,出现报错提示端口不可达是什么原因?
EasyCVR是我们支持协议最全面的视频平台,它能支持主流协议包括国标GB/T28181、RTMP、RTSP/Onvif协议,以及厂家的私有协议,如海康Ehome、海康SDK、大华SDK等。平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。
TSINGSEE青犀视频
2022/07/21
3090
EasyCVR平台如何正确配置设备移动侦测告警信息的上传?
EasyCVR视频融合平台基于云边端协同架构,支持海量视频汇聚管理,平台融合性强、拓展灵活、视频能力丰富,具体包括:视频监控直播、轮播、录像、视频转码、云存储、检索与回看、告警上报、电子地图、云台控制、语音对讲、集群、级联共享等。
TSINGSEE青犀视频
2023/04/11
6880
智慧安防监控系统EasyCVR(v3.4)开放协议的介绍及使用
安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC等视频流。今天我们来介绍一下关于EasyCVR(v3.4)开放协议的说明。
TSINGSEE青犀视频
2023/11/21
6100
设备通过国标GB28181/Ehome接入EasyCVR,视频无法打开的原因分析及解决
EasyCVR平台支持多类型设备、多协议方式接入,包括市场主流标准协议国标GB/T28181、RTMP、RTSP/Onvif协议等,以及厂家私有协议,如海康SDK、大华SDK、海康Ehome等。平台可将接入的流媒体进行处理及分发,分发的视频格式包括RTSP、RTMP、FLV、HLS、WebRTC等。
TSINGSEE青犀视频
2022/09/01
7200
如何让固定点的监控设备在EasyCVR平台GIS电子地图上显示地理位置?
我们在前期的文章中和大家分享过关于EasyCVR的电子地图功能,该功能可将前端接入的设备(摄像头、车载监控、单兵、执法仪等)在GIS电子地图上实时显示,并且支持点击图标就能观看当前设备的实时视频监控。感兴趣的用户可以翻阅我们往期的文章进行了解。EasyCVR平台的电子地图功能还可支持绘制历史行驶轨迹、历史轨迹回放等。
TSINGSEE青犀视频
2022/08/01
1.3K0
AI安防智能EasyCVR视频融合云平台白名单功能的配置教程
随着网络安全问题的日益泛滥,我们也越来越重视基于平台的网络安全功能开发。尤其是在视频监控行业,数据价值很隐私且珍贵,很容易被不法分子盯上,带来大量的恶意攻击等网络安全隐患。
TSINGSEE青犀视频
2022/03/25
6440
EasyCVR级联接入后,上级平台不发送ACK消息如何解决?
EasyCVR视频融合云服务平台可支持的协议十分广泛,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海康SDK、大华SDK等,更多私有协议及SDK也在持续拓展中。平台兼容性强、开放度高,具有强大的数据接入、处理及分发能力,目前已经应用在智慧工地、智慧校园、智慧社区、智慧楼宇、智慧安防等场景中。
TSINGSEE青犀视频
2022/06/15
5530
EasyCVR视频融合平台出现管理模块路由跳转异常情况该如何解决?
EasyCVR视频融合云平台开放度高、兼容性强、可支持灵活拓展与第三方集成,目前已经成为安防市场主流的视频能力层服务平台。平台可支持多协议、多类型的设备接入,包括国标GB28181、RTSP/Onvif、RTMP协议,以及海康/大华SDK、海康Ehome等,可兼容的设备类型包括IPC、NVR、编码器、移动执法仪、移动单兵、布控球等视频源设备。
TSINGSEE青犀视频
2022/10/11
3160
EasyCVR平台的设备导入及导出的规则调整说明
EasyCVR视频融合平台基于云边端一体化架构,可在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理。平台可支持的协议包括:国标GB/T28181、RTMP、RTSP/Onvif协议,以及厂家的私有协议,如海康Ehome、海康SDK、大华SDK等。
TSINGSEE青犀视频
2022/09/26
2880
安防视频/可视化监控云平台EasyCVR对接大华卡口摄像头告警的操作步骤
旭帆科技的国标GB28181视频融合平台EasCVR不仅具备传统的视频监控功能,还配备了智能分析算法,近期有用户需要在现场的摄像头配备AI识别的功能,如烟火、人脸识别、车牌识别等功能。
TSINGSEE青犀视频
2023/12/13
3570
安防监控/视频集中存储/云存储平台EasyCVR v3.3增加首页告警类型
安防监控/视频集中存储/云存储EasyCVR视频汇聚平台,可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等功能。
TSINGSEE青犀视频
2023/08/17
1980
安防视频监控EasyCVR视频汇聚平台与萤石云平台的适配方案分析
随着科技的不断发展,互联网技术逐渐深入到我们生活的各个领域。其中,安防监控领域受益于互联网技术的发展,逐渐呈现出智能化、高清化、远程化的趋势。本文将介绍一种基于萤石云与EasyCVR平台的安防视频监控解决方案,以满足用户对安全性、实时性、精准性等方面的需求。
TSINGSEE青犀视频
2023/10/16
4800
EasyCVR视频广场模块分组列表中,点击设备提示“通道未开启”是什么原因?
EasyCVR平台支持海量视频汇聚管理,能兼容多类型的设备接入,可覆盖市面上大多数的视频源设备,包括各种IPC、NVR、视频服务器、单兵设备、编码器设备等。平台可对前端接入设备进行统一管理,并能支持采用设备树对设备进行分组、分级管理,可支持设备状态监测、云端运维等功能,实现对海量接入资源的集中控制与权限分配。
TSINGSEE青犀视频
2022/09/23
2690
通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
EasyCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及平台级联等视频能力与服务。
TSINGSEE青犀视频
2023/04/26
3770
推荐阅读
视频融合平台EasyCVR多种协议的接入方式汇总及注意事项
1.4K0
EasyCVR实时录像接口教程:如何获取国标接入的摄像头设备录像?
7510
EasyCVR平台GIS电子地图:如何实现GPS坐标转换?
8560
EasyCVR视频融合平台设备接入的步骤及端口配置的相关注意事项
6470
视频监控汇聚平台EasyCVR视频监控录像的3种方式介绍
1K0
盘点:我国安防监控市场上3大常见的安防视频监控平台
5710
EasyCVR平台级联时,出现报错提示端口不可达是什么原因?
3090
EasyCVR平台如何正确配置设备移动侦测告警信息的上传?
6880
智慧安防监控系统EasyCVR(v3.4)开放协议的介绍及使用
6100
设备通过国标GB28181/Ehome接入EasyCVR,视频无法打开的原因分析及解决
7200
如何让固定点的监控设备在EasyCVR平台GIS电子地图上显示地理位置?
1.3K0
AI安防智能EasyCVR视频融合云平台白名单功能的配置教程
6440
EasyCVR级联接入后,上级平台不发送ACK消息如何解决?
5530
EasyCVR视频融合平台出现管理模块路由跳转异常情况该如何解决?
3160
EasyCVR平台的设备导入及导出的规则调整说明
2880
安防视频/可视化监控云平台EasyCVR对接大华卡口摄像头告警的操作步骤
3570
安防监控/视频集中存储/云存储平台EasyCVR v3.3增加首页告警类型
1980
安防视频监控EasyCVR视频汇聚平台与萤石云平台的适配方案分析
4800
EasyCVR视频广场模块分组列表中,点击设备提示“通道未开启”是什么原因?
2690
通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
3770
相关推荐
视频融合平台EasyCVR多种协议的接入方式汇总及注意事项
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验