当前位置: 首页 > news >正文

PostgreSQL——表的基本操作

PostgreSQ表的基本操作

  • 一、创建数据表
    • 1.1、主键约束
      • 1.1.1、单字段主键
      • 1.1.2、多字段联合主键
    • 1.2、外键约束
    • 1.3、非空约束
    • 1.4、唯一性约束
    • 1.5、默认约束
  • 2、修改数据表
    • 2.1、修改表名
    • 2.2、修改字段的数据类型
    • 2.3、修改字段名
    • 2.4、添加字段
    • 2.5、删除字段
    • 2.6、删除表的外键约束
  • 3、删除数据表
    • 3.1、删除没有被关联的表
    • 3.2、删除被其他表关联的主表

一、创建数据表

CREATE TABLE <表名>
(字段名1 数据类型 [列级别约束条件] [默认值],字段名2 数据类型 [列级别约束条件] [默认值],...[表级别约束条件]
);
  • 要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等
  • 数据表中如果创建多个列,每一个列(字段)的名称和数据类型都要用逗号隔开
CREATE TABLE tb_emp1
(id INT,name VARCHAR(25),deptId INT,salary FLOAT
);

在这里插入图片描述

1.1、主键约束

1.1.1、单字段主键

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

1. 在定义列的同时指定主键:

字段名 数据类型 PRIMARY KEY
CREATE TABLE tb_emp2
(id INT PRIMARY KEY,name VARCHAR(25),deptId INT,salary FLOAT
);

在这里插入图片描述

2. 在定义完所有列之后指定主键:

[CONSTRAINT <约束名>] PRIMARY KEY 字段名
CREATE TABLE tb_emp3
(id INT,name VARCHAR(25),deptId INT,salary FLOAT,PRIMARY KEY(id)
);

在这里插入图片描述

1.1.2、多字段联合主键

PRIMARY KEY [字段1, 字段2, ..., 字段n]
CREATE TABLE tb_emp4
(name VARCHAR(25),deptId INT,salary FLOAT,PRIMARY KEY(name, deptId)
);

在这里插入图片描述

1.2、外键约束

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

