什么时候应该使用KEY,PRIMARY KEY,UNIQUE KEY和INDEX?
我正在使用mysql数据库.我在主键和唯一键之间存在混淆.
请帮我在哪里创建主键和唯一键.我的意思是在哪种情况下我们创建唯一的密钥或主键.
我正在使用Entity Framework 5.0 Code First;
public class Entity
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string EntityId { get; set;}
public int FirstColumn { get; set;}
public int SecondColumn { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想在两者之间进行组合,FirstColumn并且SecondColumn作为独特的组合.
例:
Id FirstColumn SecondColumn
1 1 1 = OK
2 2 1 = OK
3 3 3 = OK
5 3 1 = THIS OK
4 3 3 = GRRRRR! HERE ERROR
Run Code Online (Sandbox Code Playgroud)
反正有吗?
entity-framework constraints unique-key multiple-columns ef-code-first
我有一个表,其中包含两列唯一键:
CREATE TABLE `xpo`.`user_permanent_gift` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`fb_user_id` INT UNSIGNED NOT NULL ,
`gift_id` INT UNSIGNED NOT NULL ,
`purchase_timestamp` TIMESTAMP NULL DEFAULT now() ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `user_gift_UNIQUE` (`fb_user_id` ASC, `gift_id` ASC) );
Run Code Online (Sandbox Code Playgroud)
我想在该表中插入一行,但如果该键存在,则什么都不做!我不希望生成错误,因为密钥存在.
我知道有以下语法:
INSERT ... ON DUPLICATE KEY UPDATE ...
Run Code Online (Sandbox Code Playgroud)
但是有类似的东西:
INSERT ... ON DUPLICATE KEY DO NOTHING
Run Code Online (Sandbox Code Playgroud)
?
任何人都可以解释一下目的PRIMARY KEY,UNIQUE KEY并且KEY,如果将它放在CREATE TABLEMySQL 中的单个语句中?
CREATE TABLE IF NOT EXISTS `tmp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`tag` int(1) NOT NULL DEFAULT '0',
`description` varchar(255),
PRIMARY KEY (`id`),
UNIQUE KEY `uid` (`uid`),
KEY `name` (`name`),
KEY `tag` (`tag`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)
如何将此查询转换为MSSQL?
我的项目中有以下模型
public class Category
{
public Guid ID { get; set; }
[Required(ErrorMessage = "Title cannot be empty")]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而我正在尝试制作一个Title独特的密钥,我搜索解决方案,但找不到任何.可以建议我怎么做,拜托?
我想在现有表中添加复杂的唯一键.主要从4个领域(包括user_id,game_id,date,time).但是表有非唯一的行.我知道我可以删除所有重复的日期,然后添加复杂的密钥.
可能存在另一种解决方案而不搜索所有重复数 (比如添加唯一的忽略等).
UPD我搜索过,如何删除重复的mysql行 - 我认为这是很好的解决方案. 仅使用MySQL查询删除重复项?
我需要从我的mysql表中删除一个唯一的密钥.如何使用mysql查询删除它.
我试过这个,但它没有用
alter table tbl_quiz_attempt_master drop unique key;
Run Code Online (Sandbox Code Playgroud)
请帮我
谢谢
我在表中有一个列(例如UserName),我想确保它是唯一的.所以我为该列创建了一个唯一键,并将其命名为IX_Users_UserName.
现在,如果我根据用户名搜索大量用户,我想确保该字段有索引.
我是否需要创建单独的索引,或者是唯一的键还被视为索引,就像主键是群集唯一键一样?
我的一个表有一个唯一的密钥,当我尝试插入一个重复的记录时,它会按预期抛出异常.但我需要区分唯一的密钥异常,以便我可以为唯一的密钥约束违规自定义错误消息.
我发现所有的解决方案在网上提出投ex.InnerException给System.Data.SqlClient.SqlException和检查,如果Number属性等于2601或2627,如下所示:
try
{
_context.SaveChanges();
}
catch (Exception ex)
{
var sqlException = ex.InnerException as System.Data.SqlClient.SqlException;
if (sqlException.Number == 2601 || sqlException.Number == 2627)
{
ErrorMessage = "Cannot insert duplicate values.";
}
else
{
ErrorMessage = "Error while saving data.";
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是,铸造ex.InnerException到System.Data.SqlClient.SqlException原因无效的转换错误,因为ex.InnerException实际上是一个类型的System.Data.Entity.Core.UpdateException,不是System.Data.SqlClient.SqlException.
上面的代码有什么问题?如何捕获Unique Key Constraint违规?
c# sql-server exception-handling unique-key entity-framework-6
unique-key ×10
mysql ×5
primary-key ×3
sql-server ×3
c# ×2
indexing ×2
sql ×2
constraints ×1
database ×1