精华内容
下载资源
问答
  • 这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 work 的。 后来由于需求的变化,修改了以前的唯一性约束,又多加了一列。(至于为什么加就不赘述了)。 ALTER TABLE testTable DROP INDEX IDX_UN_LOAN_PLAN_...
  • 插入新数据时,直接使用 insert into 语句,如果出现了重复的数据,违反了唯一性约束,那么就会抛出异常。所以我们可以根据需求选择合适的插入语句。 2. 准备数据 新建一张 tb_user 表,将 user_id 作为主键,idCard...

    1. 常见场景

    如果一个表中的字段,设置了 unique key 或者 primary key,那么该字段下的值,必须是唯一的。

    插入新数据时,直接使用 insert into 语句,如果出现了重复的数据,违反了唯一性约束,那么就会抛出异常。所以我们可以根据需求选择合适的插入语句。

    2. 准备数据

    新建一张 tb_user 表,将 user_id 作为主键,idCard为唯一索引

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for tb_user
    -- ----------------------------
    DROP TABLE IF EXISTS `tb_user`;
    CREATE TABLE `tb_user`  (
      `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
      `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户姓名',
      `id_card` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`user_id`) USING BTREE,
      UNIQUE INDEX `un_id_card`(`id_card`) USING BTREE COMMENT '身份证号唯一'
    ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of tb_user
    -- ----------------------------
    INSERT INTO `tb_user` VALUES (1, '张三', '370000199901016666');
    INSERT INTO `tb_user` VALUES (2, '李四', '370000199901016667');
    INSERT INTO `tb_user` VALUES (3, '王五', '370000199901016668');
    
    SET FOREIGN_KEY_CHECKS = 1;
    

    3. 插入新数据

    3.1 insert into 适用出现重复异常,希望捕获异常

    重复则报错,不重复则插入。

    当插入新数据时,如果数据有重复,违反唯一性约束,则报错。如果没有重复数据,则执行插入操作。

    INSERT INTO tb_user ( user_id, username, id_card )
    VALUES
    	( 3, "赵六", '370000199901016669' )
    

    执行结果

    3.2 insert ignore into 适用出现重复异常,希望保存旧纪录,忽略新纪录

    重复则忽略,不重复则插入

    当插入数据时,如果数据有重复,违反了唯一性约束,则忽略错误,只以警告形式返回,不执行此SQL语句。如果没有重复性问题,则执行插入操作。

    INSERT IGNORE INTO tb_user ( user_id, username, id_card )
    VALUES
    	( 3, "赵六", '370000199901016669' )
    

    执行结果

    3.3 insert into ... on duplicate key update 适用出现重复异常,希望更新指定字段

    重复则更新指定字段,不重复则插入

    当插入数据时,如果唯一性校验出现重复问题,则在原有记录的基础上,更新指定字段内容,其他字段内容保留。如果没有重复性问题,则执行插入操作。

    INSERT INTO tb_user ( user_id, username, id_card )
    VALUES
    	( 3, "赵六", '370000199901016669' ) 
    	ON DUPLICATE KEY UPDATE username = "赵六"
    

    执行结果

    查看表的内容会发现,user_idid_card 没有发生改变,username由 王五 变成了 赵六。

    注意(借鉴我舍友大炮儿的文章):

    • 如果插入一条数据时,主键和唯一性约束都存在与表中,但是主键确定的数据和唯一性约束确定的数据不是同一条(如果出现这种情况,说明插入的数据有问题,此处为假设),此时 update 的数据为主键确定的那一条

    • 如果执行的为 insert 语句,返回: Affected rows: 1

      如果为 update 语句,返回:Affected rows: 0 或 Affected rows: 2(此处影响的行数仅代表执行的是什么操作

      • 0 出现的情况: update 的内容与原数据相同
      • 2 出现的情况: update 的内容与原数据不同

    3.4 replace into 适用出现重复异常,希望删除旧记录,插入新记录

    重复则先删除再插入新数据,不重复则插入

    replace into 表示插入或替换数据,当插入数据时,如果唯一性校验出现重复问题,删除旧记录,然后插入新的记录。如果没有重复性问题,那么执行插入操作,效果和 insert into 是一样的。

    REPLACE INTO tb_user ( user_id, username, id_card )
    VALUES ( 3, "王五", '370000199901016669' )
    

    执行结果

    展开全文
  • 但在设计数据库时遇到了写小麻烦,主要是数据库中约束的应用,以前在学习数据库时进行了总结,在刚开始学习时使用的是SQL Server2000小操作了下,查证了约束的作用,但现在升级为08版的SQL所以在操作方式上了...

    SQL Server2008创建约束图解

    复习一下数据库的约束

    机房收费系统个人重构版开始了,但在设计数据库时遇到了写小麻烦,主要是数据库中约束的应用,以前在学习数据库时进行了总结,在刚开始学习时使用的是SQL Server2000 小操作了下,查证了几种约束的作用,但现在升级为 08 版的 SQL所以在操作方式上有了些区别。虽然是小麻烦但是也反映了我们学习的一种习惯,在对知识进行封存后就放到一边,等待下次的调用,知识是要进行反复咀嚼才能消化的。

        那闲话少说进入我们今天的主题, SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束,今天使用SQL Server2008 来演示下这几种约束的创建和使用的方法。

    1 、 Primary Key 约束

        在表中常有一列或多列的组合,其值能唯一标识表中的每一行。

        这样的一列或多列成为表的主键(PrimaryKey)。一个表只能有一个主键,而且主键约束中的列不能为空值。只有主键列才能被作为其他表的外键所创建。

       创建主键约束可以右键单击表,选择设计 。

     

     

       选中要创建主键的列,然后单击上面的小钥匙。

     

       也可以右键需要创建主键的列,然后单击小钥匙。

     

    2 、 Foreign Key 约束

        外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。

       右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系。

       接下来点击添加 --> 表和列规范。

       在主键表中选择主表和主表的主键列。

     

       设置完后保存即可。

     

    3 、 Unique 约束

        唯一约束确保表中的一列数据没有相同的值。与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。

       右键单击要设置的列选择索引 / 键。

       然后单击添加按钮。

       选择需要设置的列,可以是一列也可以是多列的组合。

       关闭并保存设置。

    4 、 Default 约束

        若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为 NULL 。

      以学生信息表为例,在表设计器中,为性别 sex 列填写默认值男。

    5 、 Check 约束

        Check 约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围。在列中更新数据时,所要输入的内容必须满足 Check 约束的条件,否则将无法正确输入。

       以学生信息表中的 sex 为例,我们要限制 sex 列的值只能为男或女。

       关闭并保存设计。

    展开全文
  • sql 关于一表多主键唯一性约束

    万次阅读 2019-02-27 17:28:15
    1.对于一般的表,我们只需设一主键,防止重复,但是我们如果设置多主键,是每主键都有唯一性吗?还是多主键组合起来具有唯一性 2.答案肯定是多主键合起来具有唯一性,话说太多,现在上例子 3.例如,我建...

    1.对于一般的表,我们只需设一个主键,防止重复,但是我们如果设置多个主键,是每个主键都有唯一性吗?还是多个主键组合起来具有唯一性

    2.答案肯定是多个主键合起来具有唯一性,话说太多,现在上例子

    3.例如,我建了有三个主键的表,如图:

    4.我可以如下图所示添加数据,说明各个主键的唯一性不是单独的,如果是单独的,肯定无法添加了

    5.但是我不可如下图,插入数据:

     

    展开全文
  • sql完整性约束有哪些

    千次阅读 2021-01-18 21:24:05
    sql完整性约束有:1、“NOT NULL”非空约束,指定的列不允许为空值;2、“UNIQUE”唯一约束,指定列中没有重复值;3、“PRIMARY KEY”主键约束,唯一的标识出表的每一行;4、“FOREIGN KEY”外键约束;5、“CHECK”...

    sql完整性约束有:1、“NOT NULL”非空约束,指定的列不允许为空值;2、“UNIQUE”唯一约束,指定列中没有重复值;3、“PRIMARY KEY”主键约束,唯一的标识出表的每一行;4、“FOREIGN KEY”外键约束;5、“CHECK”条件约束。

    81e3d3630043e29d730af102325c3c44.png

    完整性约束是保证用户所做的修改不会破坏数据的一致性,是保护数据正确性和相容性的一种手段。

    常见的5种约束:

    NOT NULL:非空约束C,指定的列不允许为空值

    UNIQUE:唯一约束U,指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的

    PRIMARY KEY:主键约束P,唯一的标识出表的每一行,且不允许空值,一个表只能有一个主键约束

    FOREIGN KEY:外键约束R,一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列

    CHECK:条件约束C,指定该列是否满足某个条件

    非空约束 NKcreate table member(

    mid number,

    name varchar2(200) not null

    );

    插入空报错:SQL> insert into member(mid,name) values(1,null);

    *

    第 1 行出现错误:

    展开全文
  • mysql多字段唯一约束

    千次阅读 2021-01-19 01:34:34
    MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一空值。唯一约束可以确保一列或者几列不出现重复值。在创建表时设置唯一约束在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法规则如下: ...
  • 数据库实现多字段的唯一约束

    千次阅读 2020-06-10 09:16:44
    例如:t_aa 表中aa,bb两字段,如果不希望2条一模一样的记录(即:aa字段的值可以重复; bb字段的值也可以重复,但是一条记录(aa,bb)组合值不允许重复),需要给 t_aa 表添加多字段的联合唯一索引: alter ...
  • mysql中常见的约束有:1、主键;2、默认值;3、唯一;4、外键;5、非空。约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性约束是一种限制,它通过对表的行或列的数据做出...
  • mysql创建表多字段的唯一约束

    万次阅读 2018-11-16 16:12:33
    mysql中有些表有时需要做一些字段的唯一约束,当然你也可以在insert前判断有无的方式来防止重复,如果不想额外增加代码来更灵活的实现一些字段的唯一约束,mysql提供了两种方式: 1.unique key  alter table xx ...
  • 简单的唯一性约束的方法 一表中 2字段的联合约束 创建数据表 create table zcz (id number not null,name varchar(20) null, age varchar(20) null); 创建主键 或者联合主键 但一表中只能主键...
  • 突然看到数据库表设计中的几个属性,记录一下 restrict--限制,指的是如果字表引用父表的某个字段的值,那么不允许直接删除父表的该值; cascade--级联,删除父表的某条记录,子表中引用该值的记录会自动被删除; ...
  • 我们都知道unique约束,限制此字段在数据库表中此字段值唯一但是如果我们不传值,那么他默认为null的话,可以吗?   结论:在mysql中unique约束列可以含有多null!...
  • 什么是约束? 数据库—由若干张数据表组成...例如:每表中必须要指定的字段 2.区域完整 针对表中的某个字段进行特殊化限制 3.参照完整 表与表之间的一种特殊化关联限制 约束类型(6): 1.主键约束(PR...
  • 发现mysql一个表可以有几个唯一索引

    万次阅读 2018-04-26 09:07:44
    mysql一表可以个唯一索引。如果能确定某个数据列将只包含彼此各不相同的值,在为这数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这索引的管理工作,...
  • 首先我们来想象一下,前篇文章在我们操作数据库的过程中,自由度是很高的,想给哪个赋值就给哪个赋值,但是这样子,就会造成我们所创建的数据库数据不完整,例如我创建一学生信息表,你可能添加时候忘了添加学号...
  • 约束,是对表中的数据进行限定,保证数据的正确、有效和完整约束分为以下类: 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign key 1.1 非空约束:not null 1)在创建...
  • UNIQUE KEY `record_month` (`record_month`, `customer_id`) #创建了联合唯一约束 当月份和用户id重复时会报错 ); CREATE TABLE tb_month_report_chapter_main( `id` INTEGER(11) NOT NULL AUTO_...
  • 主键约束和唯一性约束的区别

    千次阅读 2014-08-08 18:01:13
    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一
  • 使用Django中遇到这样一个需求,对一个表的几个字段做 联合唯一索引,例如学生表中 姓名和班级 2个字段在一起表示一个唯一记录。 Django中model部分的写法, 参见 unique-together 部分文档。class MyModel(models....
  • 逻辑删除与唯一约束冲突问题的一解决方案

    千次阅读 多人点赞 2020-08-27 21:19:41
    一、问题 现在很多系统都不允许真正删除数据库中的数据,而是通过引入删除标记字段的方式进行假删除,...但是逻辑删除会面临一违反唯一约束的问题。比如一商品表: create table goods ( id bigint primary...
  • mysql的约束

    千次阅读 2021-01-28 00:24:07
    在mysql设计表中,有个概念叫做约束什么是约束约束英文:constraint约束实际上就是表中数据的限制条件约束种类mysql的约束大概分为以下种:非空约束(not null)唯一性约束(unique)主键约束(primary key) PK外键约束...
  • oracle中多字段组成唯一索引约束

    千次阅读 2018-11-26 18:59:02
    --原来EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE这三唯一索引约束,现在添加company_id到这三中, 四组成唯一索引约束。(思路,需要先删除该索引约束名,在=再创建) 注意事项(报错...
  • 给已经建好的表加上唯一性约束 ALTERTABLE`t_user`ADDunique(`username`);
  • 今天我们一起使用一下主要的几个约束,null/not null,default, comment, zerofill,primary key,auto_increment,unique。 1、空属性 两个取值,null(默认)和not null(此列属性不允...
  • 文章目录1、约束简介2、非空约束(not null、nk)2.1 范例1:使用非空约束2.2 范例2:正确地增加语句2.3 范例3:错误地增加语句3、唯一约束(unique、uk)3.1 范例1:使用唯一约束3.2 范例2:正确地增加语句3.3 范例3:...
  • Oracle数据库对于常见的错误都会报错提示,工作的这一年也碰到了一些错误,踩过一些坑,...ORA-00001:违反唯一约束条件:错误描述:大都是在向一表中插入数据时报错。错误原因:插入的数据中涉及到有唯一约束...
  • 数据库数据完整的6个约束

    千次阅读 2019-03-23 00:05:45
    数据库数据完整default约束check约束null约束unique约束primary key约束foreign key约束总结 前言:数据完整是指存储在数据库中数据的准确和可靠。它是应防止数据库中存在不符合语义规定的数据和防止因错误...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,337
精华内容 44,534
关键字:

唯一性约束有几个