ClickHouse(十九):Clickhouse SQL DDL操作-1

 

 进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

1. 创建库

2. 查看数据库

​​​​​​​​​​​​​​3. 删除库

​​​​​​​4. 创建表

​​​​​​​​​​​​​​5. 查看表

​​​​​​​​​​​​​​6. 查看表的定义

​​​​​​​8. 删除表

​​​​​​​9. 修改表

​​​​​​​9.1 添加列

​​​​​​​9.2 删除列

​​​​​​​9.3 清空列

​​​​​​​9.4 给列修改注释

​​​​​​​9.5 修改列类型

​​​​​​​10. 给表重命名

10.1 给表重命名语法

10.2 示例


DDL:Data Definition Language,数据库定义语言。在ClickHouse中,DDL语言中修改表结构仅支持Merge表引擎、Distributed表引擎及MergeTree家族的表引擎,SQL 中的库、表、字段严格区分大小写。

​​​​​​​1. 创建库

  • 创建库基础语法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]

2. 查看数据库

  • 查看数据库语法
SHOW DATABASES;

​​​​​​​​​​​​​​3. 删除库

  • 删除库基础语法:
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
  • 示例:
#创建库 test_dbnode1 :) create database if not exists test_db;CREATE DATABASE IF NOT EXISTS test_dbOk.0 rows in set. Elapsed: 0.007 sec.#删除库node1 :) drop database test_db;DROP DATABASE test_dbOk.0 rows in set. Elapsed: 0.003 sec.

注意:在创建数据库时,在/var/lib/clickhouse/metadata/目录下会有对应的库目录和库.sql文件,库目录中会存入在当前库下建表的信息,xx.sql文件中存入的是建库的信息。如图:

当删除数据库时,/var/lib/clickhouse/metadata/目录下对应的库目录和xx.sql文件也会被清空。

​​​​​​​4. 创建表

创建表的基本语法:

#第一种CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster](name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...) ENGINE = engine#第二种CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]#第三种CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...

注意:以上普通第一种建表语句是直接创建表。第二种创建表方式可以创建一个与db2中name2一样结构的表,也可以指定表引擎,也可以不指定,不指定默认与db2中的name2表引擎一样,不会将表name2中的数据填充到对应的新表中。第三种方式可以指定引擎创建一个与Select 子句的结果相同结构的表,并将Select子句的结果填充它。

  • 示例:
#第一种方式创建表node1 :) create table if not exists newdb.t1(:-] id UInt8 default 0 comment '编号',:-] name String default '无姓名' comment '姓名',:-] age UInt8 default 18 comment '年龄':-] )engine = TinyLog;CREATE TABLE IF NOT EXISTS newdb.t1(`id` UInt8 DEFAULT 0 COMMENT '编号',`name` String DEFAULT '无姓名' COMMENT '姓名',`age` UInt8 DEFAULT 18 COMMENT '年龄')ENGINE = TinyLogOk.0 rows in set. Elapsed: 0.004 sec.# 第二种方式创建表node1 :) create table if not exists t2 engine = Memory as newdb.t_tinylog;CREATE TABLE IF NOT EXISTS t2 AS newdb.t_tinylogENGINE = MemoryOk.0 rows in set. Elapsed: 0.006 sec.# 第三种方式创建表node1 :) create table if not exists t3 engine = Memory as select * from newdb.t_tinylog where id >2;CREATE TABLE IF NOT EXISTS t3ENGINE = Memory ASSELECT *FROM newdb.t_tinylogWHERE id > 2Ok.0 rows in set. Elapsed: 0.010 sec.#查询表t3数据node1 :) select * from t3;SELECT *FROM t3┌─id─┬─name─┬─age─┐│  3 │ 王五   │  20 │└────┴──────┴─────┘1 rows in set. Elapsed: 0.004 sec.

​​​​​​​​​​​​​​5. 查看表

  • 查看表语法:
SHOW TABLES;SHOW TABLES IN default;

​​​​​​​​​​​​​​6. 查看表的定义

  • 查看表定义语法:
SHOW CREATE TABLE XXX;
  • 示例:
#查看表定义node1 :) show create table t3;SHOW CREATE TABLE t3┌─statement─────────────────────────────────┐│ CREATE TABLE newdb.t3(`id` UInt8,`Name` String)ENGINE = TinyLog │└───────────────────────────────────────────┘1 rows in set. Elapsed: 0.002 sec.

