如何将主键和外键添加到Microsoft SQL Server数据库中的现有表

问题描述:

我创建了2个表,table123items_ordered如何将主键和外键添加到Microsoft SQL Server数据库中的现有表

  • table123具有5列:customeridfirstnamesurnamecitystate

  • items_ordered具有5列customeridorder_dateitemquantityprice

我想创建table123customerid列和items_orderedcustomerid列外键的主键。

这里是我曾经尝试创建一个主&外键代码:

ALTER TABLE table123 
    ADD PRIMARY KEY (customerid); 

ALTER TABLE items_ordered 
    ADD FOREIGN KEY (customerid) 
     REFERENCES table123 (customerid); 

然而,当我执行这些命令,它说

不能定义在空的主键约束表'123'中的列

我该如何解决这个问题?表中也没有任何空值。

P.S.我一直在使用这种替代方法创建一个主键和外键的尝试:

SELECT table123.customerid, table123.surname, 
     items_ordered.order_date, items_ordered.item, items_ordered.price 
FROM table123, items_ordered 
WHERE table123.customerid = items_ordered.customerid; 

上面的代码给了我一张表,客户ID链接到客户名称和产品购买。但是,这是创建主键&的正确方法吗?

+1

好,错误说明了这一切 - 你**不能**在可空列上创建一个主键 - 所以确保在你的定义中为'table123',你有' CustomerId INT NOT NULL' - **然后**您可以定义一个主键。而你的第二次尝试是有缺陷的,因为它应该使用**正确的ANSI/ISO JOIN语法**(而不是在'FROM'子句中以逗号分隔的方式列出表),并且它不会**创建​​主要和/或外键 - 它只是加入一个共同的列上的两个表 –

+0

好吧,它会是一个内部加入?此外,当您创建主键和外键时,它是否不会创建单独的表? – CrashBandicoot

你可以试试吗?

ALTER TABLE table123 
ALTER COLUMN customerid INT NOT NULL 

然后运行:

ALTER TABLE table123 
ADD PRIMARY KEY (customerid) 

然后,

ALTER TABLE items_ordered 
ADD FOREIGN KEY (customerid) 
REFERENCES table123 (customerid) 

您需要更改列定义为NOT NULL,并确保所有值都是唯一的,以及

+0

感谢您的帮助! – CrashBandicoot

+0

当您创建主键和外键时,是否要创建另一个表? – CrashBandicoot

+0

定义主键和外键不会创建新表,它们会在表之间创建关系。他们的主要目的是确保数据的一致性;连接也可以在其他非主/非外键列上执行。 如果您创建了一个引用另一个表的主键的外键,例如引用部门(dept_id,dept_name)的'student(stud_id,dept_id)',它会做的一件事是确保您不能用不存在的部门ID在学生表中插入一个条目。 – Shruti

当您尝试在允许具有空值的列上创建主键时,通常会发生这种情况。内容中可能没有任何空值,但该定义仍允许使用它们。

将列定义更改为不允许空值。

+0

谢谢!我认为这只是将列更改为不空的问题。 – CrashBandicoot