[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [ , 字段名2, ...] REFERENCES <主表名> 主键列1 [ , 主键列2, ...]

定义数据表tb_emp5,并在tb_emp5表上创建外键约束,关联到tb_dept1的主键id。

CREATE TABLE tb_dept1
(id INT PRIMARY KEY,name VARCHAR(22) NOT NULL,location VARCHAR(50)
);CREATE TABLE tb_emp5
(id INT PRIMARY KEY,name VARCHAR(25),deptId INT,salary FLOAT,CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);

在这里插入图片描述
在这里插入图片描述

1.3、非空约束

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

字段名 数据类型 NOT NULL
CREATE TABLE tb_emp6
(id INT PRIMARY KEY,name VARCHAR(25) NOT NULL,deptId INT,salary FLOAT,CONSTRAINT fk_emp_dept2 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);

在这里插入图片描述

1.4、唯一性约束

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

1. 在定义完列之后指定指定唯一约束:

字段名 数据类型 UNIQUE
CREATE TABLE tb_dept2
(id INT PRIMARY KEY,name VARCHAR(22) UNIQUE,location VARCHAR(50)
);

在这里插入图片描述

2. 在定义完所有列之后指定唯一约束:

[CONSTRAINT <约束名>] UNIQUE (<字段名>)
CREATE TABLE tb_dept3
(id INT PRIMARY KEY,name VARCHAR(22),location VARCHAR(50),CONSTRAINT STH UNIQUE(name)
);

在这里插入图片描述

1.5、默认约束

默认约束(Default Constraint)指定某列的默认值。

字段名 数据类型 DEFAULT 默认值
CREATE TABLE tb_emp7
(id INT PRIMARY KEY,name VARCHAR(22) NOT NULL,deptId INT DEFAULT 1111,salary FLOAT,CONSTRAINT fk_emp_dept3 FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
);

在这里插入图片描述

2、修改数据表

2.1、修改表名

ALTER TABLE <旧表名> RENAME TO <新表名>;
-- 将tb_dept3改名为tb_department3
ALTER TABLE tb_dept3 RENAME TO tb_department3;

2.2、修改字段的数据类型

ALTER TABLE <表名> ALTER COLUMN <字段名> TYPE <数据类型>
-- 将tb_dept1中name字段的数据类型由VARCHAR(22)修改成CARCHAR(30)
ALTER TABLE tb_dept1 ALTER COLUMN name TYPE VARCHAR(30);

2.3、修改字段名

ALTER TABLE <表名> RENAME <旧字段名> TO <新字段名> <新数据类型>;
-- 将tb_dept1中的location改名为loc,数据类型不变
ALTER TABLE tb_dept1 RENAME location TO loc;

2.4、添加字段

一般情况下,一个完整字段包括字段名、数据类型、完整性约束,语法如下:

ALTER TABLE <表名> ADD COLUMN <新字段名> <数据类型>

1. 添加无完整性约束的条件的字段:

-- 在tb_dept1中添加一个没有完整性约束的INT类型的managerId
ALTER TABLE tb_dept1 ADD COLUMN managerId INT;

在这里插入图片描述

2. 添加有完整性约束条件的字段:

-- 在tb_dept1中添加一个不为空的VARCHAR(12)类型的column1
ALTER TABLE tb_dept1 ADD COLUMN column1 VARCHAR(12) NOT NULL;

在这里插入图片描述

2.5、删除字段

ALTER TABLE <表名> DROP <字段名>;
-- 删除tb_dept1中的column2字段
ALTER TABLE tb_dept1 DROP column2;

2.6、删除表的外键约束

ALTER TABLE <表名> DROP CONSTRAINT <外键约束名>
-- 删除数据表tb_emp9中外键约束
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、删除数据表

3.1、删除没有被关联的表

DROP TABLE [IF EXISTS]1,2, ..., 表n;
-- 删除数据表tb_dept2
DROP TABLE IF EXISTS tb_dept2;

3.2、删除被其他表关联的主表

数据表之间存在外键关联的情况,如果直接删除父表,结果会显示失败,原因是直接删除将破坏表的参照完整性。如果必须要删除,可以先删除与之关联的子表,再删除父表。但是这样同时删除了两个表中的数据。有的情况下可能要保留子表,这时要单独删除父表,只需将关联的表的外键约束条件取消,然后就可以删除父表:

-- 父表
CREATE TABLE tb_dept2
(id INT PRIMARY KEY,name VARCHAR(22),location VARCHAR(50)
);-- 子表
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)
);-- 直接删除,会报错
DROP TABLE tb_dept2;-- 接触外键约束再删除
ALTER TABLE tb_emp DROP CONSTRAINT fk_emp_dept;
DROP TABLE tb_dept2;
http://www.dtcms.com/a/314857.html

相关文章:

  • 前端接入通义千问(各大模型接入方法类似)
  • 【Spring Boot 快速入门】六、配置文件
  • 15个命令上手Linux!
  • 回归分析:从数据类型到预测模型的核心逻辑
  • 8.4 打卡 DAY 33: 第一个神经网络 - MLP的构建与训练
  • 《时间之隙:内存溢出》
  • [自动化Adapt] 数据脱敏 | 文本替换/图像模糊 | 引擎热插拔 | 多队列并行处理
  • 网络资源模板--基于Android Studio 实现的消消乐游戏
  • ffmpeg下载windows教程
  • 高密度客流识别精度↑32%!陌讯多模态融合算法在智慧交通的实战解析
  • 模拟IC设计提高系列8-运算跨导放大器OTA Operational Transconduct Amplifiers
  • Cursor国产平替重磅开源!离线研发AI助手,拒绝云端受制于人
  • 【数据结构初阶】--顺序表(一)
  • BD202402跑步 线性求逆元 素数筛 数学
  • 数分思维13:AB测试
  • 开源网页生态掘金:从Bootstrap二次开发到行业专属组件库的技术变现
  • 复杂场景识别率↑31%!陌讯多模态融合算法在智慧环卫的实战解析
  • 上一篇文章的补充理解
  • 深度学习零基础入门(4)-卷积神经网络架构
  • sqli-libs通关教程(21-30)
  • 文件上传
  • c++ std::vector std::find_if 自定义结构体 查找
  • 算力网络架构演进的思考
  • Linux 系统启动原理
  • TorchDynamo源码解析:从字节码拦截到性能优化的设计与实践
  • 服务器数据安全:利用阿里云OSS/腾讯云COS实现网站数据自动备份
  • 操作系统中线程的三种实现方式
  • 牛客网之华为机试题:HJ26 字符串排序
  • Webpack 搭建 Vue3 脚手架详细步骤
  • 自动驾驶中的传感器技术22——Camera(13)