如何将主键和外键添加到Microsoft SQL Server数据库中的现有表
我创建了2个表,table123
和items_ordered
。如何将主键和外键添加到Microsoft SQL Server数据库中的现有表
table123
具有5列:customerid
,firstname
,surname
,city
和state
items_ordered
具有5列customerid
,order_date
,item
,quantity
和price
。
我想创建table123
在customerid
列和items_ordered
在customerid
列外键的主键。
这里是我曾经尝试创建一个主&外键代码:
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链接到客户名称和产品购买。但是,这是创建主键&的正确方法吗?
你可以试试吗?
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,并确保所有值都是唯一的,以及
感谢您的帮助! – CrashBandicoot
当您创建主键和外键时,是否要创建另一个表? – CrashBandicoot
定义主键和外键不会创建新表,它们会在表之间创建关系。他们的主要目的是确保数据的一致性;连接也可以在其他非主/非外键列上执行。 如果您创建了一个引用另一个表的主键的外键,例如引用部门(dept_id,dept_name)的'student(stud_id,dept_id)',它会做的一件事是确保您不能用不存在的部门ID在学生表中插入一个条目。 – Shruti
当您尝试在允许具有空值的列上创建主键时,通常会发生这种情况。内容中可能没有任何空值,但该定义仍允许使用它们。
将列定义更改为不允许空值。
谢谢!我认为这只是将列更改为不空的问题。 – CrashBandicoot
好,错误说明了这一切 - 你**不能**在可空列上创建一个主键 - 所以确保在你的定义中为'table123',你有' CustomerId INT NOT NULL' - **然后**您可以定义一个主键。而你的第二次尝试是有缺陷的,因为它应该使用**正确的ANSI/ISO JOIN语法**(而不是在'FROM'子句中以逗号分隔的方式列出表),并且它不会**创建主要和/或外键 - 它只是加入一个共同的列上的两个表 –
好吧,它会是一个内部加入?此外,当您创建主键和外键时,它是否不会创建单独的表? – CrashBandicoot