​​​​​​​7. 查看表的字段

  • 查看表定义语法:
DESC XXXX;
  • 示例:
#查看表t3的字段node1 :) desc t3;DESCRIBE TABLE t3┌─name─┬─type───┬─default_type─┬─...│ id   │ UInt8  │              │  ...│ Name │ String │              │  ...└──────┴────────┴──────────────┴──...2 rows in set. Elapsed: 0.004 sec.

​​​​​​​8. 删除表

  • 删除表的基本语法:
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
  • 示例:
#删除表node1 :) drop table t3;DROP TABLE t3Ok.0 rows in set. Elapsed: 0.003 sec.

​​​​​​​9. 修改表

  • 修改表语法
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

​​​​​​​9.1 添加列

  • 示例:
#使用default 库,创建表 test1,使用MergeTree引擎node1 :) use default;node1 :) create table test1(id UInt8,name String)engine = MergeTree() order by id partition by name;CREATE TABLE test1(`id` UInt8,`name` String,`loc` String)ENGINE = MergeTree()PARTITION BY locORDER BY idOk.0 rows in set. Elapsed: 0.005 sec.Ok.#查看表test1表结构node1 :) desc test1;DESCRIBE TABLE test1┌─name─┬─type───┬...│ id   │ UInt8  │...│ name │ String │...│ loc  │ String │...└──────┴────────┴...3 rows in set. Elapsed: 0.004 sec.#添加表字段node1 :) alter table test1 add column age UInt8;#查看表结构,添加字段成功node1 :) desc test1;DESCRIBE TABLE test1┌─name─┬─type───┬...│ id      │ UInt8     │...│ name    │ String   │...│ loc     │ String   │...│ age     │ UInt8    │...└─────┴─────┴...4 rows in set. Elapsed: 0.003 sec.

​​​​​​​9.2 删除列

  • 示例:
#删除表test1中的name age字段node1 :) alter table test1 drop column age;#查看表 test1表结构node1 :) desc test1;DESCRIBE TABLE test1┌─name─┬─type───┬...│ id   │ UInt8  │...│ name │ String │...│ loc  │ String │...└──────┴────────┴...2 rows in set. Elapsed: 0.004 sec.

​​​​​​​9.3 清空列

注意,不能清空排序、主键、分区字段。

  • 示例:
#向表 test1中插入以下几条数据node1 :)  insert into table test1  values (1,'张三','北京'),(2,'李四','上海'),(3,'王五','北京');#查看表中的数据┌─id─┬─name─┬─loc──┐│  1  │ 张三  │ 北京  ││  3  │ 王五  │ 北京  │└────┴──────┴──────┘┌─id─┬─name─┬─loc──┐│  2  │ 李四  │ 上海  │└────┴──────┴──────┘#清空 test1 name列在’北京’分区的值node1 :) alter table test1 clear column name in partition '北京';#查看表中的数据node1 :) select * from test1;┌─id─┬─name─┬─loc──┐│  1 │        │ 北京  ││  3 │        │ 北京  │└────┴──────┴──────┘┌─id─┬─name─┬─loc──┐│  2  │ 李四  │ 上海  │└────┴──────┴──────┘#清空 test1 name 列下的值node1 :) alter table test1 clear column name;#查看表中的数据node1 :) select * from test1;┌─id─┬─name─┬─loc──┐│  1   │         │ 北京     ││  3   │         │ 北京     │└───┴────┴─────┘┌─id─┬─name─┬─loc──┐│  2   │         │ 上海    │└───┴─────┴────┘

​​​​​​​9.4 给列修改注释

  • 示例:
#修改表 test1 name 列的注释node1 :) alter table test1 comment column name '姓名';#查看表 test1描述┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬...│ id    │ UInt8  │                │                         │           │...│ name │ String │                │                         │ 姓名      │...│ loc   │ String │                │                        │           │...└──────┴────────┴──────────────┴────────────────────┴─────────┴...
  • ​​​​​​​9.5 修改列类型

  • 示例:
#修改表 test1 name列类型为UInt8node1 :) alter table test1 modify column name UInt8#node1 :) desc test1;┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬│ id    │ UInt8  │                 │                        │           ││ name │ UInt8   │                │                        │ 姓名      ││ loc   │ String │                │                        │           │└──────┴────────┴──────────────┴────────────────────┴─────────┴

