我有一个问题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 语句或任何其他解决方案来让我达到这种效果?
我不想要复合主键.我想要的是另一个领域也必须是独一无二的.
我的问题将使用电子邮件作为示例,但这可能适用于任何事情.
通常在注册新用户之前(包括插入他/她的电子邮件),我检查他/她的电子邮件是否已存在于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值的前两个字符表示错误类: …
我有两个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) 我的 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) 我正在使用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
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, …
我在网上搜索如何去除MySQL中的唯一约束,发现了很多解决方案。
DROP INDEX index_name ON table_name;
Run Code Online (Sandbox Code Playgroud)
ALTER TABLE table_name
DROP INDEX index_name;
Run Code Online (Sandbox Code Playgroud)
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
Run Code Online (Sandbox Code Playgroud)
所有这些查询之间有什么区别?这些查询中的哪一个是根据标准 SQL 的?
另外,唯一约束、唯一索引和唯一键之间有什么区别?
table1在SQL 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年的新功能吗?或者有任何设置来更改/格式化错误消息?
mysql ×4
sql-server ×3
constraints ×2
alter-table ×1
hibernate ×1
indexing ×1
insert ×1
join ×1
jpa ×1
php ×1
sql ×1
sqlite ×1
ssms ×1