数据表的基本操作之创建数据表

数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。

本模块将介绍数据表的基本操作,主要内容包括:创建数据表、修改数据表、删除数据表。

1、创建数据表

数据表属于数据库,在创建数据表之前,应该先在对象管理器中选择在哪个数据库中进行,如果没有选择数据库,则不能创建数据表。常见的创建数据表的方法有两种。

(1)使用对象管理器创建数据表

(2)使用SQL语句创建数据表

创建数据表的语句为create table,语法规则如下:

create table <表名>
(
字段名1 数据类型 [列级别约束条件] [默认值],
字段名2 数据类型 [列级别约束条件] [默认值],
...
[表级别约束条件]
);

使用create table创建表时,必须指定以下信息:

-- 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如 drop、alter、insert等。

-- 数据表中如果要创建多个列,每一个列(字段)的名称和数据类型都要用逗号隔开。

CREATE TABLE entity_alarm
(
  id text,
  source text,
  alarm text,
  status text,
  assign text,
  devicetype text,
  alarmtype text,
  occur_time timestamp without time zone,
  collect_time timestamp without time zone,
  clear_time timestamp without time zone,
  clear_insert timestamp without time zone,
  tkt_id text,
  sms_send_flag numeric
);

2、使用主键约束

主键是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。

(1)单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况。

1)在定义列的同时指定主键,语法规则如下:

字段名 数据类型 primary key

上边的表定义其主键为id,SQL语句如下:

CREATE TABLE entity_alarm
(
  id text primary key,
  source text,
  alarm text,
  status text,
  assign text,
  devicetype text,
  alarmtype text,
  occur_time timestamp without time zone,
  collect_time timestamp without time zone,
  clear_time timestamp without time zone,
  clear_insert timestamp without time zone,
  tkt_id text,
  sms_send_flag numeric
);

在【对象浏览器】窗格中选择所创建的数据表,在右侧的窗口中选择【附属关系】选项卡,即可看到主键的类型,如图所示

 

2)在定义完所有列之后指定主键,语法规则如下:

[constraint <约束名>] primary key [字段名]

上边的数据表也可如下创建:

CREATE TABLE entity_alarm
(
  id text,
  source text,
  alarm text,
  status text,
  assign text,
  devicetype text,
  alarmtype text,
  occur_time timestamp without time zone,
  collect_time timestamp without time zone,
  clear_time timestamp without time zone,
  clear_insert timestamp without time zone,
  tkt_id text,
  sms_send_flag numeric,
  primary key(id)
);

两个实例结果是一样的,都会在id字段上设置主键约束。 
 
(2)多字段联合主键

主键由多个字段联合组成,语法规则如下:

primary key [字段1, 字段2, ..., 字段n]

 假如存在一个员工表,表中没有主键id,为了唯一的确定一个员工,可以把名字和部门联合起来作为主键,SQL语句如下:

create table tb_emp
(
  name text,
  deptId text,
  salary numeric,
  primary key(name, deptId)
);

3、使用外键约束

外键用来在两个表的数据之间建立连接,它可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

-- 外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键的作用主要作用是保证数据引用的完整性。定义外键后,不允许删除在另一个表中具有关联关系的行。例如,部门表tb_dept的主键是id,在员工表tb_emp中有一个键deptId与这个id关联。

部门表tb_dept如下

create table tb_dept
(
  id text primary key,
  name text not null
);

-- 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

-- 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

(1)使用对象浏览器创建外键约束

(2)使用SQL语句创建外键约束

创建外键的语法规则如下:

[constraint <外键名>] foreign key 字段名1 [ ,字段名2,...]
references <主键名> 主键列1 [ ,主键列2,...]

其中,“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键; “字段名”表示从表需要添加外键约束的字段列;“主表名”即被从表外键所依赖的表的名称;“主键列”表示主表中定义的主键字段,或者字段组合。

实例:

创建一个部门表tb_dept1

create table tb_dept1
(
  id text primary key,
  name text not null,
  location text
);

创建数据表tb_emp5,让它的键deptId作为外键关联到tb_dept1的主键id

create table tb_emp5
(
  id text primary key,
  name text,
  deptId text,
  salary numeric,
  constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id)
);


 语句执行成功后,在表tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,其依赖于表tb_dept1的主键id。

关联指的是在关系型数据库中,相关表之间的联系。它是通过相容或相同的属性或属性组来表示的,子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建子表时,就会出现错误。

4、使用非空约束

非空约束(not null constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时,没有指定值,数据库系统会报错。

非空约束的语法规则如下:

字段名 数据类型 not null

定义数据表tb_emp6,指定员工的名称不能为空

create table tb_emp6
(
  id text primary key,
  name text not null,
  deptId text,
  salary numeric,
  constraint fk_emp_dept2 foreign key(deptId) references tb_dept1(id)
);

执行后在tb_emp6中创建了一个name字段,其插入值不能为空(not null)。

5、使用唯一性约束

 唯一性约束(unique constraint)要求添加该约束的列字段的值唯一,允许为空,但只能出现一个空值。唯一性约束可以确保一列或者几列不出现重复值。

(1)使用对象浏览器创造唯一性约束

(2)使用SQL语句创建唯一约束

1)在定义完列之后直接指定唯一约束,语法规则如下:

字段名 数据类型 unique

创建数据表tb_dept ,指定部门的名称唯一

create table tb_dept2
(
  id text primary key,
  name text unique,
  location text
);

2)在定义完所有列之后指定唯一约束,语法规则如下:

[constraint <约束名>] unique(<字段名>)

创建数据表tb_dept3,指定部门的名称唯一

create table tb_dept3
(
  id text primary key,
  name text,
  location text,
  constraint sth unique(name)
);


unique 和primary key的区别:一个表中可以有多个字段声明为unique,但只能有一个primary key声明:声明为primary key的列不允许有空值,但是声明为unique的字段允许空值(null)的存在。

6、使用默认约束

默认约束(default constraint)指定某列的默认值。如男性同学较多,性别就可以默认为“男”。如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为“男”。

默认约束的语法规则如下:

字段名 数据类型 default 默认值

创建数据表tb_emp7,指定员工的部门编号默认为1111

create table tb_emp7
(
  id text primary key,
  name text not null,
  deptId text default 1111,
  salary numeric,
  constraint fk_emp_dept3 foreign key(deptId) references tb_dept1(id)
);

新插入的记录如果没有指定部门编号,则默认都为1111。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章