Я новичок в SQL
и хочу создать связь между двумя таблицами One-To-Many
. У меня есть эти две таблицы, созданные с помощью следующих запросов:SQL One-to-Many Отношения
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 Я не знаю, я довольно новичок в базах данных ... как я могу узнать? –
«показать статус таблицы» должен предоставить вам типы двигателей – raj