精华内容
下载资源
问答
  • oracle中多个字段组成唯一索引约束
    千次阅读
    2018-11-26 18:59:02

    已经验证!!!欢迎相互学习交流

    --原来EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE这三个为唯一索引约束,现在添加company_id到这三个中,

    四个组成唯一索引约束。(思路,需要先删除该索引约束名,在=再创建)

    注意事项(报错dupplicate keys found,若表中要创建的唯一索引约束的四个字段在数据库该表中有重复,则提示该错误,删除重复记录,再创建即可)

    drop index EXP_EXPENSE_ITEM_DESCS_U1;

    create unique index EXP_EXPENSE_ITEM_DESCS_U1 on EXP_EXPENSE_ITEM_DESCS (COMPANY_ID,EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE)

    更多相关内容
  • 总结,对于主键与唯一索引约束: • 执行insert和update时,会触发约束检查 • InnoDB违反约束时,会回滚对应SQL • MyISAM违反约束时,会中断对应的SQL,可能造成不符合预期的结果集 • 可以使用 insert … on ...
  • 今天和大家简单聊聊MySQL的约束主键与唯一索引约束:PRIMARY KEY and UNIQUE Index Constraints文章不长,保证有收获。触发约束检测...

    今天和大家简单聊聊MySQL的约束主键与唯一索引约束

    PRIMARY KEY and UNIQUE Index Constraints

    文章不长,保证有收获。

     

    触发约束检测的时机:

    • insert

    • update

     

    当检测到违反约束时,不同存储引擎的处理动作是不一样的。

    如果存储引擎支持事务,SQL会自动回滚

    例子:

    create table t1 (

    id int(10) primary key

    )engine=innodb;

     

    insert into t1 values(1);

    insert into t1 values(1);

     

    其中第二条insert会因为违反约束,而导致回滚。

     

    通常可以使用:

    show warnings;

    来查看违反约束后的错误提示。

     

    如果存储引擎不支持事务,SQL的执行会中断,此时可能会导致后续有符合条件的行不被操作,出现不符合预期的结果。

    例子:

    create table t2 (

    id int(10) unique

    )engine=MyISAM;

     

    insert into t2 values(1);

    insert into t2 values(5);

    insert into t2 values(6);

    insert into t2 values(10);

     

    update t2 set id=id+1;

     

    update执行后,猜猜会得到什么结果集?

    猜想一:2, 6, 7, 11

    猜想二:1, 5, 6, 10

    .

    .

    .

    都不对,正确答案是:2, 5, 6, 10

     

    第一行id=1,加1后,没有违反unique约束,执行成功;

    第二行id=5,加1后,由于id=6的记录存在,违反uinique约束,SQL终止,修改失败;

    第三行id=6,第四行id=10便不再执行;

    画外音:这太操蛋了,一个update语句,部分执行成功,部分执行失败。

    为了避免这种情况出现,请使用InnoDB存储引擎,InnoDB在遇到违反约束时,会自动回滚update语句,一行都不会修改成功。

    画外音:大家把存储引擎换成InnoDB,把上面的例子再跑一遍,印象更加深刻。

     

    另外,对于insert的约束冲突,可以使用:

    insert … on duplicate key

    指出在违反主键或唯一索引约束时,需要进行的额外操作

    例子:

    create table t3 (

    id int(10) unique,

    flag char(10) default 'true'

    )engine=MyISAM;

     

    insert into t3(id) values(1);

    insert into t3(id) values(5);

    insert into t3(id) values(6);

    insert into t3(id) values(10);

     

    insert into t3(id) values(10) on duplicate key update flag='false';

    insert执行后,猜猜会发生什么?

    插入id=10的记录,会违反unique约束,此时执行update flag=’false’,于是有一行记录被update了。

     

    相当于执行

    update t3 set flag='false' where id=10;

     

    仔细看,insert的结果返回,提示:

    Query OK, 2 rows affected

    有意思么?

    画外音:本文所有实验,基于MySQL5.6。

     

    总结,对于主键与唯一索引约束:

    • 执行insert和update时,会触发约束检查

    • InnoDB违反约束时,会回滚对应SQL

    • MyISAM违反约束时,会中断对应的SQL,可能造成不符合预期的结果集

    • 可以使用 insert … on duplicate key 来指定触发约束时的动作

    • 通常使用 show warnings; 来查看与调试违反约束的ERROR


    互联网大数据量高并发量业务,为了大家的身心健康,请使用InnoDB

    架构师之路-分享可落地的架构文章

    相关推荐:

    互联网业务,为什么一定要使用InnoDB?

    InnoDB,为什么并发如此之高?

    聚集索引与普通索引究竟有什么差别?

    索引,底层是如何实现的?

    了解了几个坑,也是好的,求转。

    展开全文
  • 谈谈唯一约束唯一索引

    千次阅读 2021-01-27 20:54:06
    约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性。索引 数据库中用的最频繁的操作是数据查询,索引...和主键约束不同,唯一约束允许为 NULL,只...

    约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性。

    索引 数据库中用的最频繁的操作是数据查询,索引就是为了加速表中数据行的检索而创建的一种分散的数据结构。可以把索引类比成书的目录,有目录的肯定比没有目录的书,更方便查找。

    唯一约束 保证在一个字段或者一组字段里的数据都与表中其它行的对应数据不同。和主键约束不同,唯一约束允许为 NULL,只是只能有一行。

    唯一索引 不允许具有索引值相同的行,从而禁止重复的索引或键值。

    唯一约束和唯一索引都是为了保证表中被限制的字段不允许有重复的值,看起来功能是一样的,那为什么要设计这样两种一样的功能呢?

    首先创建两个字段值一样的表 t1,t2,并为 t1 表中的 col1 列设置唯一约束。

    CREATE TABLE t1 (

    col1 INT(11),

    col2 VARCHAR(20),

    CONSTRAINT t1_uq UNIQUE (col1)

    );

    CREATE TABLE t2 (

    col1 INT(11),

    col2 VARCHAR(20)

    );

    然后为表 t2 表中的 col1 列设置唯一索引

    CREATE UNIQUE INDEX

    t2_idx ON t2 (col1);

    创建表 t3,并将 t1 表中的 col1 列设置为 t3 表中 col2 列的外键

    CREATE TABLE t3 (

    col1 INT(11),

    col2 INT(11),

    col3 VARCHAR(20),

    CONSTRAINT t3_fk FOREIGN KEY (col2) REFERENCES t1 (col1)

    );

    到此为止,基本上就能得出,唯一约束和唯一索引在 MySQL 数据库里区别了

    概念上不同,约束是为了保证数据的完整性,索引是为了辅助查询;

    创建唯一约束时,会自动的创建唯一索引;

    在理论上,不一样,在实际使用时,基本没有区别。

    关于第二条,MySQL 中唯一约束是通过唯一索引实现的,为了保证没有重复值,在插入新记录时会再检索一遍,怎样检索快,当然是建索引了,所以,在创建唯一约束的时候就创建了唯一索引。

    4.唯一性索引

    如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引,Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某个记录的这个字段里出现过了。如果是,mysql将拒绝插入那条新纪录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复

    5.索引的优点

    5.1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性

    5.2.建立索引可以大大提高检索的数据,以及减少表的检索行数

    5.3.在表连接的连接条件,可以加速表与表直接的相连

    5.4.在分组和排序字句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间(数据库的记录会重新排序)

    5.5.建立索引,在查询中使用索引,可以提高性能。

    CREATE TABLE parent(2

    3id INT NOT NULL,4

    5PRIMARY KEY (id)6

    7 ) TYPE=INNODB;8

    9CREATE TABLE child(10

    11id INT, parent_id INT,12

    13INDEX par_ind (parent_id),14

    15FOREIGN KEY (parent_id) REFERENCES parent(id)16

    17ON DELETE CASCADE18

    19 ) TYPE=INNODB;

    如下是一个更复杂的例子,其中一个product_order表对其它两个表有外键。一个外键引用一个product表中的双列索引。另一个引用在customer表中的单行索引:

    1 CREATE TABLE product ( 2 3 category INT NOT NULL, 4 5 id INT NOT NULL, 6 7 price DECIMAL, 8 9 PRIMARY KEY(category, id)10 11 ) TYPE=INNODB;12 13  CREATE TABLE customer (id INT NOT NULL,14 15 PRIMARY KEY (id)16 17 ) TYPE=INNODB;18

    19  CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,20 21 product_category INT NOT NULL,22 23 product_id INT NOT NULL,24 25 customer_id INT NOT NULL,26 27 PRIMARY KEY(no), 28 29 INDEX (product_category, product_id),30 31 FOREIGN KEY (product_category, product_id) 32 33 REFERENCES product(category, id)34 35 ON UPDATE CASCADE ON DELETE RESTRICT,36 37 INDEX (customer_id), 38 39 FOREIGN KEY (customer_id)4041 REFERENCES customer(id)42 43 ) TYPE=INNODB;

    展开全文
  • This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index. Along the way, we will look at the differences ... 本文为您概述了SQL中的唯一约束以及唯一SQL ...

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index. Along the way, we will look at the differences between them.

    本文为您概述了SQL中的唯一约束以及唯一SQL Server索引。 一路上,我们将研究它们之间的差异。

    介绍 (Introduction)

    Constraints in SQL Server allows defining the rules at the column level in the SQL table. We can add a constraint using the Create table or Alter table statement. SQL Server enforces ACID properties – Atomicity, Consistency, Isolation and Durability for a SQL Server transaction.

    SQL Server中的约束允许在SQL表的列级别定义规则。 我们可以使用Create table或Alter table语句添加约束。 SQL Server强制ACID属性-SQL Server事务的原子性,一致性,隔离性和持久性。

    We use Constraints for the Consistency property of an ACID. It means that only valid data that satisfies the condition should exist in the database.

    我们对ACID的Consistency属性使用Constraints。 这意味着数据库中应仅存在满足条件的有效数据。

    You can go through this article, SQL Server Transaction Overview to learn about ACID properties.

    您可以阅读本文“ SQL Server事务概述”以了解ACID属性。

    SQL ACID properties

    In this article, we will explore SQL Server Unique Indexes and Unique constraints. We will also go over the difference between them.

    在本文中,我们将探讨SQL Server唯一索引和唯一约束。 我们还将介绍它们之间的区别。

    SQL Server中的UNIQUE约束概述 (Overview of UNIQUE constraints in SQL Server)

    We can ensure unique value in a column of SQL Server. It can be either on a single column or a combination of columns. It prevents you from having duplicate values in columns tied with the unique constraint. You might be familiar with a primary key column that also enforces unique value in the column. We can have only one primary key per table in SQL Server.

    我们可以确保SQL Server列中的唯一值。 它可以在单个列上,也可以在列的组合上。 这样可以防止在具有唯一性约束的列中具有重复的值。 您可能熟悉主键列,该主键列也强制该列中的唯一值。 在SQL Server中,每个表只能有一个主键。

    Suppose you have an employee table and as its name suggests it holds all employee’s information. We have a primary key for the [EmployeeID] column. This table also holds the social security number of employees. We do not want any duplicate value in this social security number column. We do not have the option to define the primary key because our table already has it.

    假设您有一个雇员表,顾名思义,它包含所有雇员的信息。 我们为[EmployeeID]列提供了一个主键。 该表还保存了雇员的社会保险号。 我们不希望在此社会保险号列中有任何重复的值。 我们没有选择定义主键的选项,因为我们的表已经具有主键。

    Let’s create a SQL table using the SSMS GUI method. Expand the database and right-click on Tables-> New->Table.

    让我们使用SSMS GUI方法创建一个SQL表。 展开数据库,然后右键单击Tables-> New-> Table。

    Create a new table

    Specify columns, their data type and remove the check for the Allow Nulls column.

    指定列,其数据类型,并取消选中“ 允许空值”列。

    Table designer

    Right-click on the [EmployeeID] column and enable the Primary Key by clicking Set Primary key on it.

    右键单击[EmployeeID]列,然后单击“ 设置主键”以启用主键

    Set Primary Key

    It puts a key symbol for the primary key column, as shown below.

    它在主键列中放置一个键符号,如下所示。

    Primary key symbol

    Now, right-click on the [SocialSecurityNumber] column and choose Indexes/Keys.

    现在,右键单击[SocialSecurityNumber]列,然后选择“ 索引/键”。

    Constraints in SQL: Indexes/keys

    It opens the following indexes/keys wizard that shows existing indexes like we already have a primary key on [Employee] table.

    它打开下面的索引/键向导,该向导显示现有索引,例如我们在[Employee]表上已经有一个主键。

    Create a new SQL Server Index

    Click on Add, and we can define additional index/constraints using this.

    单击添加,我们可以使用它定义其他索引/约束。

    Primary Unique index

    In the General group, select the column in which we want to define a SQL Server Index. We can select the data sort order in ascending (default) or descending order.

    在“ 常规”组中,选择要在其中定义SQL Server索引的列。 我们可以选择数据升序(默认)或降序。

    Data sort order

    In this SQL Server index properties, we can select a value for the property- IsUnique.

    在此SQL Server索引属性中,我们可以为属性IsUnique选择一个值。

    [IsUnique] property

    In the type, you get an option to choose from the Unique key or Index.

    在类型中,您可以选择从唯一键或索引中进行选择。

    Choose Index or Unique key

    Let’s select the Unique Key, and you see that the previous option “Is Unique” is greyed out. We cannot make any change here because the unique key is for unique value in a column.

    让我们选择“唯一键”,您会看到前面的选项“是唯一”显示为灰色。 我们无法在此处进行任何更改,因为唯一键是列中唯一值。

    Select Unique key

    SSMS gives you the option to generate the script for the work you did on the GUI. It is a good thing, especially for a beginner to learn both GUI and t-SQL.

    SSMS使您可以选择为在GUI上所做的工作生成脚本。 这是一件好事,特别是对于初学者而言,同时学习GUI和t-SQL。

    Generate change script

    Click on the Generate Change Script…, and you get t-SQL for Create table, add primary key constraint and add the unique constraint in SQL Server.

    单击Generate Change Script… ,您将获得用于创建表的t-SQL,添加主键约束并在SQL Server中添加唯一约束。

    Constraints in SQL: Add primary key constraint

    Copy this script and close the table designer window without saving it. We use the generated script to create the table and unique constraint in SQL Server. I modified the table name to have an appropriate name for our demo.

    复制此脚本并关闭表设计器窗口而不保存它。 我们使用生成的脚本在SQL Server中创建表和唯一约束。 我修改了表名,使其具有适合我们演示的名称。

    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Employee
        (
        EmployeeID int NOT NULL,
        EmpName varchar(50) NOT NULL,
        SocialSecurityNumber int NOT NULL
        )  ON [PRIMARY]
    GO
    ALTER TABLE dbo.Employee ADD CONSTRAINT
        PK_Table_1 PRIMARY KEY CLUSTERED 
        (
        EmployeeID
        ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
        
    GO
    ALTER TABLE dbo.Employee ADD CONSTRAINT
        IX_Unique_SSN UNIQUE NONCLUSTERED 
        (
        SocialSecurityNumber
        ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
        
    GO
    ALTER TABLE dbo.Employee SET (LOCK_ESCALATION = TABLE)
    GO
    COMMIT
    

    Script Overview

    Execute the above script, and it creates the table, primary key and unique key constraint. It creates the SQL Server index for primary key constraints and unique key constraints. We can check existing indexes on a table using sys.sp_helpindex system stored procedure.

    执行上述脚本,并创建表,主键和唯一键约束。 它为主键约束和唯一键约束创建SQL Server索引。 我们可以使用sys.sp_helpindex系统存储过程来检查表上的现有索引。

    EXEC sys.sp_helpindex @objname = N'Employee'
    GO
    

    System stored procedure

    Let’s try to insert few values in this table and see if we are allowed to enter duplicates in the [SocialSecurityNumber] column.

    让我们尝试在此表中插入一些值,看看是否允许我们在[SocialSecurityNumber]列中输入重复项。

    In the below query, Ram tries to enter the value in the [SocialSecurityNumber] column that is already available for the employee Raj.

    在以下查询中,Ram尝试在[SocialSecurityNumber]列中输入可供员工Raj使用的值。

    Insert into Employee values(1,'Raj',1111)
    Insert into Employee values(2,'Shyam',2222)
    Insert into Employee values(3,'Ram',1111)
    

    It inserts the first two rows successfully, but for third-row, you get a message about the Unique key constraint violation. You get the duplicate value in the output as well. It helps you to figure out the problematic insert statement causing issues quickly.

    它成功插入了前两行,但是对于第三行,您将收到一条有关唯一键约束冲突的消息。 您也会在输出中得到重复的值。 它可以帮助您快速找出引起问题的插入语句。

    Duplicate key

    在SQL Server中禁用唯一约束 (Disabling Unique Constraints in SQL Server)

    We can disable a unique constraint using the following ALTER table statement.

    我们可以使用以下ALTER table语句禁用唯一约束。

    ALTER TABLE Employee
    NOCHECK CONSTRAINT ALL
    GO
    

    This command executed successfully.

    该命令成功执行。

    Unique Constraint in SQL Server

    If we try to enter the duplicate value, still we get the same error message.

    如果我们尝试输入重复的值,仍然会收到相同的错误消息。

    error message

    We know that the unique constraint in SQL Server creates a unique SQL Server index as well. SQL Server allows us to disable an index as well without dropping it.

    我们知道,SQL Server中的唯一约束也会创建唯一SQL Server索引。 SQL Server允许我们也禁用索引而不删除它。

    Right-click on the SQL Server index that we wish to disable and click on Disable as shown below.

    右键单击我们要禁用SQL Server索引,然后单击“ 禁用” ,如下所示。

    Constraints in SQL: Disable index

    Alternatively, we can use the ALTER INDEX command and disable the SQL Server index. You need to specify the index name and table name in this query.

    或者,我们可以使用ALTER INDEX命令并禁用SQL Server索引。 您需要在此查询中指定索引名称和表名称。

    ALTER INDEX IX_Unique_SSN ON Employee
    DISABLE
    

    It allows you to enter the duplicate value in the [SocialSecurityNumber] column.

    它允许您在[SocialSecurityNumber]列中输入重复值。

    Duplicate values

    We have a duplicate value in the table. Let’s enable the unique non-clustered Index. To enable the Index, we need to rebuild it.

    表中有一个重复的值。 让我们启用唯一的非聚集索引。 要启用索引,我们需要重建它。

    To rebuild an index, either right-click on Index and click on REBUILD from its properties.

    要重建索引,请右键单击Index,然后从其属性中单击REBUILD

    REBUILD index

    We can also rebuild using the following ALTER INDEX command.

    我们还可以使用以下ALTER INDEX命令进行重建。

    USE [SQLShack]
    GO
    ALTER INDEX [IX_Unique_SSN] ON [dbo].[Employee] REBUILD
    

    We cannot enable the Index because a duplicate key exists, and the unique key constraint does not allow duplicates. It also gives you duplicate keys in the output.

    我们无法启用索引,因为存在重复的键,并且唯一键约束不允许重复。 它还在输出中为您提供重复的键。

    Duplicate key error

    在SQL Server中删除唯一约束 (Drop unique constraints in SQL Server)

    We cannot drop the unique Index created by the unique constraints. If we try to do so, it gives you the following error message. It does not allow an explicit drop index because the unique constraint is using the Index.

    我们不能删除由唯一约束创建的唯一索引。 如果我们尝试这样做,它会为您提供以下错误消息。 它不允许显式删除索引,因为唯一约束正在使用索引。

    DROP INDEX Employee.[IX_Unique_SSN]
    GO
    

    Drop a Unique constraint

    We can drop the Index using the Alter Table Drop Constraint command. As we know, SQL Server creates an index with a unique constraint in SQL Server. This command drops the Index along with the constraint.

    我们可以使用Alter Table Drop Constraint命令删除索引。 众所周知,SQL Server在SQL Server中创建具有唯一约束的索引。 此命令将索引和约束一起删除。

    ALTER TABLE Employee
    DROP CONSTRAINT IX_Unique_SSN;
    

    We can verify in the following screenshot that Index does not exist now.

    我们可以在以下屏幕截图中验证索引现在不存在。

    Verify index

    It provides you with an additional benefit that no one can accidentally delete the unique Index created by the unique constraint.

    它为您提供了一个额外的好处,那就是没人可以意外删除由唯一约束创建的唯一索引。

    SQL Server中的唯一索引 (Unique Index in SQL Server)

    Previously we created unique constraints in SQL Server using the SSMS GUI method. We do not have any existing unique constraints for the [Employee] table.

    以前,我们使用SSMS GUI方法在SQL Server中创建了唯一约束。 对于[Employee]表,我们没有任何现有的唯一约束。

    Let’s right-click on [Employee] table and select Design. It opens the table designer as we saw earlier.

    让我们右键单击[Employee]表并选择Design。 如我们先前所见,它打开了表设计器。

    Unique Index in SQL Server

    Right-click on [SocialSecurityNumber], select Index/keys, and choose Index from the Type column. For a unique index, select the value Yes for the [Is Unique] column.

    右键单击[SocialSecurityNumber],选择“索引/键”,然后从“类型”列中选择“索引”。 对于唯一索引,在[Is Unique]列中选择值Yes

    Index type

    We also have the few options enabled for unique Indexes such as Ignore duplicate keys and Re-compute statistics.

    我们还为唯一索引启用了一些选项,例如忽略重复键重新计算统计信息。

    Ignore duplicate keys

    Close this index/keys page and generate the script. You can see it creates a unique non-clustered index for the [Employee] table.

    关闭此索引/键页面并生成脚本。 您可以看到它为[Employee]表创建了一个唯一的非聚集索引。

    Constraints in SQL: View script

    Click Ok and save the modifications you did. You get the error message because it found a duplicate key for the [SocialSecurityNumber] column.

    单击确定,然后保存所做的修改。 您收到错误消息,因为它为[SocialSecurityNumber]列找到了重复的键。

    Save the modifications

    We can remove the duplicate, and it creates the Index for you.

    我们可以删除重复项,它会为您创建索引。

    View index and index keys

    SQL Server中唯一索引和唯一约束之间的区别 (Difference between Unique Indexes and Unique Constraints in SQL Server)

    Both the unique index and unique constraint are similar, and there is no functional difference between them. Query optimizer also uses the Unique Index to create cost-optimized execution plans. The only difference is that you cannot directly drop the unique Index created by the unique constraint in SQL Server. You also get a few additional index options once you directly create a unique Index.

    唯一索引和唯一约束都相似,并且它们之间没有功能上的区别。 查询优化器还使用唯一索引来创建成本优化的执行计划。 唯一的区别是您不能直接删除由SQL Server中的唯一性约束创建的唯一性索引。 直接创建唯一索引后,您还将获得一些其他索引选项。

    As we know, constraints are like a business rule for data stored in SQL Server tables. You should create a unique constraint when you do not directly deal with the Index. However, you should not define a unique constraint and key on similar columns. It might slow down your queries, and you have duplicate indexes as well.

    众所周知,约束就像是存储在SQL Server表中的数据的业务规则。 当您不直接处理索引时,应创建唯一约束。 但是,您不应在相似的列上定义唯一约束和键。 这可能会使查询速度变慢,并且索引也重复。

    Index difference

    We cannot differentiate between a unique key and Index by looking at indexes in GUI. Both exist in the same index folder in a database.

    我们无法通过查看GUI中的索引来区分唯一键和索引。 两者都存在于数据库的同一索引文件夹中。

    Unique key

    However, SQL Server knows the difference. If we script out both Indexes, you can see different scripts for both indexes. As we can see below, the first script uses an alter table with Add Constraint clause for a unique constraint in SQL Server while the later part uses the Create Non-Clustered Index statement.

    但是,SQL Server知道区别。 如果我们为两个索引编制脚本,则可以为两个索引看到不同的脚本。 正如我们在下面看到的那样,第一个脚本使用带有Add Constraint子句的alter table作为SQL Server中的唯一约束,而后一部分使用Create Non-Clustered Index语句。

    Constraints in SQL: Non-Clustered Index

    Still, you get some additional advantages with unique Index created explicitly over Unique Constraints in SQL Server.

    尽管如此,通过显式创建的唯一索引比SQL Server中的“唯一约束”还具有一些其他优点。

    • You can include columns in a non-clustered unique index to improve query performance. SQL Server enforces uniqueness only for the key column of a unique index

      您可以在非聚集唯一索引中包括列,以提高查询性能。 SQL Server仅对唯一索引的键列强制执行唯一性
    • We can add a filter in a unique index. It can be useful if you want to create a unique index on a column that allows NULL values. In this case, we can have multiple NULL values because a unique Index will be created for non-null values

      我们可以在唯一索引中添加过滤器。 如果要在允许NULL值的列上创建唯一索引,此功能很有用。 在这种情况下,我们可以有多个NULL值,因为将为非null值创建唯一索引
    • We can also define a foreign key that reference a unique key index

      我们还可以定义引用唯一键索引的外键

    结论 (Conclusion)

    In this article, we explored unique constraints and unique indexes in SQL Server. We get a unique index as well if you create a unique constraint. You can decide whatever option works for you as there is no difference in query performance.

    在本文中,我们探讨了SQL Server中的唯一约束和唯一索引。 如果您创建唯一约束,我们也会获得唯一索引。 您可以选择适合您的任何选项,因为查询性能没有差异。

    翻译自: https://www.sqlshack.com/difference-between-unique-indexes-and-unique-constraints-in-sql-server/

    展开全文
  • Mysql唯一索引 唯一约束

    万次阅读 2017-09-28 23:37:42
    Mysql唯一索引 唯一约束唯一索引作为mysql众多索引常用的一种,再一次业务中了解到此索引特在此记载Mysql唯一索引 唯一约束 唯一索引的的作用 唯一索引与唯一约束的区别 添加删除唯一索引的sql语句 需要注意的坑唯一...
  • (1)唯一约束唯一索引区别 https://blog.csdn.net/fly910905/article/details/78056871 (2)谈谈唯一约束唯一索引 https://blog.csdn.net/mrzhouxiaofei/article/details/79719529 ...
  • 场景描述如下: 为了避免数据重复,同时也缓解数据库的压力,需要建立唯一索引来约束数据库字段。 但是,这样就会可能产生org.springframework.dao.DuplicateKeyException异常。
  • 大部分数据库表都有一个承接的功能就是某个表每条记录的唯一性,通过唯一性来保证这张表的数据是不重复的。使用的场景很多,例如银行,每个人只能开一个1类账户,怎么来保证所有的人来银行开账户都是...
  • 增加已有字段唯一索引: alter table 表名称 add unique(需要添加唯一性的字段,也会作为唯一名称); 查看唯一约束: show keys from 表名称; 删除唯一约束: drop index 索引名称 on 表名称;...
  • SQLServer索引管理——唯一索引和唯一约束的区别 唯一索引保证在索引键列中的值是唯一的 唯一约束保证没有重复值被插入到列中,当该列上创建有唯一约束的时候。当列上创建了唯一约束时,对应的会在该列自动创建...
  • 以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题:Step8:SQL Server 当表分区遇上唯一约束,没想到在MySQL的分区中一样会遇到这样的问题:MySQL表分区实战。 今天我们来了解MySQL唯一索引的一些...
  • 唯一索引可确保索引字段不存储重复值,即强制索引字段的唯一性。默认情况下,MongoDB在创建集合期间会在_id字段上创建唯一索引。 新的内部格式 从MongoDB 4.2开始,对于4.2(或更高版本)的...
  • 2、添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )  3、添加INDEX(普通索引) mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 4、添加FULLTEXT(全文索引) ...
  • ORA-00001: 违反唯一约束条件 这一个报错相信大家在插入数据时还是经常遇到的,尤其是在测试环境。 但是今天我在处理一个生产问题的时候再次遇到这个报错时有点奇怪: 1.该表(记为表A)的主键是数据库序列生成的,...
  • 唯一约束唯一索引区别

    千次阅读 2017-09-21 21:02:55
    3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).4) 主健可作外健,唯一索引不可; 2.唯一性约束(UNIQUE) 1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问...
  • 主键约束、唯一性约束唯一索引

    千次阅读 2018-07-22 00:23:40
    1.主键约束(PRIMARY KEY) ...4) 主健可作外健,唯一索引不可; 2.唯一性约束(UNIQUE) 1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多...
  • 1、唯一约束唯一索引,都可以实现列数据的唯一,列值可以有null。 2、创建唯一约束,会自动创建一个同名的唯一索引,该索引不能单独删除,删除约束会自动删除索引。唯一约束是通过唯一索引来实现数据的唯一。 3、...
  • 比如如下字段(g_check_id):唯一索引 如果插入数据时(g_check_id)出现相同的值的话,程序本身是会报错的。 所以做类似如下处理: 以上这篇完美解决thinkphp唯一索引重复时出错的问题就是小编分享给大家的全部...
  • 创建索引(如果字段为大写,请大写) CREATE INDEX index_p_exam_subject_id_name ON p_exam (SUBJECT_ID,EXAM_NAME); 删除索引drop index index_...创建唯一索引 CREATE UNIQUE INDEX uni_cet4_112_zkzh_kssfz O...
  • mysql 唯一索引与null.md

    千次阅读 2021-01-21 09:17:09
    mysql 的唯一索引要求所有参与的列都不能够为 null 值,如果唯一索引中的任何一个元素含有 null 值,则唯一约束将不起作用。示例代码create table tb (a int,b int,c int,unique index (a,b,c));insert into tb(a,b,...
  • 分析表的索引建立情况:DBCC showcontig('Table')执行重建索引命令:DBCC DBREINDEX('T_CEmployeeRegisterHoliday')1、没有聚集索引查询2、...helpindex A6、删除索引语句DROP indext_PortApply.PK_A17、除主键约束(...
  • db2唯一索引与唯一约束,重复删除唯一约束存储过程 今天写可重复执行的脚本时,发现没有重复删除约束的存储过程,写此纪录。 --先创建唯一约束会自动创建唯一索引且两者名字相同,若该字段上已有索引,再次创建索引的...
  • 首先说明一点,主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) ...·SQLServer默认为主键字段创建聚集索引,为唯一
  • 主键约束唯一约束的区别

    千次阅读 2021-02-11 02:46:06
    2)是不可能(或很难)更新.3)主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).4)主健可作外健,唯一索引不可;2.唯一性约束(UNIQUE)1)唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问...
  • 唯一约束通过唯一索引来实现?我觉得这说法不对。 对于唯一约束索引是必须存在的,唯一约束本质上是通过索引来保证的,但不一定是唯一索引唯一约束允许有NULL值,唯一约束的列可允许有多个NULL...
  • 唯一约束唯一索引,都可以实现数据列的唯一性,列值可以为null(允许存在多个null值) 创建唯一性约束,会自动创建一个同名的唯一索引,这个索引不能够单独删除,删除唯一约束会自动删除索引。唯一约束是通过唯一...
  • oracle 唯一约束唯一索引

    千次阅读 2016-07-18 11:43:21
    唯一约束唯一索引
  • 唯一索引可确保索引字段不存储重复值,即强制索引字段的唯一性。默认情况下,MongoDB在创建集合期间会在_id字段上创建唯一索引

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,898
精华内容 46,359
关键字:

唯一索引约束

友情链接: earthquake_1.rar