我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
Run Code Online (Sandbox Code Playgroud)
现在我想使列用户,电子邮件,地址唯一(一起).
我如何在MySql中执行此操作?
我可以在SQLite网站上找到关于此的语法"图表",但没有示例和我的代码崩溃.我在单个列上有其他具有唯一约束的表,但我想在两列上向表添加约束.这就是我所带来的SQLiteException,消息"语法错误".
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Run Code Online (Sandbox Code Playgroud)
我这样做是基于以下几点:
为了清楚起见,我提供的链接上的文档说明CONTSTRAINT name应该在我的约束定义之前.
可能导致解决方案的一点是,无论我的括号列定义如何,调试器都会抱怨.
如果我放
...last_column_name last_col_datatype) CONSTRAINT ...
Run Code Online (Sandbox Code Playgroud)
错误接近"CONSTRAINT":语法错误
如果我放
...last_column_name last_col_datatype) UNIQUE ...
Run Code Online (Sandbox Code Playgroud)
错误接近"UNIQUE":语法错误
我有下表:
tickername | tickerbbname | tickertype
------------+---------------+------------
USDZAR | USDZAR Curncy | C
EURCZK | EURCZK Curncy | C
EURPLN | EURPLN Curncy | C
USDBRL | USDBRL Curncy | C
USDTRY | USDTRY Curncy | C
EURHUF | EURHUF Curncy | C
USDRUB | USDRUB Curncy | C
Run Code Online (Sandbox Code Playgroud)
对于任何给定tickername/ tickerbbname对,我不希望任何列都有多个列.我已经创建了表并且其中包含大量数据(我已经确保它符合唯一标准).然而,随着它变得越来越大,错误的空间越来越大.
有没有办法UNIQUE在这一点上添加约束?
我在PostgreSQL中有一个表,其中的模式如下所示:
CREATE TABLE "foo_table" (
"id" serial NOT NULL PRIMARY KEY,
"permalink" varchar(200) NOT NULL,
"text" varchar(512) NOT NULL,
"timestamp" timestamp with time zone NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
现在,我希望通过ALTER-ing表使表中的固定链接唯一.任何人都可以帮我吗?
TIA
我有一个已经存在的表,其中一个字段应该是唯一的但不是.我只知道这一点,因为表中的条目与另一个已存在的条目具有相同的值,这导致了问题.
如何使此字段仅接受唯一值?
题
是否可以使用流畅的语法或属性在属性上定义唯一约束?如果没有,有哪些解决方法?
我有一个带有主键的用户类,但我想确保电子邮件地址也是唯一的.这是否可以直接编辑数据库?
解决方案(基于马特的答案)
public class MyContext : DbContext {
public DbSet<User> Users { get; set; }
public override int SaveChanges() {
foreach (var item in ChangeTracker.Entries<IModel>())
item.Entity.Modified = DateTime.Now;
return base.SaveChanges();
}
public class Initializer : IDatabaseInitializer<MyContext> {
public void InitializeDatabase(MyContext context) {
if (context.Database.Exists() && !context.Database.CompatibleWithModel(false))
context.Database.Delete();
if (!context.Database.Exists()) {
context.Database.Create();
context.Database.ExecuteSqlCommand("alter table Users add constraint UniqueUserEmail unique (Email)");
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 命名约定很重要,主键和外键具有常用和明显的约定(PK_Table和FK_Table_ReferencedTable分别).IX_Table_Column索引的命名也是相当标准的.
UNIQUE约束怎么样?这个约束是否有一个普遍接受的命名约定?我见过UK_TableName_Column,UQ_TableName_Column有人推荐AX_TableName_Column- 我不知道它来自哪里.
我经常使用,UQ但我并不特别喜欢它,我不喜欢捍卫我选择使用它来反对UK倡导者.
我只想看看是否就最流行的命名达成了共识,或者是为什么一个人比其他人更有意义的一个很好的推理.
我有SQL Server 2008 R2,我想设置一个唯一的列.
似乎有两种方法可以做到这一点:"唯一索引"和"唯一约束".尽管大多数人都推荐使用唯一约束,但它们与我的理解并没有太大差别,因为您也会自动获得索引.
如何创建唯一约束?
ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)
Run Code Online (Sandbox Code Playgroud)
有没有办法通过SQL Server Management Studio创建唯一约束?
我必须为现有表添加唯一约束.这很好,除了表已经有数百万行,并且许多行违反了我需要添加的唯一约束.
删除有问题的行的最快方法是什么?我有一个SQL语句,它找到重复项并删除它们,但它需要永远运行.有没有其他方法可以解决这个问题?也许备份表,然后在添加约束后恢复?
sql postgresql duplicate-removal unique-constraint sql-delete
我想添加一个约束,该约束仅在表的一部分中强制列的唯一性.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
Run Code Online (Sandbox Code Playgroud)
WHERE上面的部分是一厢情愿的想法.
这样做的任何方式?或者我应该回到关系绘图板?
sql ×5
postgresql ×4
mysql ×2
sql-server ×2
code-first ×1
compound-key ×1
constraints ×1
database ×1
indexing ×1
sql-delete ×1
sqlite ×1