标签: unique-constraint

由 2 列组成的唯一约束,其中一列具有特定值

我有一个问题UNIQUE CONSTRAINT

我需要添加基于两列的约束,其中一列需要具有特定值。

例如,假设我有一个users表,它当然包含用户,并且主键只是一个递增的整数。

我有一个configurations表,除了配置列之外还有两列:(user_id表的外键users)并且main采用 0/1 值。

逻辑如下:一个用户可以有多个配置,一个配置属于一个用户 - 如表所示。但是,我想限制它,以便一个用户只能有一个主要配置(main = 1)并考虑唯一性。

我试过了

ALTER TABLE `configurations` ADD UNIQUE `unique_main_user`(`user_id`, `main`);
Run Code Online (Sandbox Code Playgroud)

但这将限制我只能使用一种主要配置和一种非主要配置,这很混乱。

是否有可能添加 WHERE 语句或任何其他解决方案来让我达到这种效果?

mysql unique-constraint

1
推荐指数
1
解决办法
1098
查看次数

SQLite表是否可以具有除主键之外的更多唯一字段?

我不想要复合主键.我想要的是另一个领域也必须是独一无二的.

sqlite unique-constraint

0
推荐指数
1
解决办法
237
查看次数

在插入[mysql_errno()]之前检查预先存在的记录的最快方法

我的问题将使用电子邮件作为示例,但这可能适用于任何事情.


通常在注册新用户之前(包括插入他/她的电子邮件),我检查他/她的电子邮件是否已存在于DB中,如下所示:

$result = mysql_query("SELECT * FROM Users WHERE email = '".mysql_real_escape_string($email)"';");
if(!$result)
{
    die(mysql_error());
}

if(mysql_num_rows($result) > 0)
{
    die('<p>Email already in DB. <a....>Recover Email</a></p>');
}
else
{
    //insert new user data into Users table
}
Run Code Online (Sandbox Code Playgroud)

既然我已经限制了email我的Users表中的字段UNIQUE,那么首先尝试插入是否会更快,如果失败,请检查错误?像这样的东西:

$result = mysql_query(...);//insert new user data into Users table
if(!$result)
{
    if(mysql_errno()==$insert_unique_error)
    {
        $error = '<p>Email already in DB. <a....>Recover Email</a></p>';
    }
    else
    {
        $error = mysql_error();
    }
    die($die_str);
}
Run Code Online (Sandbox Code Playgroud)

问题是我不知道应该是什么$insert_unique_error.这些是我能找到的唯一错误代码:

SQLSTATE值的前两个字符表示错误类: …

php mysql error-handling insert unique-constraint

0
推荐指数
1
解决办法
4495
查看次数

为JPA2带注释的类添加唯一约束会导致createManagerFactory失败

我有两个JPA2注释类和一个工作JUnit测试,但他们决定添加唯一的约束,这会导致createManagerFactory失败.

以下是课程:

@Entity 
@NamedQuery(
    name="XmlConversion.Queries.XmlByPdfAndPdf2Xml",
    query="SELECT c FROM XmlConversion c WHERE c.pdf = :pdfname AND c.pdf2xml_sha1 = :pdf2xml") 
@Table(name = "xml_conversion", uniqueConstraints={
       @UniqueConstraint(columnNames={"pdf_id", "pdf2xml_sha1"})})
public class XmlConversion implements java.io.Serializable {

private Integer id;
private Pdf pdf;
private Long xmlOutputSize;
private String pdf2xml_sha1;
private Integer durationMillisec;
private Date createdAt;

public XmlConversion() {
}

public XmlConversion(Pdf pdf, String pdf2xml_sha1_sourceforge) {
    this.pdf = pdf;
    this.pdf2xml_sha1 = pdf2xml_sha1_sourceforge;
}

public XmlConversion(Pdf pdf, Long xmlOutputSize, String gitVersion,
        Integer durationMillisec) {
    this.pdf = pdf;
    this.xmlOutputSize = …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa join unique-constraint

0
推荐指数
1
解决办法
1480
查看次数

在多个字段上查找违反唯一约束的重复行

我的 CMS 升级有以下查询:

ALTER IGNORE TABLE locales_target ADD PRIMARY KEY (language, lid, plural)
Run Code Online (Sandbox Code Playgroud)

它失败的原因是:“键'PRIMARY'的重复条目'1-0'”。

我实际上在上面的查询中添加了 IGNORE ,但它没有帮助,因为表使用 InnoDB 引擎,所以实际上并没有忽略错误。

此页面显示如何查找违反唯一约束的重复行:http : //www.tocker.ca/2013/11/06/the-future-of-alter-table-ignore-syntax.html

SELECT GROUP_CONCAT(id), emailaddress, count(*) as count FROM users 
GROUP BY emailaddress HAVING count >= 2;
Run Code Online (Sandbox Code Playgroud)

但它是针对一个独特的领域。如何使用 3 字段主键查找重复行?

编辑:原始问题仍然存在,但这里有更多信息和更多相关问题:

1) '1-0' 在错误信息中代表什么?没有盖子 == 0 的行!

2)以下查询突出显示了部分问题:

