sql - 创建唯一的主键以忽略重复项

标签 sql sql-server database oracle

我有一个主要的大表,我不得不将其放入第三范式和较小的表中(主键和外键链接它们)。该表是关于租书的。

我有一个客户表,我需要为其创建一个主键。在主大表中有重复的customer_id,因为整个表都是租书的,所以一个客户可能有多个租书。

我当前尝试为其添加主键的表不会有任何空值或重复项,但是我不确定如何为此创建主键而不会出现错误 - 不确定如何使其唯一。

CREATE TABLE customer AS 
    SELECT cust_id, country_id, name, address, postcode
    FROM BOOKS
    WHERE cust_id != 0;


ALTER TABLE customer
    ADD PRIMARY KEY (cust_id);

有没有人能帮助我如何在我的客户表上创建主键,而只是从主表中获取每个唯一的 cust_id。

最佳答案

在 SQL Server 中,添加唯一键的直接方法是使用 IDENTITY。标识字段是整型字段,可按指定的起始值和间隔自动填充连续值。如果您未指定间隔,它将从 1 开始,并在每次分配值时将值增加 1。

虽然这通常是在创建表时完成的,但您可以在 ALTER TABLE 步骤中完成,它会在添加到现有表时分配值。我已经明确指定了与默认值匹配的起始值和间隔以显示语法:

ALTER TABLE customer
    ADD cust_id int not null PRIMARY KEY IDENTITY(1,1)

关于sql - 创建唯一的主键以忽略重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600438/

相关文章:

database - 带有选项卡的信息窗口 (Infobubble) 仅显示最后添加的标记的内容(通过 PHP/Mysql))

ruby-on-rails - rake 中止!名称错误 : uninitialized constant Users

objective-c - 应用程序更新会删除 sqlite 中的数据吗?

sql - 从存储过程中的表中返回所有 ID

SQL来自一个分组的两个条件

mysql - SQLite 选择所有记录并计数

sql - SQL中如何显示多个表的数据

sql-server - SQL Server, 'case' 内的 Select 语句

sql-server - 在 Linq 中查询速度慢,在 LinqPad、SQL Management Studio 和 SQL Profiler 中查询速度快

mysql - MYSQL中用SUM连接表的问题