В поле SQL — ID отсутствует значение по умолчанию даже после добавления AUTO_INCREMENT (SQL Fiddle)

#mysql #sql #auto-increment #default-value

#mysql #sql #автоматическое увеличение #значение по умолчанию

Вопрос:

Я пытаюсь подключить accountID поле в accounts таблице к внешнему ключу в customers таблице. Пока это мой код:

 CREATE TABLE IF NOT EXISTS `items` ( 
`id` int(6) unsigned NOT NULL,
`name` varchar(200) NOT NULL,
PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `accounts` ( 
`accountID` int(6) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(200) NOT NULL,
`passwordHash` varchar(200) NOT NULL,
PRIMARY KEY (`accountID`) ) DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `customers` ( 
`customerID` int(6) unsigned NOT NULL,
`firstName` varchar(200) NOT NULL,
`lastName` varchar(200) NOT NULL,
`address` varchar(200) NOT NULL,
`accountID` int(6) unsigned NOT NULL,
 PRIMARY KEY (`customerID`),
 CONSTRAINT `FK_accounts_accountID` FOREIGN KEY (`accountID`)
REFERENCES `accounts` (`accountID`) );

CREATE TABLE IF NOT EXISTS `orders` ( 
`id` int(6) unsigned NOT NULL,
`date` DATE NOT NULL,
`customerID` int(6) unsigned NOT NULL,
`paymentAmmount` float(6) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 CONSTRAINT `FK_customers_customerID` FOREIGN KEY (`customerID`)
 REFERENCES `customers` (`customerID`) );

CREATE TABLE IF NOT EXISTS `items-orders` ( 
`id` int(6) unsigned NOT NULL,
`itemId` int(6) unsigned NOT NULL,
`orderId` int(6) unsigned NOT NULL,
`itemQuantity` int(1) unsigned NOT NULL,
PRIMARY KEY (`id`), 
KEY `FK_items_itemId` (`itemId`),
CONSTRAINT `FK_items_itemId` FOREIGN KEY (`itemId`) REFERENCES `items` 
(`id`) ) DEFAULT CHARSET=utf8; 


INSERT INTO `items` (`id`, `name`) VALUES 
('1', 'super cool huge bell'), 
('2', 'iron 20p Damp;D cube'),
('3', 'Dumbledore wand'),
('4', 'super cool small bell'); 

INSERT INTO `accounts` (`accountID`, `email`, `passwordHash`) VALUES
('1', 'emailAddress', 'lfadaw'),
('2', 'anotherAddress', 'dafaegdwa'),
('3', 'anotherOne', 'gaeeaw');

INSERT INTO `customers`
(`customerID`, `firstName`, `lastName`, `address`) VALUES 
('1', 'moshe', 'rubin', 'haifa'),
('2', 'tanya', 'shelomayev', 'netanya'),
('3', 'itamar', 'ofer', 'haifa'); 

INSERT INTO `orders` (`id`, `date`, `customerID`, `paymentAmmount`) VALUES 
('1', '2019-02-01', '1', '40'), 
('2', '2019-02-01', '3', '361'),
('3', '2018-10-14', '2', '10'); 

INSERT INTO `items-orders` (`id`,`itemId`,`orderId`,`itemQuantity`) VALUES 
('1', '1', '3', '2'),
('2', '4', '3', '10'),
('3', '3', '1', '1'), 
('4', '2', '2', '1'); 
  

Я добавил AUTO_INCREMENT в accountID поле, но я все еще получаю это сообщение об ошибке:
Field 'accountID' doesn't have a default value .

Когда я связал customerID поле между таблицами orders и customers , я не получил ошибку.

Я уверен, что на этот вопрос был дан ответ ранее, но все, что я нашел, это подсказка о добавлении AUTO_INCREMENT в поле, которая у меня не сработала. Любая помощь будет оценена ^^

Ответ №1:

Это потому, что ваша customer таблица содержит accountID столбец без ограничений NOT NULL и без значения по умолчанию.

Следовательно, на самом деле именно это утверждение вызывает проблему:

 INSERT INTO `customers`
(`customerID`, `firstName`, `lastName`, `address`) VALUES 
('1', 'moshe', 'rubin', 'haifa'),
('2', 'tanya', 'shelomayev', 'netanya'),
('3', 'itamar', 'ofer', 'haifa'); 
  

Комментарии:

1. В таком случае, как мне изменить таблицы, чтобы поля по-прежнему были связаны, и я мог вставлять значения в таблицы?

2. Хорошо, по-видимому, если я удалю NOT NULL из поля AccountId в таблице customers, это устранит проблему, спасибо за помощь ^^

3. @TonySlepian посмотри на это dba.stackexchange.com/questions/46410 /…