mysql> select lid,  count(*) as count from france_locales_target group by lid having count != 1;
+------+-------+
| lid  | count |
+------+-------+
|    1 |     2 |
|    2 |     2 …
Run Code Online (Sandbox Code Playgroud)

mysql unique-constraint

0
推荐指数
1
解决办法
2437
查看次数

如何为条件唯一值创建约束?

我正在使用SQL Server.我有这张桌子:

CREATE TABLE Student
(
   ID int PRIMARY KEY,
   FirstName varchar(100),
   LastName varchar(100),
   Active bit;
)
Run Code Online (Sandbox Code Playgroud)

我希望只有Active = 1才能拥有唯一(FirstName,LastName)学生.如果它们处于非活动状态,则不应触发唯一约束.任何的想法?

sql sql-server constraints check-constraints unique-constraint

0
推荐指数
1
解决办法
82
查看次数

Set a unique constraint across multiple table columns

I am creating a table in SQL Server with the following columns:

ic_card_num, 
employee_id, 
active
Run Code Online (Sandbox Code Playgroud)

multiple duplicates of ic_card_num and active are okay if only one card is active:

employee_id | ic_card_num |  active       
   123      |    111      |   false      
   235      |    111      |   true      
   987      |    111      |   false      
Run Code Online (Sandbox Code Playgroud)

I want to avoid this:

employee_id | ic_card_num |  active       
   123      |    111      |   true      
   235      |    111      |   true      
   987      |    111      |   false      
Run Code Online (Sandbox Code Playgroud)

I am working with SQL Server, …

sql-server database-design unique-constraint

0
推荐指数
1
解决办法
47
查看次数

如何删除MySQL中的唯一约束?

我在网上搜索如何去除MySQL中的唯一约束,发现了很多解决方案。

  1. DROP INDEX index_name ON table_name;
    
    Run Code Online (Sandbox Code Playgroud)
  2. ALTER TABLE table_name
    DROP INDEX index_name;
    
    Run Code Online (Sandbox Code Playgroud)
  3. ALTER TABLE table_name
    DROP CONSTRAINT constraint_name; 
    
    Run Code Online (Sandbox Code Playgroud)

所有这些查询之间有什么区别?这些查询中的哪一个是根据标准 SQL 的?

另外,唯一约束、唯一索引和唯一键之间有什么区别?

MySQL词汇表截图; 链接:https://dev.mysql.com/doc/refman/8.0/en/glossary.html

mysql indexing constraints alter-table unique-constraint

-1
推荐指数
1
解决办法
165
查看次数

SSMS在违反UNIQUE KEY约束的2008和2014年显示差异错误消息

table1SQL Server 2008实例中将记录插入我的表时,我收到以下错误

消息2627,级别14,状态1,行1
违反UNIQUE KEY约束'IX_table1'.无法在对象'dbo.table1'中插入重复键.

但是在执行相同的查询SQL Server 2014(上述数据库的副本)时,我在错误消息中得到了一些区别

消息2627,级别14,状态1,行2
违反UNIQUE KEY约束'IX_table1'.无法在对象'dbo.table1'中插入重复键.
重复键值为(xxx,).

2014年,错误消息指定消息(The duplicate key value is xxx)中的重复值,但在2008年它没有.

为什么这个?这是2014年的新功能吗?或者有任何设置来更改/格式化错误消息?

sql-server ssms unique-constraint

-2
推荐指数
1
解决办法
113
查看次数