Skip to content

数据库数据结构和字段详解

· 4 min · 数据库 / SQL / 学习笔记

一、在数据库中创建表#

create table table_test(
id int comment 'id',
name varchar(10)
)comment '测试表';

上述代码创建了一个叫做table_test,并创建了int类型的键id,varchar类型长度为10的键name。

二、键的约束#

1、主键约束(primary key)#

主键用来唯一标识表中的每一行数据,主键字段不能包含NULL值,且每个表只能有一个主键。

create table table_test(
id int comment 'id' primary key, --将id设为主键
name varchar(10)
)comment '测试表';

代理键是系统自动生成的不带有特殊意义的可以作为主键的键,在Postgre数据库中可以使用serial创建代理键,并且使用表级约束将代理键设为主键。

代理键会自动从零递增。

create table table_test(
id serial not null comment 'id',
name varchar(10),
constraint id_check primary key id
)comment '测试表';

2、唯一约束(unique)#

确保字段的值在整个表中是唯一的,可以为NULL,可以单独作为一个约束使用,也可以和主键约束一起使用。

create table table_test(
id int comment 'id' primary key, --将id设为主键
name varchar(10) unique --使name字段的值唯一
)comment '测试表';

也可以使用表级约束定义由多个列组成的复合主键constraint table_test_PK primary key (id,name)

复合主键用来将两列不能唯一的列组合起来以构成唯一的列,来确保表中具有能作为主键的列。

3、检查约束(check)#

约定字段的值在一个规定的范围内。

create table table_test(
id int check (id >= 0) comment 'id', --为字段添加了检查约束使得id必须大于零
name varchar(10)
)comment '测试表';

也可以在表级别进行检查约束,在定义列之后可以加上constraint id_check check (id >= 0),这个约束名为id_check,并且作用于id字段。

可以使用enum枚举类型代替检查约束。

在这里也可以用语句name varchar(10) check (name in ('小明','小红'))达到一样的效果。

create table table_test(
id int comment 'id',
name enum('小明','小红') --限制name只能取值为两个枚举量
)comment '测试表';

4、默认约束(default)#

指定一个字段的默认值。

create table table_test(
id int default 0 comment 'id' ,--id默认值为0
name varchar(10)
)comment '测试表';

5、非空约束(not null)#

约束一个字段的值不能为空。

create table table_test(
id int not null comment 'id', --值不能为空
name varchar(10)
)comment '测试表';

6、外键约束(foreign key)#

外键约束使得一个字段的取值必须来自于另一个表的特定字段(通常是主键)。

CREATE TABLE cities (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
city_id INT,
FOREIGN KEY (city_id) REFERENCES cities(id)
);

以上的代码对city_id添加了约束使得其值只能是city表中的id取值。

三、数据结构#

数据库有三种数据结构

1、数值类型#

2、字符串类型#

3、时间日期类型#

四、字段额外属性#