四. 数据表的基本操作

4.1 创建数据表

下面的案例是如何添加主键约束,外键约束,唯一约束,非空约束,默认约束等;

1.使用主键约束:有单字段主键,多字段联合主键;
【例1】定义数据表tb_emp1,假设表中间没有主键id,为了唯一确定一个员工,可以把name、deptId联合起来做为主键,SQL语句如下:

CREATE TABLE tb_emp1(
name VARCHAR(25),
deptId INT,
salary FLOAT,
PRIMARY KEY(name,deptId)
);

2.使用外键约束:
【例2】创建一个部门表tb_dept1,名称不能为空,SQL语句如下:

CREATE TABLE tb_dept2
(
id       int PRIMARY KEY,
name    VARCHAR(22)  NOT NULL,
location  VARCHAR(50)
);

定义数据表tb_emp2,让它的键deptId作为外键关联到tb_dept2的主键id,SQL语句为:

CREATE TABLE tb_emp2
(
id      INT PRIMARY KEY,
name   VARCHAR(25),
deptId  INT,
salary   FLOAT,
CONSTRAINT fk_emp_dept2 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);

3.使用唯一约束
【例3】定义数据表tb_dept2,指定部门的名称唯一,SQL语句如下:

CREATE TABLE tb_dept2
(
id      INT PRIMARY KEY,
name    VARCHAR(22) UNIQUE,
location  VARCHAR(50)
);

在定义完所有列之后指定唯一约束,语法规则如下:
[CONSTRAINT <约束名>] UNIQUE(<字段名>)
【例4】定义数据表tb_dept3,指定部门的名称唯一,SQL语句如下:

CREATE TABLE tb_dept3
(
id      INT PRIMARY KEY,
name    VARCHAR(22),
location  VARCHAR(50),
CONSTRAINT STH UNIQUE(name)
);

4.非空约束和默认约束
【例5】定义数据表tb_emp7,指定员工的部门编号默认为1111,SQL语句如下:
CREATE TABLE tb_emp7
(
id INT PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptId INT DEFAULT 1111,
salary FLOAT,
CONSTRAINT fk_emp_dept3 FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
);

4.2 修改数据表

【例4.6】将数据表tb_dept3改名为tb_department3。

ALTER TABLE tb_dept3 RENAME TO tb_department3;

【例4.7】将数据表tb_dept1中name字段的数据类型由VARCHAR(22)的修改成VARCHAR(30)。

ALTER TABLE tb_dept1 ALTER COLUMN name TYPE VARCHAR(30);

【例4.8】将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:

ALTER TABLE tb_dept1 RENAME location TO loc;

【例4.9】在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerId(部门经理编号),SQL语句如下:

ALTER TABLE tb_dept1 ADD COLUMN managerId INT;

【例4.10】在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:

ALTER TABLE tb_dept1 ADD COLUMN column1 VARCHAR(12) not  null;

4.3 删除数据表

删除字段的语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
“字段名”指需要从表中删除的字段的名称。
【例1】删除数据表tb_dept1表中的managerid字段。

ALTER TABLE tb_dept1 DROP managerid;

【例2】删除数据表tb_emp9中的外键约束。
首先创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句如下:

CREATE TABLE tb_emp9
(
id      INT PRIMARY KEY,
name   VARCHAR(25),
deptId  INT,
salary   FLOAT,
CONSTRAINT fk_emp_dept  FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
);
ALTER TABLE tb_emp9 DROP CONSTRAINT fk_emp_dept;

【例3】删除数据表tb_dept2,SQL语句如下:

DROP TABLE IF EXISTS tb_dept2;

语句执行完毕之后,数据表列表中已经不存在名称为tb_dept2的表,删除操作成功。
在数据库中创建两个关联表,首先,创建表tb_dept2,SQL语句如下:

CREATE TABLE tb_dept2
(
id       INT PRIMARY KEY,
name    VARCHAR(22),
location  VARCHAR(50)
);

接下来创建表tb_emp,SQL语句如下:

CREATE TABLE tb_emp
(
id       INT PRIMARY KEY,
name    VARCHAR(25),
deptId   INT,
salary   FLOAT,
CONSTRAINT fk_emp_dept  FOREIGN KEY (deptId) REFERENCES tb_dept2(id)
);

首先直接删除父表tb_dept2,输入删除语句如下:

DROP TABLE tb_dept2;

