如何使用特定字段强制插入?

时间:2016-11-22 13:22:37

标签: mysql

鉴于下表:

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就在那里。

1 个答案:

答案 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)
  );