網站首頁 編程語言 正文
PostgreSQL 提供了多種不同的復制表的方法,它們的差異在于是否需要復制表結構或者數據。
CREATE TABLE AS SELECT 語句
CREATE TABLE AS SELECT 語句可以用于復制表結構和數據,但是不會復制索引。
我們可以使用以下語句基于 employee 復制一個新表 emp2,包括表中的數據:
CREATE TABLE emp2
AS
SELECT * FROM employee;
如果只想要復制表結構,不復制數據,可以增加 WITH NO DATA 子句:
CREATE TABLE emp2
AS
SELECT * FROM employee
WITH NO DATA;
或者也可以使用一個不返回任何結果的查詢語句,例如:
CREATE TABLE emp2
AS
SELECT * FROM employee
WHERE FALSE;
這種復制方法不會創建任何索引或者約束,例如主鍵、外鍵以及 NOT NULL 約束等。
CREATE TABLE LIKE 語句
CREATE TABLE LIKE 語句也可以用于復制表結構:
CREATE TABLE emp3
(LIKE employee);
語法中的括號是必不可少的,而且這種方法不會復制數據,但是會復制字段的 NOT NULL 約束。
CREATE TABLE AS TABLE 語句
CREATE TABLE AS TABLE 語句可以復制表結構和數據,例如:
CREATE TABLE emp4
AS
TABLE employee
WITH NO DATA;
這種語法不會復制索引、外鍵以及非空約束等。
如果不需要復制數據,可以使用 WITH NO DATA 子句:
CREATE TABLE emp4
AS
TABLE employee
WITH NO DATA;
SELECT INTO 語句
SELECT INTO 語句可以復制表結構和數據,但是不包含索引等。例如:
SELECT * INTO emp5 FROM employee;
PostgreSQL 推薦使用 CREATE TABLE AS 替代 SELECT INTO 語句實現類似效果,因為前者適用性更廣,功能更全。
CREATE TABLE INHERITS 語句
PostgreSQL 支持 CREATE TABLE 語句的 INHERIT 子句,用于繼承表結構。這種復制表的方法和其他方法有所區別,任何針對父表的修改通常也會自動修改子表。
另外,這種方法還可以為子表定義額外的字段。例如:
CREATE TABLE emp5 (
notes text NOT NULL
)
INHERITS ( employee );
其中,notes 是我們額外定義的字段,其他字段繼承 employee。
使用 psql \d 命令查看 emp5 的結構如下:
\d emp5
Table "public.emp5"
Column | Type | Collation | Nullable | Default
-----------+------------------------+-----------+----------+---------
emp_id | integer | | not null |
emp_name | character varying(50) | | not null |
sex | character varying(10) | | not null |
dept_id | integer | | not null |
manager | integer | | |
hire_date | date | | not null |
job_id | integer | | not null |
salary | numeric(8,2) | | not null |
bonus | numeric(8,2) | | |
email | character varying(100) | | not null |
notes | text | | not null |
Check constraints:
"ck_emp_salary" CHECK (salary > 0::numeric)
"ck_emp_sex" CHECK (sex::text = ANY (ARRAY['男'::character varying, '女'::character varying]::text[]))
Inherits: employee
原文鏈接:https://blog.csdn.net/horses/article/details/128697909
相關推薦
- 2022-02-01 uniapp 開發h5 優化加載速度
- 2022-09-02 Redis解決Session共享問題的方法詳解_Redis
- 2022-09-07 redis?protocol通信協議及使用詳解_Redis
- 2022-06-27 詳解Python中while無限迭代循環方法_python
- 2022-10-08 ASP.NET?MVC在基控制器中處理Session_實用技巧
- 2024-07-13 SpringBoot入門(解決JDK8不存在問題)
- 2022-10-25 基于Pytorch使用GPU運行模型方法及可能出現的問題解決方法
- 2022-12-05 numpy中的log和ln函數解讀_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支