精华内容
下载资源
问答
  • 在做一个移植的时候报错,违反唯一性约束,检查表结构发现只有主键才有唯一性约束,但是表结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?检查数据发现是主键...

    在做一个移植的时候报错,违反唯一性约束,检查表结构发现只有主键才有唯一性约束,但是表结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?检查数据发现是主键字段数据末尾含有空格导致的。

    比如在oracle新建一个test表,字段C1作为主键 ,如下:
    在这里插入图片描述
    插入数据时可以这样写:

    INSERT INTO TEST VALUES('A','1')
    INSERT INTO TEST VALUES('A ','1')
    INSERT INTO TEST VALUES(' A','1')
    

    在这里插入图片描述
    这样都能顺利插入表中而不违反主键的约束,但是达梦数据库默认会去掉数据末尾的空格,违反唯一约束性。

    解决办法:
    修改dm.ini配置文件设置BLANK_PAD_MODE=1即可兼容这一问题。

    展开全文
  • Oracle约束怎么写

    2019-04-05 22:28:44
    Oracle约束 1、什么是约束? 约束是表级的强制规定。 2、有什么约束? 两种类型: ·列约束:只能作用在列上,定义在列后面 ...·unique - 唯一性约束 ·primary key -主键约束 ·foreign key - 外键约束 ·ch...

    Oracle约束
    1、什么是约束?
    约束是表级的强制规定。
    2、有什么约束?
    两种类型:
    ·列约束:只能作用在列上,定义在列后面
    ·表约束:可以作用在多个列上,也可以作用在单个列上,单独定义
    ·非空约束(not null):只定义在列后面
    五种约束:
    ·Not null -非空约束
    ·unique - 唯一性约束
    ·primary key -主键约束
    ·foreign key - 外键约束
    ·check - 检查性约束
    3、五种约束
    ·Not null -非空约束
    只能定义在列级。
    在这里插入图片描述
    ·unique - 唯一性约束
    允许出现多个null值;不允许出现重复值。
    在这里插入图片描述
    ·primary key -主键约束
    不允许出现空值。
    在这里插入图片描述
    ·foreign key - 外键约束
    关键词:foreign key:在表级指定子表中的列;references:标识在父表中的列;
    on delete cascade:当父表中的列被删除时,子表中相对应的列也被删除;
    on delete set null:清空子表中相应的列。
    在这里插入图片描述
    ·check - 检查性约束
    定义每行必须满足的条件。Salary的值不能低于2千,不能超过5万。
    在这里插入图片描述
    在这里插入图片描述
    4、创建约束的方法
    方法一:

    create table emp10(
    employee_id        number(6) primary key,--主键
    last_name          varchar2(25) not null,--非空 __只能定义在列上
    email               varchar2(25) constraint emp10_u unique,
    --唯一性约束;constraint:给约束命名(可忽略)
    salary          	number(8,2) check(salary > 20000 and salary < 50000),--检查性约束
    department_id     number(4),
    foreign key (department_id) references departments(department_id) --foreign key():定义外键;references父表(主键)
    );
    

    方法二:

    --如果不指定约束名,Oracle server 自动按照sys_Cn的格式指定约束名
    create table emp10(
    employee_id       number(6),
    last_name         varchar2(25),
    email              varchar2(25),
    salary             number(8,2),
    department_id     number(4),
    foreign key(department_id)references departments(department_id) on delete cascade,--on delete cascade:可以直接删除父表个子表
    foreign key(department_id)references departments(department_id) on delete set null,--on delete set null:可以清空子表的列
    primary key(employee_id),--定义主键
    check(salary>20000),--定义工资条件必须大于2万
    unique(email)--定义邮箱的唯一性
    );
    

    5、约束操作语法

    --添加约束
    create table     emp10
    add constraint  emp_manager_fk 
    foreign key(manager_id)references employees(employee_id);
    table altered.
    --删除约束
    create table      emp10
    drop constraint  emp10;
    Table altered.
    --无效化约束
    create table		employees
    disable constraint	emp_emp_id_pk;
    Table altered.
    --查询定义约束名
    SELECT	constraint_name, column_name
    FROM	user_cons_columns
    WHERE	table_name = 'EMPLOYEES';
    --激活约束——enable 子句可将当前无效的约束激活 
    alter table		employees
    enable constraint	emp_emp_id_pk;
    Table altered.
    --查询约束
    select	constraint_name, constraint_type,search_condition
    from	user_constraints
    where	table_name = 'EMPLOYEES';
    

    感谢您的阅读,祝您阅读愉快!
    如何使用Oracle视图?
    2018UI课程总结(UI理论篇)
    什么是Java算数运算符?
    令程序员泪流满面的瞬间,实在忍不住笑了
    AE基础界面设置和旋转加载案例
    《酒店管理系统——桑拿、沐足模块》项目研发阶段性总结
    Oracle 基础知识汇总
    PS快捷键

    展开全文
  • 最近,在做一个移植的时候经常会报错,违反唯一性约束,检查表结构发现只有主键才有唯一性约束,但是表结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?...

    最近,在做一个移植的时候经常会报错,违反唯一性约束,检查表结构发现只有主键才有唯一性约束,但是表结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?检查数据发现是主键字段数据末尾含有空格导致的。

            比如在oracle新建一个test表,两个字段C1、C2中前者作为主键 ,如下:

     

     

            数据可以是这样:


     

            插入数据时可以这样写:
    INSERT INTO TEST VALUES('A','1')
    INSERT INTO TEST VALUES('A ','1')
    INSERT INTO TEST VALUES(' A','1')


            这样都能顺利导入表中而不违反主键的约束,但是达梦数据库默认会去掉数据末尾的空格,会违反唯一约束性。

    INSERT INTO TEST VALUES('A','1')
    INSERT INTO TEST VALUES('A ','1')

    某些版本可使用参数兼容这一问题,建库的时候设置BLANK_PAD_MODE=1即可兼容这一问题。

    展开全文
  • COMMENT ON COLUMN "public"."tc_exam_paper_subject"."xml_config" IS '其他设置, 以xml方式存储扩展, 值域, 约束(如外部引用, 范围, 唯一性, 等), 和其他题目的关联性, 互斥性'; COMMENT ON COLUMN "public"."tc_...
  • 最近有不少朋友留言或者微信问我一个问题,出乎我的意料,问题竟然都是很...之前了一篇文章 一个清理和查询都要兼顾的简单方案,看来很多朋友还是很关心这个分区索引中的唯一性约束怎么建立的。我举个例子,当...
    最近有不少朋友留言或者微信问我一个问题,出乎我的意料,问题竟然都是很相似的,所以我统一答复一下。
    之前写了一篇文章 一个清理和查询都要兼顾的简单方案,看来很多朋友还是很关心这个分区索引中的唯一性约束是怎么建立的。我举个例子,当然内容中会贯穿说到你们的疑问,而且很可能你么对于约束和索引还是存在这一些误解。
    首先我们创建一个测试表,为了简单起见,也没有注意很多的命名规则了。
    create table test (id number,name varchar2(30))
    partition by range(id)
    (
    partition p1 values less than(1),
    partition p100 values less than (100),
    partition p200 values less than(200)
    );
    我们就举unique约束的例子吧。
    添加约束有很多种语法来实现。比如下面的三种
    alter table test modify(id unique);
    alter table test add constraint con_test_id_uq unique(id);
    alter table test add (constraint con_test_id_uq unique(id));
    首先我们来简单说明一个地方,就是generated的含义。
    创建一个唯一性约束
    alter table test modify(id unique);
    这个时候查看约束的时候,发现约束名是系统自动生成的。
    SQL>  select constraint_name,table_name from user_constraints where table_name='TEST';
    CONSTRAINT_NAME                TABLE_NAME
    ------------------------------ ------------------------------
    SYS_C0031909                   TEST
    那么对应的index的情况如何呢。发现也是自动生成的,这个时候字段generated的含义就是约束名是系统自动生成的。
    SELECT OWNER,CONSTRAINT_NAME,TABLE_NAME,GENERATED,INDEX_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST';
    OWNER                          CONSTRAINT_NAME                TABLE_NAME                     GENERATED            INDEX_NAME
    ------------------------------ ------------------------------ ------------------------------ -------------------- ------------------------------
    TEST                           SYS_C0031909                   TEST                           GENERATED NAME       SYS_C0031909
    好了,我们删除这个约束,继续测试,删除的同时会把约束也一并删除。
    SQL> ALTER TABLE TEST DROP CONSTRAINT SYS_C0031909 CASCADE;
    Table altered.
    这个时候我们创建一个约束,指定约束名。当然下面两种语法都没有问题的。这就体现了Oracle语法解析器的强大之处。
    alter table test add constraint con_test_id_uq unique(id);
    --alter table test add (constraint con_test_id_uq unique(id));
    当然创建出来约束之后,再来看看约束udev情况。
    SQL> select constraint_name,table_name from user_constraints where table_name='TEST';
    CONSTRAINT_NAME                TABLE_NAME
    ------------------------------ ------------------------------
    CON_TEST_ID_UQ                 TEST
    查看索引的情况,发现这个时候generated是user name,也就是用户指定的名字。
    SQL> SELECT OWNER,CONSTRAINT_NAME,TABLE_NAME,GENERATED,INDEX_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST';

    OWNER                          CONSTRAINT_NAME                TABLE_NAME                     GENERATED            INDEX_NAME
    ------------------------------ ------------------------------ ------------------------------ -------------------- ------------------------------
    TEST                           CON_TEST_ID_UQ                 TEST                           USER NAME            CON_TEST_ID_UQ
    好了,到了大家关注的地方了,这个时候对这个分区表创建唯一性约束,默认是会创建一个唯一性索引,但是这个索引是一个全局索引。查看分区索引的数据字典视图,没有任何信息可以佐证。
    SQL> SELECT INDEX_NAME,PARTITION_NAME FROM USER_IND_PARTITIONS WHERE INDEX_NAME='CON_TEST_ID_UQ';
    no rows selected

    好了,这个时候我来矫正一些知识点,首先来说上面两种创建约束的方式,从规范的角度来说应该是需要使用第二种的,约束名也是望名知义。小规则还是包含着大智慧。
    然后对于创建Unique的本地约束,带有本地索引该怎么做呢,这个时候需要先创建索引,然后创建约束绑定起来。
    首先删除创建的测试约束,开始正式的创建。alter table test drop constraint con_test_id_uq;
    创建本地索引。
    create unique index ind_test_uq on test(id) local;
    这个时候还没有唯一性约束生成。
    SQL>  SELECT OWNER,CONSTRAINT_NAME,TABLE_NAME,GENERATED,INDEX_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST';
    no rows selected
    然后创建约束,这个时候仔细观察,其实会发现约束名和索引名是不同的。也是各司其职。
    alter table test add constraint con_test_uq unique(id)  using  index ind_test_uq ;
    SQL> SELECT OWNER,CONSTRAINT_NAME,TABLE_NAME,GENERATED,INDEX_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST';
    OWNER                CONSTRAINT_NAME                TABLE_NAME                     GENERATED      INDEX_NAME
    -------------------- ------------------------------ ------------------------------ -------------- ------------------------------
    TEST                 CON_TEST_UQ                    TEST                           USER NAME      IND_TEST_UQ
    这个时候索引约束就映射起来了。如果直接删除索引,会有下面的报错。
    SQL> DROP INDEX IND_TEST_UQ;
    DROP INDEX IND_TEST_UQ
               *
    ERROR at line 1:
    ORA-02429: cannot drop index used for enforcement of unique/primary key
    对于这类的错误,尤其是生产环境中还是让人非常头痛的。
    我们可以drop或者disable约束,然后删除即可。
    SQL> ALTER TABLE TEST DROP CONSTRAINT CON_TEST_UQ;
    Table altered.

    SQL> DROP INDEX IND_TEST_UQ;
    Index dropped.
    如果你觉得这种方式有些特别,那么我们来看看tom怎么说。在这一点上,其实Oracle也是建议做一个权衡,还是做到索引和约束的分离。
    Oracle recommends that unique indexes be created explicitly, and not through enabling a unique constraint on a table.
    Alternatively, you can define UNIQUE integrity constraints on the desired columns. Oracle enforces UNIQUE integrity constraints by automatically defining a unique index on the unique key. However, it is advisable that any index that exists for query performance, including unique indexes, be created explicitly.

    当然如果觉得上面的描述有些长,来两句简单的。
    A unique constraint does not necessarily create an index.
    A unique constraint does not necessarily create a UNIQUE index.

    如果还觉得不好理解,还有方法。
    a) unique did not create an index
    b) unique does not need a unique index
    如果还不理解,我们做个小的实验。
    SQL> create table t( x int, y int );
    Table created.

    SQL> create index t_idx on t(x,y);
    Index created.

    SQL> alter table t add constraint t_unique unique(x);
    Table altered.

    SQL> select index_name,uniqueness,index_type from user_indexes where table_name ='T';
    INDEX_NAME                     UNIQUENES INDEX_TYPE
    ------------------------------ --------- ---------------------------
    T_IDX                          NONUNIQUE NORMAL
    可以看到我们创建的压根不是唯一性索引,但是可以和普通索引映射起来。
    SQL> SELECT OWNER,CONSTRAINT_NAME,TABLE_NAME,GENERATED,INDEX_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='T'
    OWNER                          CONSTRAINT_NAME                TABLE_NAME                     GENERATED      INDEX_NAME
    ------------------------------ ------------------------------ ------------------------------ -------------- ------------------------------
    TEST                           T_UNIQUE                       T                              USER NAME      T_IDX
    明白了这一点,其实对于理解约束和索引的关系和关联还是很有帮助的。
    个人觉得为什么索引和约束要分开,有一个很大的原因就是因为约束disable的情况下,索引会连带删除。
    SQL> create table test2(id number,name varchar2(30));
    Table created.
    SQL>  alter table test2 add constraint con_test2_id_uq unique(id);
    Table altered.
    插入一些数据。
    SQL> insert into test2 select object_id,object_name from all_objects;
    72888 rows created.
    SQL> commit;
    Commit complete.
    索引和约束的关系如下:
    SQL> select constraint_name,status,index_name from user_constraints where table_name='TEST2';
    CONSTRAINT_NAME                STATUS   INDEX_NAME
    ------------------------------ -------- ------------------------------
    CON_TEST2_ID_UQ                ENABLED  CON_TEST2_ID_UQ
    把约束置为失效
    SQL> alter table test2 disable constraint con_test2_id_uq;
    Table altered.
    这个时候再次查看,索引已经没有了踪影,对应的段也不存在了。
    SQL>  select constraint_name,status,index_name from user_constraints where table_name='TEST2';
    CONSTRAINT_NAME                STATUS   INDEX_NAME
    ------------------------------ -------- ------------------------------
    CON_TEST2_ID_UQ                DISABLED
    如果这个表非常大,这种操作的影响还是非常的大的,如果是分区表的全局索引那么影响也是全局性的。简单点说还是杀伤力太大。个人见解而已。


    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1975057/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/23718752/viewspace-1975057/

    展开全文
  • 索引对数据库性能的影响? 本质:缩小查询范围。大大减少需要扫描的数据量。大大提高查询的速度,降低的速度,占用磁盘。...主键可以和外键构成参照完整性约束,防止数据不一致。 mysql索引的创建原则? ...
  • SQL Server 有各种强制执行实体完整的机制,包括索引、唯一约束、主键约束和触发器。 在前面 参考官方文档https://support.microsoft.com/zh-cn/help/139444/how-to-remove-duplicate-rows-from-a-table
  • 当然,如果老外在我国市场有代理人、成立了合资或独资公司什么的,也就是说如果老外接受我们的法律约束并为我们的市场交税的话我们是没有理由打劫老外内核作者的开发费的,那个时候开源矿工会立即停止打劫老外内核...
  • 如果ignore=y oracle导入dmp文件时会出现违反唯一性约束的错误,如果不ignore=y或者设置 忽略创建错误:nooracle 的话 就会出现对象已存在错误 怎么才能正确导入啊
  • 主键保证了记录的唯一性 主键自动为NOT NULL CREATE TABLE Student(id int PRIMARY KEY ,S_name VARCHAR(20)); 在数据库中有组织的保存数据,我怎么确认这条数据和那条数据不一样呢?就是通过这个主键,通过...
  • 5.是否每一个具体需求都有唯一的编号 是[ ] 否[ ] NA[ ] 6.每一个需求是否切实可行、可测试、前后一致、彼此不冲突 是[ ] 否[ ] NA[ ] 7.是否说明了对每个输入的验证措施,并描述了每个输入的属性,如:度量单位、...
  • C、数据交换的完整性 D、数据存储的唯一性 以下关于加密说法正确的是___A____。 A、加密包括对称加密和非对称加密两种 B、信息隐藏是加密的一种方法 C、如果没有信息加密的密钥,只要知道加密程序的细节就可以对...
  • 每个微服务都有自己独立的数据库,那么后台管理的联合查询怎么处理?这应该是大家会普遍遇到的一个问题,有三种处理方案。 1、严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时...
  • 3.2.4 如果系综相对于自相关是平稳的,一组图像的系综自相关矩阵的形式是怎么样的? 154 3.2.5 如何根据一幅图像的矢量表达,从1-D 自相关函数得到其2-D 自相关矩阵? 155 3.2.6 如何能变换图像使其自相关矩阵...
  • 11.4.4 实现有选择的唯一性 424 11.4.5 关于ORA-01743的警告 424 11.4.6 基于函数的索引小结 425 11.5 应用域索引 -1 11.6 关于索引的常见问题和神话 426 11.6.1 视图能使用索引吗 427 11.6.2 Null和索引能...
  • sql总结.doc

    2019-08-27 22:08:51
    1.创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2.可以加大数据的检索速度,这也是创建索引的主要原因。 3.可以加速表与表之间的连接效率。 4.在分组排序时使用索引,可以减少分组排序的时间。 (6)...
  • 5.1.2 在非键列上强制唯一性 170 5.1.3 在多个列上创建索引 171 5.1.4 定义索引列排序方向 172 5.1.5 查看索引元数据 172 5.1.6 禁用索引 174 5.1.7 删除索引 174 5.1.8 使用DROP_EXISTING改变既有...
  • 5.6 数据一致和数据并发 155 5.6.1 数据库写入器和前协议 155 5.6.2 SCN 156 5.6.3 撤销管理 156 5.7 备份与恢复体系结构 157 5.7.1 用户管理的备份与恢复 157 5.7.2 RMAN 157 5.7.3 Oracle ...
  • 客户请求是使对象执行操作的唯一方法,操作又是对象改变内部数据的唯一方法。由于这些限 制,对象的内部状态是被封装的,它不能被直接访问,它的表示对于对象外部是不可见的。 面向对象设计最困难的部分是将系统...
  • 这一约束限制了程序的灵活,所以虽然某些java数据存储于堆栈中——特别是对象引用,但是java对象并不存储其中。 3) 堆 一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    用例只描述参与者和系统在交互过程中做些什么,并不描述怎么做。 用例图 关联关系 用例图 泛化关系 用例图 泛化关系 用例图 用例图 用例图 用例用于什么情况? 不知道什么情况不用用例 如果没有用到用例,...
  • asp.net知识库

    2015-06-18 08:45:45
    忽略大小Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    17.3 读 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    17.3 读 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 ...
  • 前端限制了一些代码拼写规范、console.log禁用、alert禁用</code> 等 <a href="https://palantir.github.io/tslint/rules/">tslint的约束</a>,这些都可以在工程下自定义维护规则。aot构建是为了进一步检查...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

唯一性约束怎么写