​​​​​​​10. 给表重命名

给表重新命名可以作用在任意的表引擎上。

10.1 给表重命名语法

RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster]

10.2 示例

#创建库 testdb1node1 :) create database testdb1;#创建库 testdb2node1 :) create database testdb2;#使用库testdb1,并创建表 t1node1 :) use testdb1;node1 :) create table t1 (id UInt8 ,name String) engine = MergeTree() order by id ;#将表 t1 重命名为test1node1 :) rename table t1 to test1;#将表test1 移动到testdb2库下,并重新命名为t2, testdb1 下没有表了node1 :) rename table testdb1.test1 to testdb2.t2;

👨‍💻如需博文中的资料请私信博主。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/68210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KAFKA第二课之生产者(面试重点)

生产者学习 1.1 生产者消息发送流程 在消息发送的过程中,涉及到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到K…

电脑屏幕闪烁?别慌!解决方法在这!

“我新买了一台电脑,还没用几天呢,就出现了电脑屏幕闪烁的情况,这让我感到很烦躁。有什么方法可以解决电脑屏幕闪烁的问题呢?” 使用电脑的过程中,我们不难发现电脑屏幕有时候会出现闪烁的情况,这会导致使用…

私有IP地址有多重要?

私有IP地址是指在局域网中使用的IP地址,而不是公共互联网上可访问的IP地址。私有IP地址不唯一,可以在不同的局域网中重复使用。这种地址分配方式能够有效地节省IP地址资源。 近日,国际互联网协会(IATA)发布了一项关于私…

Android Studio瀑布流实现

效果: ImageDetail class package com.example.waterfallflow; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ImageView;public class ImageDetail extends Activity{Overrideprotected void …

数据可视化工具LightningChart .NET正式发布v10.5.1——拥有全新的3D新功能

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学…

如何实现安全上网

l 场景描述 政府、军工、科研等涉密单位或企业往往要比其他组织更早接触高精尖的技术与产品,相对应的数据保密性要求更高。常规的内外网物理隔离手段,已经满足不了这些涉密单位的保密需求,发展到现在,需求已经演变成既要保证网络…

golang中使用chan控制协程并发简单事例

func main() {processNum : 5ch : make(chan struct{}, processNum)for true {ch <- struct{}{}go func() {defer func() {<-ch}()fmt.Println("我是协程", time.Now().UnixNano())time.Sleep(time.Second * 5)}()} } 可以看到&#xff0c;这里每5s会执行一次带…

软件测试简历撰写与优化,让你面试邀约率暴增99%!

如何撰写一份优秀的简历呢&#xff1f;&#xff1f;这是一个求职者都会遇到的问题&#xff0c;今天就来详细带大家写一份软件测试工程师职位的简历&#xff01;希望能给各位软件测试求职者一个带来帮助&#xff01; 个人简历是求职者给招聘单位发的一份简要介绍。包含自己的基本…

SpringBoot 3自带的 HTTP 客户端工具

原理 Spring的HTTP 服务接口是一个带有HttpExchange方法的 Java 接口&#xff0c;它支持的支持的注解类型有&#xff1a; HttpExchange&#xff1a;是用于指定 HTTP 端点的通用注释。在接口级别使用时&#xff0c;它适用于所有方法。GetExchange&#xff1a;为 HTTP GET请求指…

Springboot 实践(3)配置DataSource及创建数据库

前文讲述了利用MyEclipse2019开发工具&#xff0c;创建maven工程、加载springboot、swagger-ui功能。本文讲述创建数据库&#xff0c;为项目配置数据源&#xff0c;实现数据的增删改查服务&#xff0c;并通过swagger-ui界面举例调试服务控制器 创建数据库 项目使用MySQL 8.0.…

【设计模式】代理模式

在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中&#xff0c;我们创建具有现有对象的对象&#xff0c;以便向外界提供功能接口。 介绍 意图&#xff1a;为其他对象提供一种代理以…

BC117 小乐乐走台阶(附完整代码)

描述 小乐乐上课需要走n阶台阶&#xff0c;因为他腿比较长&#xff0c;所以每次可以选择走一阶或者走两阶&#xff0c;那么他一共有多少种走法&#xff1f; 输入描述 输入包含一个整数n (1 ≤ n ≤ 30) 输出描述 输出一个整数&#xff0c;即小乐乐可以走的方法数。 思路&a…