接下来,解除关联子表tb_emp的外键约束,SQL语句如下:

ALTER TABLE tb_emp DROP CONSTRAINT fk_emp_dept;

语句成功执行后,将取消表tb_enp和表tb_dept2之间的关联关系,此时,可以输入删除语句,将原来的父表tb_dept2删除,SQL语句如下:

DROP TABLE tb_dept2;

4.4 PostgreSQL 11新特性-新增带默认值的字段不在重写数据表

步骤1:新增测试数据表tt,语句如下:

CREATE TABLE tt(id int, name text);

步骤2:插入500万行测试数据,语句如下:

INSERT INTO t1 (id,name ) SELECT n, n || '_ALTER TABLE TEST ' FROM generate_series (1,5000000) n;

步骤3:查看数据表tt的relfilenode和relpages信息,语句如下:

SELECT relname,relfilenode, relpages FROM pg_class WHERE relname='tt';

步骤4:新增带默认值的字段ffname,语句如下:

ALTER TABLE tt ADD COLUMN ffname text DEFAULT '默认值';

步骤5:再次查看数据表tt的relfilenode和relpages信息,语句如下:

SELECT relname,relfilenode, relpages FROM pg_class WHERE relname='tt';

从结果可以看出,relfilenode和relpages的数据并没有发生变化

4.5 综合案例-数据表的基本操作

步骤1:登录数据库。
启动pgAdmin 4,输入密码连接服务器。
步骤2:创建数据库company,执行过程如下。

CREATE DATABASE company;

步骤3:创建表offices。
创建表offices的语句如下:

CREATE TABLE offices
(
officeCode  INT NOT NULL UNIQUE,
city        VARCHAR(50) NOT NULL,
address     VARCHAR(50) NOT NULL,
country     VARCHAR(50) NOT NULL,
postalCode  VARCHAR(15) NOT NULL,
PRIMARY KEY  (officeCode)
);

步骤4 创建表employees。
创建表employees的语句如下:

CREATE TABLE employees
(
employeeNumber  INT NOT NULL PRIMARY KEY,
lastName         VARCHAR(50) NOT NULL,
firstName        VARCHAR(50) NOT NULL,
mobile           VARCHAR(25) NOT NULL,
officeCode       INT NOT NULL,
jobTitle         VARCHAR(50) NOT NULL,
birth            DATE,
note            VARCHAR(255),
sex             VARCHAR(5),
CONSTRAINT office_fk FOREIGN KEY(officeCode)  REFERENCES offices(officeCode)
);

步骤5:将表employees的birth字段改名为employee_birth。
修改字段名,需要用到ALTER TABLE语句,输入语句如下:

ALTER TABLE employees RENAME birth TO employee_birth;

步骤6:修改sex字段,数据类型为CHAR(1),非空约束。
修改字段数据类型,需要用到ALTER TABLE语句,输入语句如下:

ALTER TABLE employees ALTER COLUMN sex TYPE CHAR(1);

步骤7:修改sex字段为非空约束。

ALTER TABLE employees ALTER COLUMN sex SET NOT NULL;

步骤8:删除字段note。
删除字段,需要用到ALTER TABLE语句,输入语句如下:

ALTER TABLE employees DROP note;

步骤9:增加字段名favoriate_activity,数据类型为VARCHAR(100)。
增加字段,需要用到ALTER TABLE语句,输入语句如下:

ALTER TABLE employees ADD COLUMN favoriate_activity VARCHAR(100);

步骤10:删除表offices。
在创建表employees表时候,设置了表的外键,该表关联了其父表的officeCode主键,如前面所述,删除关联表时,要先删除子表employees的外键约束,才能删除父表,因此,必须先删除employees表的外键约束。
1)删除employees表的外键约束,输入如下语句:

ALTER TABLE employees DROP CONSTRAINT office_fk;

其中office_fk为employees表的外键约束的名称,语句执行成功后,即可删除offices父表。
2)删除表offices,输入如下语句:

DROP TABLE offices;

步骤11:将表employees名称修改为employees_info。
修改数据表名,需要用到ALTER TABLE语句,输入语句如下:

ALTER TABLE employees RENAME TO employees_info;

4.6 常见问题及解答

