2

我必须在 SQL 中创建一个表(我正在使用 IntelliJ 和 Java),并且该表必须遵守以下限制。

该表将包含以下列:

  • 标题 - 需要能够存储字母、数字和特殊字符
  • news_description - 需要能够存储时事通讯的文本
  • publish_date - 需要能够存储一个整数(在 UNIX 系统中)

除此之外,我们还有以下限制:

  • 仅当该表不存在时才会创建该表

  • 主键将是标题

  • 2 个时事通讯不能有相同的描述

  • news_description 不能为空

  • 如果未指定发布日期,我需要使用 UTC 将其设置为 2019 年 4 月 27 日 21:11:12,并且日期必须为 UNIX 格式

      CREATE TABLE IF NOT EXISTS posts (
         title VARCHAR,
         news_description TEXT UNIQUE NOT NULL,
         publication_date "I don't know what I should write here in order to respect the last restriction"
         PRIMARY KEY(title)
      );
    

所以我的问题是我如何在创建表格时尊重我上面所说的所有限制

注意:这是我的作业,除了表格之外我不能添加任何东西,所以我需要遵守表格创建过程中的所有限制。

4

2 回答 2

1

的数据类型publication_date必须是INTEGER,并且该列的默认值必须1556399472是 的等效时间戳27 April 2019 21:11:12在 SQLite 中将日期存储为整数是没有问题的,因为通过使用SQLite 的日期和时间函数的修饰符
很容易检索可读的日期。 例如:'unixepoch'

SELECT DATETIME(1556399472, 'unixepoch')

返回:

2019-04-27 21:11:12

SQLite中也没有数据类型VARCHAR。你应该使用TEXT.

所以你的表的创建语句可以是:

CREATE TABLE IF NOT EXISTS posts (
  title TEXT,
  news_description TEXT UNIQUE NOT NULL,
  publication_date INTEGER NOT NULL DEFAULT 1556399472,
  PRIMARY KEY(title)
);

如果您希望它可以为空,您可以NOT NULL从定义中删除。publication_date

于 2020-09-26T17:06:06.727 回答
0

据我所知,Unix 格式是指 Unix 纪元格式,即自 1970-01-01 以来的秒数。这将表示为一个数字:

publication_date int default 1556399472

也就是说,我真的建议使用内置datetime数据类型:

publication_date datetime default '2019-04-27 21:11:12'

在需要时转换为 Unix 纪元很容易。

于 2020-09-26T12:13:58.230 回答