鉴于下表:
DROP TABLE IF EXISTS my_table;
CREATE TABLE IF NOT EXISTS my_table(
id INT NOT NULL,
timestamp TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3) NOT NULL,
data BLOB NULL,
PRIMARY KEY (id)
);
我可以插入:
INSERT INTO my_table (timestamp, data) VALUES
('2014-07-11 11:25:48.185', LOAD_FILE('sql/file.bin'));
在上面的插入中,我没有强制插入id
字段。
如何创建表格my_table
)以防止在没有id
的情况下插入?
我希望每个插件都可以制作(提供id
),例如:
INSERT INTO my_table (id, timestamp, data) VALUES
(7, '2014-07-11 11:25:48.185', LOAD_FILE('sql/file.bin'));
我在想NOT NULL
就在那里。
答案 0 :(得分:0)
要防止ID
的空值插入(或未传递值),只需将列定义为您定义的NOT NULL
。
我无法看到您的示例是如何工作的(即只插入(timestamp, data)
)。
现在,另一个带有触发器的表在此表中插入的事实对此表的ID
列没有任何影响。如果将其定义为AUTO_INCREMENT
,则无论何时插入新行,ID都将自动获得一个新值,该值将完全独立于第一个表的任何数据。
您可以使用自动递增的字段包含任意数量的表,每个字段运行不同的序列(因此它们的编号将完全独立)。
总结:
CREATE TABLE IF NOT EXISTS my_table(
id INT NOT NULL AUTO_INCREMENT ,
timestamp TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ,
data BLOB NULL ,
PRIMARY KEY (id)
);