Je suis en cours d'exécution dans un problème où il est possible d'insérer une ligne dans une table whithout réglage spécifique INT colonne NOT NULL (0 par défaut qui est valide pour mes besoins)Comment faire mysql échouer à insérer une ligne quand une colonne n'est pas définie?
Je crée la table de cette façon:
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
j'attendre cet insert à l'échec:
INSERT INTO inventorycontrol (articlekey, amount, datecreated, expectedcompletion, datecompleted)
VALUES
('abc', -10, '2009-01-27', '2009-01-27', NULL)
GO
Malheureusement, cela fonctionne. (il n'y a pas de nœud WHERE ID = 0)
Y at-il un moyen de forcer cette insertion à échouer à court de créer un déclencheur pour les insertions?
Merci à l'avance,
Kris
post-scriptum J'utilise mysql Ver 14.12 Distrib 5.0.45, pour redhat-linux-gnu (x86_64) en utilisant readline 5.0
Cela semble bien mais n'est pas une option, il y a beaucoup de bases de données sur le serveur et nous ne pouvons pas risquer de casser quoi que ce soit d'autre. – Kris
La modification semble bonne, mais malheureusement, je ne serai probablement pas le gars qui fait les INSERT réels. Je lis sur le concept, peut-être que je peux réécrire les spécifications pour permettre les déclencheurs. (les déclencheurs sont problématiques à copier de db à db) – Kris
Je pense que si vous ne pouvez pas changer le SQL ou la configuration du serveur, les déclencheurs sont tout ce qui reste – Greg