数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。
本模块将介绍数据表的基本操作,主要内容包括:创建数据表、修改数据表、删除数据表。
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。