我是SQL
的新手,我想在两个表之间创建一个One-To-Many
关系。 我有以下的数据库查询这两个表:SQL一对多关系
CREATE TABLE Customers
(
CustomerId INT NOT NULL AUTO_INCREMENT,
FirstName VARCHAR(255) NOT NULL,
LastName VARCHAR(255) NOT NULL,
Email VARCHAR(255) NOT NULL,
Address VARCHAR(255) NOT NULL,
PRIMARY KEY(CustomerId)
);
CREATE TABLE Orders
(
OrderId INT NOT NULL AUTO_INCREMENT,
Date DATE NOT NULL,
Quantity INT NOT NULL,
TotalDue FLOAT NOT NULL,
CustomerId INT NOT NULL,
PRIMARY KEY(OrderId),
FOREIGN KEY(CustomerId) REFERENCES Customers(CustomerId)
);
不过即使我设置CustomerId
作为Orders
表的外键,我仍然能够在Orders
表与CustomerId
是添加行不在Customers
表中。为什么是这样以及如何在表格之间创建一个真正的链接?
这是表的样子(从我mysql
客户端的复制/粘贴):
mysql> select * from Customers;
+------------+-----------+----------+-------------------+------------------------+
| CustomerId | FirstName | LastName | Email | Address |
+------------+-----------+----------+-------------------+------------------------+
| 1 | Jacks | James | [email protected] | Str. Moony, No. 9 |
| 2 | Mock | Grad | [email protected] | Str. Mars, No. 91 |
| 3 | James | Geremy | [email protected] | Str. Monday, No. 12 |
| 4 | Joana | Joan | [email protected] | Str. Comete, No. 19 |
| 5 | Granicer | James | [email protected] | Str. Sydney, No. 651 |
+------------+-----------+----------+-------------------+------------------------+
5 rows in set (0.00 sec)
mysql> select * from Orders;
+---------+------------+----------+----------+------------+
| OrderId | Date | Quantity | TotalDue | CustomerId |
+---------+------------+----------+----------+------------+
| 1 | 2014-01-09 | 10 | 340 | 3 |
| 2 | 2014-01-09 | 1 | 50 | 3 |
| 3 | 2014-01-09 | 11 | 55 | 5 |
| 4 | 2014-01-09 | 11 | 55 | 51 |
+---------+------------+----------+----------+------------+
4 rows in set (0.00 sec)
正如你可以看到OrderId
4包含CustomerId
51客户是不是在Customers
表。
您是否使用InnoDB引擎的表? – raj
@raj我不知道,我对数据库相当陌生...我怎么知道? –
“show table status”应该给你引擎类型 – raj