有意义的表创建

在前面的课程中,我们已经对创建表的查询有了一些了解,现在是时候深入研究一下了。

创建表与在 Java 中声明类非常相似,并且具有以下模式:

CREATE TABLE table_name (
	column1 datatype,
	column2 datatype,
	column3 datatype,
   ....
);

例如,让我们编写一个查询来创建一个包含用户的表:

CREATE TABLE user (
	id INT,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

它看起来很简单,因为这里没有指出很多细微差别。

首先,表格可能有额外的设置。

其次,每一列都可以有额外的设置。

我们将从创建列的设置开始。

表中的键

除了名称和数据类型之外,表列还可以具有以下设置:

首要的关键 列是表的键
唯一键 所有列值必须是唯一的。
默认值 默认值
不为空 禁止接受值NULL
自动递增 当新记录添加到表中时,SQL Server 将自动增加该值
生成的 计算字段
贮存 数据存储在哪里:在磁盘上还是在内存中
评论 列注释,例如当地语言的标题

下面我们将看看其中的一些。

首先,它是PRIMARY KEY

大多数情况下,这是一个单独的列,名称为 id,类型为 INT。这就是所谓的表的“主键”,它的所有行都有这个键的唯一值。主要用来让其他表可以引用我们表的记录,指向它的具体记录。

其次是UNIQUE KEY

在某些方面,它类似于 PRIMARY KEY,尽管它的语义负载完全不同。如果一列具有 UNIQUE 属性,那么该列中的所有值都必须是唯一的。UNIQUE KEY 和 PRIMARY KEY 之间区别的一个很好的例子是护照办公室的人员名单。

税号是一个 PRIMARY KEY,它用于方便地从其他表中引用合适的人。

护照号码是唯一的钥匙。没有两个人可以拥有相同的护照号码。但是,护照号码可以更改。比如改姓的时候。税号将永远留在您身边。这是PRIMARY KEY的主要任务。指定 PRIMARY KEY 的查询示例:

CREATE TABLE user (
	id INT PRIMARY KEY,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

数据类型设置

还有一些不太重要但有用的属性。

默认值

在向表中插入数据(添加新行)时,如果某些列有默认值,则可以省略它们的值。在这种情况下,SQL 服务器将简单地设置列本身的值。

从 MySQL 版本 8 开始,您可以将表达式指定为值。

不为空

如果在创建表时为一列指定了NOT NULL属性,那么SQL Server将确保不可能在该列中存储NULL值。默认情况下,任何列都可以有 NULL 值,即使是 INT 列。这对于 Java 程序员来说有点不明显。

自动递增

它通常用于列 ID。当您向表中添加新行时,您确实希望 SQL 服务器为该条目分配一个 ID。谁比服务器更清楚他在表中有多少行。特别是如果来自不同客户端的请求转到同一个 SQL 服务器。

这正是 AUTO_INCREMENT 属性的作用。添加新行时,我们不传递任何 id,SQL Server 将为该记录指定正确的 ID:它将简单地获取最后一个现有记录的 ID 并将其增加 1。该属性只能是与整数和实数类型一起使用。当然,让我们举一个创建这样一个表的例子:

CREATE TABLE user (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL,
	level INT DEFAULT 1,
	created_date DATE NOT NULL,
);