PostgreSQL:四. 数据表的基本操作相关推荐

  1. sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...

    本话旨在完成以下内容: 在数据库中,数据表是数据库中最重要和基本的操作对象,是数据存储的基本单位.换句话说我们操作数据库其实重要的就是操作数据表.本章将详细介绍数据表的基本操作,主要内容包括:创建数据 ...

  2. mysql综合案例 数据表的基本操作

    mysql综合案例 数据表的基本操作 创建修改删除表,掌握数据表的基本操作 创建数据库company,按下表创建两个table名为offices和employees offices表结构 字段名 数据 ...

  3. 数据表的基本操作(四)数据的插入

    文章目录 插入数据 -- INSERT 常见的插入数据 一.想表中所有的字段插入数据 实例1 实例2 二.向表中指定字段插入数据 实例3 三.同时插入多条数据 实例4 四.将其他表中的数据插入到表中 ...

  4. 四、数据表的基本操作

    4.1 创建数据表 在创建完数据库之后,接下来的工作就是创建数据表.所谓创建数据 表,指的是在已经创建好的数据库中建立新表.创建数据表的过程是规定数 据列的属性的过程,同时也是实施数据完整性(包括实体 ...

  5. 数据库2.0 -- 数据类型和数据表的基本操作

    mysql支持多种数据类型,一般可以分为,数值,日期时间和字符(串) 数值类型 日期和时间类型 字符串类型 创建数据表 我们首先应该明白的就是一个结构的问题,一个用户可以管理多个数据库,每个数据库下面 ...

  6. mysql5.7 数据表的基本操作

    前言 在创建数据库之后,接下来的工作是创建数据表,所谓的数据表,指的是在已经创建好的数据库中建立新表.创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程. 1.创建表属于数据库 ...

  7. mysql新增阵列df_DF学Mysql(二)——数据表的基本操作

    1.创建数据表 先使用"USE "指定在哪个数据库中操作 CREATE TABLE ( 字段1 数据类型 [列级别约束条件] [默认值], 字段2 数据类型 [列级别约束条件] [ ...

  8. 【PostgreSQL】数据表的增删改查

    关于数据库的增删改查可以参考之前的博客 [PostgresSQL]登录数据库(远程).管理数据库(增删改查) 下面是数据表的增删改查 1.增加数据表 # 创建ada_address_pool表 CRE ...

  9. MySQL数据库-对数据表的基本操作

    数据表的操作 创建数据表 查看当前数据库中所有表 show tables; 创建表 create table 数据表名字(字段 类型 约束[,字段 类型 约束]) create table xxxx( ...

最新文章

  1. 2018牛客网暑期ACM多校训练营第二场 D - money(贪心)
  2. 第85讲:Scala中For表达式的强大表现力实战
  3. 标识人脸程序matlab,Matlab人脸识别基础源程序
  4. 投影元素直接隔离_摸着夜色上露台开投影,是巴塞罗那设计师的浪漫
  5. 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
  6. 第二次想上传demo到github
  7. linux 下批量压缩文件
  8. Java实现词频统计(Wordcount)-Map或Hashtable的value排序
  9. APPCAN学习笔记002---app快速开发AppCan.cn平台特色
  10. window server 2008 R2 启用方法
  11. 现代控制理论概念梳理(脑图)
  12. Java后台直接生成二维码介绍
  13. 病毒 Worm.Logo.g
  14. (转)美国国家科学院院士张首晟演讲全文:人工智能的三大发展支柱
  15. Python Selenium set Chrome Preference Download Location.
  16. 上证指数ARIMA模型预测(R软件)
  17. python进阶太难_Python进阶
  18. 拦截器和过滤器的执行顺序和区别
  19. matlab指南针的例子,matlab画指北针
  20. Linux系统下安装screen

热门文章

  1. 关于Firefox无法代理本地localhost数据包,BP拦截不到本地IP的问题与解决
  2. 【技术小说连载】新三国外传——草船借箭
  3. IntelliJ IDEA 神级超级牛逼插件推荐(自用,真的超级牛逼!)
  4. 2019届互联网校招【本硕博】薪资大揭秘
  5. android脱出游戏,脱出游戏谎言游戏
  6. 经济学人:智能机器人需要相应规则管理
  7. 给我十分钟,还你一个不一样的Docker入门教程
  8. 营销计算机专业,计算机营销专业毕业生的自我评价范文
  9. 计算机 pps,pps与bps之间的换算
  10. 解决HP笔记本安装XP SP3后出现系统蓝屏0x0000007E错误的方法