如何解决在MySQL中将主键转换为唯一键
我有一张这样的桌子:
public class IndexModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
public SelectList Genres { get; set; }
[BindProperty(SupportsGet = true)]
public List<string> MovieGenre { get; set; }
public void OnGet()
{
// Transfer data here.
Genres = new SelectList(new List<Genre> {
new Genre{id=1,GenreName="Genre1"},new Genre{id=2,GenreName="Genre2"},new Genre{id=3,GenreName="Genre3"},},"id","GenreName");
}
}
public class Genre
{
public int id { get; set; }
public string GenreName { get; set; }
}
如果我需要将num的约束从主键更改为唯一键,该怎么办? 我做到了:
<form>
<select asp-for="MovieGenre" asp-items="Model.Genres" multiple>
<option value="">All</option>
</select>
<input type="submit" value="Filter" />
</form>
另一个:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | int(11) | NO | PRI | NULL | |
| t | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
我还应该使用什么将主键更改为唯一的键?
解决方法
执行show create table c2
而不是desc
,以更好地了解存在哪些索引。您的第一个成功的alter表添加了一个唯一键,但是不会删除主键。要同时删除主键,请执行以下操作:
alter table c2 drop primary key;
然后show create表将向您显示num是唯一键,而不是主键。
但是,mysql确实要求所有表都具有主键;如果您不指定一个,并且有一个唯一键,其所有列都为not null
,它将使用该键作为主键;否则,它将创建一个隐藏的列用作主键。显然,desc
仍将显示合格的唯一键为PRI
,即使该键仅用作主键,而实际上并未指定为主键。
https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=f1d7542f80421eca1b37a2373715f800
,第一个唯一键将在desc命令中显示为主键。但是您可以使用以下命令进行检查
显示创建表c2;
然后您会找到 唯一键num
(num
) ,如果您要删除唯一键,可以在下面添加更改查询/命令
更改表c2删除键编号;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。