我遇到了一個問題,它可以插入一行到表中,而不是專門設置INT NOT NULL列(默認爲0,這對我的目的無效)如何讓某些列沒有設置時mysql無法插入一行?
我以這種方式創建表:
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)
有什麼辦法可以強制這個插入失敗創建插入觸發器嗎?
由於提前,
克里斯
附:我正在使用MySQL Ver 14.12 Distrib 5.0.45,用於redhat-linux-gnu(x86_64)使用readline 5.0
看起來不錯,但不是一種選擇,服務器上有許多數據庫,我們不能冒險破壞其他任何東西。 – Kris 2009-01-30 11:55:25