Я сталкиваюсь с проблемой, когда возможно вставить строку в таблицу без особой установки столбца INT NOT NULL (по умолчанию 0, что недопустимо для моих целей)
Я создаю таблицу следующим образом:
CREATE TABLE inventorycontrol (
ID INT NOT NULL UNIQUE AUTO_INCREMENT
,nodeID INT NOT NULL CHECK (nodeID > 0)
,custom1 VARCHAR(128) NOT NULL DEFAULT ''
,custom2 VARCHAR(128) NOT NULL DEFAULT ''
,custom3 VARCHAR(128) NOT NULL DEFAULT ''
,custom4 VARCHAR(128) NOT NULL DEFAULT ''
,articlekey VARCHAR(32) NOT NULL
,amount INT NOT NULL
,orderID INT NULL
,supplierID INT NULL
,customerID INT NULL
,datecreated DATETIME NOT NULL
,expectedcompletion DATETIME NOT NULL
,datecompleted DATETIME NULL
,PRIMARY KEY (articlekey, datecreated)
)
GO
CREATE INDEX ix_InventoryArticle ON inventorycontrol ( articlekey )
GO
CREATE INDEX ix_InventoryArticle_Custom ON inventorycontrol ( nodeID, custom1, custom2, custom3, custom4 )
GO
CREATE INDEX ix_InventoryAmount ON inventorycontrol ( amount )
GO
CREATE INDEX ix_InventoryCreated ON inventorycontrol ( datecreated )
GO
CREATE INDEX ix_InventoryCompleted ON inventorycontrol ( datecompleted )
GO
ALTER TABLE inventorycontrol
ADD FOREIGN KEY fk_nodeID (nodeID) REFERENCES node(ID)
GO
Я ожидаю, что эта вставка потерпит неудачу:
INSERT INTO inventorycontrol ( articlekey, amount, datecreated, expectedcompletion, datecompleted )
VALUES
( 'abc', -10, '2009-01-27', '2009-01-27', NULL )
GO
К сожалению, это просто работает. (нет узла WHERE ID = 0)
Есть ли способ заставить эту вставку завершиться неудачей, если не создать триггер для вставок?
Заранее спасибо,
Kris
P.S. я использую mysql Ver 14.12 Distrib 5.0.45, для redhat-linux-gnu (x86_64) используя readline 5.0