【Databend】数据库和表操作

文章目录

    • 数据库操作
    • 数据表操作
      • 创建表
      • 删除表和恢复表
      • 查看表
      • 修改表
    • 总结

数据库操作

基本语法

-- 创建数据库
create database if not exists database_name;
-- 查看创建数据库语句
show create database database_name;
-- 使用数据库
use database_name;
-- 重命名数据库
alter database if exists old_database_name rename to new_database_name;
-- 查看所有数据库
show databases [like '<pattern>' | where <expr>];
-- 删除数据库
drop database if exists database_name;

示例

-- 创建数据库
create database if not exists test;
-- 查看创建数据库语句
show create database test;
-- 使用数据库
use test;
-- 重命名数据库
alter database if exists test rename to test_db;
-- 查看所有数据库
show databases [like '<pattern>' | where <expr>];
-- 删除数据库
drop database if exists test;

SQL标识符:未引用和双引号的标识符

  • 未引用的标识符以字母(A-Z、a-z)或下划线(“_”)开头,可能由字母、下划线、数字(0-9)或美元符号(“$”)组成。
  • 双引号标识符可以包括广泛的字符,如数字(0-9)、特殊字符(如句号(.)、单引号(')、感叹号(!)、符号(@)、数字符号(#)、美元符号($)、百分比符号(%)、插入符号(^)和记号名称(&)、扩展 ASCII 和非 ASCII 字符以及空格。

Databend 允许您控制标识符的外壳敏感性。

  • unquoted_ident_case_sensitive:设置为1时,此选项保留未引用标识符的字符大小写,确保它们区分大小写。如果保留在默认值0,未引用的标识符将保持不区分大小写,转换为小写。
  • quoted_ident_case_sensitive:通过将此选项设置为0,您可以指示双引号标识符不应保留字符的大小写,使其不区分大小写。

双反引号(``)或双引号(")是等价的。

数据表操作

创建表

基础语法

-- 常规创建
create [transient] table [if not exists] [db.]table_name
(<column_name> <data_type> [ not null | null] [ { default <expr> }] [as (<expr>) stored | virtual],<column_name> <data_type> [ not null | null] [ { default <expr> }] [as (<expr>) stored | virtual],...
);
-- 创建一个与现有表具有相同列定义的表
create table [if not exists] [db.]table_name like [db.]origin_table_name;
-- 通过查询结果创建表
create table [if not exists] [db.]table_name as select query_sql;

其中,transient 表示临时即创建临时表,stored 表示存储计算列,占用存储空间,virtual 表示虚拟计算列,不占用存储空间,访问时实时计算,类似于可视化工具 Power BI 和 Tableau 的度量值。

创建存储计算列的示例:每当“价格”或“数量”列的值更新时,“total_price”列将自动重新计算并更新其存储值。

create table if not exists products (id int,price float64,quantity int,total_price float64 as (price * quantity) stored
);

创建虚拟计算列的示例:“full_name”列是根据“first_name”和“last_name”列的当前值动态计算的。它不会占用额外的存储空间。每当访问“first_name”或“last_name”值时,将计算并返回“full_name”列。

create table if not exists employees (id int,first_name varchar,last_name varchar,full_name varchar as (concat(first_name, ' ', last_name)) virtual
);

存储计算列虚拟计算列之间进行选择时,请考虑以下因素:

  • 存储空间:存储的计算列在表中占用了额外的存储空间,因为它们的计算值是物理存储的。如果您的数据库空间有限或希望最大限度地减少存储使用量,虚拟计算列可能是更好的选择。
  • 实时更新:存储的计算列在更新依赖列时立即更新其计算值。这可以确保您在查询时始终拥有最新的计算值。另一方面,虚拟计算列在查询期间动态计算其值,这可能会略微增加处理时间。
  • 数据完整性和一致性:存储的计算列保持即时的数据一致性,因为它们的计算值在写入操作时会更新。然而,虚拟计算列在查询期间实时计算其值,这意味着写入操作和后续查询之间可能存在短暂的不一致。

创建复制表示例:根据已有表复制。

create table if not exists employees_bak1 like employees;
create table if not exists employees_bak2 as select * from employees where 1=2;-- 复制表结构
create table if not exists employees_bak2 as select * from employees where 1=1;-- 复制表结构,并且克隆数据

创建临时表示例:一定时间或断开连接后自动删除。

-- 创建临时表
create transient table visits (visitor_id bigint
);-- 录入数据
insert into visits values(1);
insert into visits values(2);
insert into visits values(3);-- 查看数据
select * from visits;
+-----------+
| visitor_id |
+-----------+
|         1 |
|         2 |
|         3 |
+-----------+

删除表和恢复表

清空表语法和示例:

truncate table [db.]table_name;
truncate table test;

删除表基本语法:

drop table [if exists] [<database_name>.]<table_name> [all]

可选的“all”参数决定是否删除表的底层数据。

  • 如果省略“all”,则仅从元数据服务中删除表模式,使数据保持不变。在这种情况下,您可以使用 undrop table 命令恢复表。
  • 包括“all”将导致模式和基础数据的删除。虽然 undrop table 命令可以恢复模式,但它无法恢复表的数据。
    恢复表使用示例:
-- 创建表
create table test(a int, b varchar);
-- 录入数据
insert into test (a, b) values (1, 'example');
-- 删除表
drop table if exists test;
-- 查看数据
select * from test;
+---+-------+
| a |   b   |
+---+-------+
| 1 |example|
+---+-------+
-- 恢复表
undrop table test;
-- 查看恢复的数据
select * from test;
+---+-------+
| a |   b   |
+---+-------+
| 1 |example|
+---+-------+

查看表

查看所有或当前指定条件数据库中的表基本语法:

show [full] tables [{from | in} <database_name>] [history] [like '<pattern>' | where <expr>];

示例:

-- 查看当前数据库下的表
show tables;
-- 查看所有表
show full tables;
-- 查看当前数据库下的表,结果将包括仍在保留期内(默认为24小时)的被删除的表。
show tables history;
-- 查看指定条件的表
show tables like '%time';
show tables where data_size > 1000;

查看创建表的语法和示例:

show create table [database.]table_name;
-- 示例
show create table test;

查看当前或指定数据库中被删除的表语法和示例:

show drop tables [from <database_name>] [like '<pattern>' | where <expr>];
show drop tables from default_db;

查看表中列的信息语法和示例:

show fields from [<database_name>.]<table_name>;
desc [<database_name>.]<table_name>;
show [full] columns {from | in} tbl_name [{from | in} db_name] [like '<pattern>' | where <expr>];
-- 示例
show columns from books from default;

修改表

常见修改表的语法:

-- 重命名表
alter table [if exists] <name> rename to <new_table_name>;-- 添加列到指定位置
alter table [if exists] [database.]<table_name>
add column <column_name> <data_type> [not null | null] [default <constant_value>] [first | after <column_name>]-- 添加计算列
alter table [if exists] [database.]<table_name>
add column <column_name> <data_type> as (<expr>) stored | virtual;-- 将计算列转换为常规列
alter table [if exists] [database.]<table_name>
modify column <column_name> drop stored;-- 重命名列
alter table [if exists] [database.]<table_name>
rename column <column_name> to <new_column_name>;-- 修改一列或多列数据类型
alter table [if exists] [database.]<table_name>
modify column <column_name> <new_data_type> [default <constant_value>][, column <column_name> <new_data_type> [default <constant_value>], ...]

示例:

-- 选择数据库
use test_db;
-- 创建表
create table if not exists employees (first_name varchar,last_name varchar,full_name varchar as (concat(first_name, ' ', last_name)) virtual
);
-- 重命名表名
alter table if exists employees rename to dim_employees;
-- 添加列
alter table dim_employees add column id int not null first;-- 位置为起始
alter table dim_employees add column email varchar null after last_name;-- 位置在其它列之后
alter table dim_employees add column age int after last_name;
-- 重命名列
alter table dim_employees rename column email to new_email;
-- 修改列
alter table products modify column full_name drop virtual,column age varchar(10) default '0';
-- 删除列
alter table dim_employees drop column new_email;

总结

Databend 的数据库和数据表操作跟简单的英语句子一样,特别好理解,与 Mysql 中的语法类似,只是有一些差异。业务可能随时发生调整,表结构操作语法还是要会,需要多练。

参考资料:

  • Databend DDL:https://databend.rs/sql/sql-commands/ddl/table/

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

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

相关文章

什么是企业数字化转型?数字化的价值体现在哪里?

从2015年接触平安的数字化转型&#xff0c;到2021年承接阿里云的服务数字化项目&#xff0c;再到2023年主导大大小小10来个数字化项目&#xff0c;8年的时间&#xff0c;数字化对我而言已经从一个“新词”变成了一个“旧词”。 8年过去&#xff0c;数字化也从一道企业的“选做…

迎接人工智能的下一个时代:ChatGPT的技术实现原理、行业实践以及商业变现途径

课程背景 2023年&#xff0c;以ChatGPT为代表的接近人类水平的对话机器人&#xff0c;AIGC不断刷爆网络&#xff0c;其强大的内容生成能力给人们带来了巨大的震撼。学术界和产业界也都形成共识&#xff1a;AIGC绝非昙花一现&#xff0c;其底层技术和产业生态已经形成了新的格局…

[Vulnhub靶机] DriftingBlues: 2

[Vulnhub靶机] DriftingBlues: 2靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues2.ova 靶机地址&#xff1a;192.168.67.21 攻击机地址&#xff1a;192.168.67.3 一、信息收集 1.…

Linux在应用层上使用I2C

Linux在应用层上使用I2C 通常情况下i2c读写一般是在kernel中使用&#xff0c;但是在应用层上一样可以使用。在应用上可以通过读写/dev/i2c-x这个节点从而控制i2c接口进行读写数据。 通常一个SOC有多个I2C控制器&#xff0c;假设有这个SOC有3个控制器&#xff0c;我们会在/dev目…

led手电筒照明线性恒流驱动芯片推荐:SM2123EGL双通道可调光

LED手电筒照明线性恒流驱动芯片是一种专门用于LED手电筒的照明系统的关键组件。它采用了线性恒流驱动技术&#xff0c;可以确保LED手电筒在不同电池电压和温度变化下&#xff0c;保持恒定的亮度输出&#xff0c;提高了LED手电筒的稳定性和可靠性。 LED手电筒照明线性恒流驱动芯…

VScode右键没有go to definition选项

1. 背景 1.1. 项目代码在远程服务器上&#xff1b; 1.2. win重装系统&#xff0c;重新安装vscode出现问题&#xff0c;没重装系统之前是没问题的&#xff1b; 2. 问题 打开vscode&#xff0c;通过ssh链接远程服务器中的项目代码后&#xff0c;选中函数右键没有go to defini…

大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业

文章目录 《计算机科学计算》第二版162页第12题&#xff08;1&#xff09;162页第16题216页第12题 《数值分析方法与应用》一、基础知识部分1、5、 二、线性方程组求解2、6、 三、非线性方程组求解1、4、 四、插值与逼近1、5、7、 五、数值积分2、 六、微分方程数值解法1、 《计…

机房自动化监控手把手分享给你 - 番外1:声光报警实现

本文章是一个机房自动化监控实际项目系列文章的番外篇&#xff0c;有个朋友问能否补充一个声光报警的实现&#xff0c;我仔细一想&#xff1a;虽然我不在这个项目中实现声光报警&#xff0c;但我在其他项目用过&#xff0c;使用的设备器件成本很低。那就以这个项目为背景&#…

视频转为序列图的软件,让视频批量转为序列图

你是否曾经遇到过这样的困境&#xff1a;需要将一段视频转为一系列的图片&#xff0c;但却没有合适的工具来完成&#xff1f;或许你曾经手动截图&#xff0c;或者用其他方式&#xff0c;但结果往往不尽如人意&#xff0c;图片质量差、色彩失真、画面不清晰。现在&#xff0c;让…

C语言动态内存管理

我们目前知道的开辟内存空间的方法有&#xff1a; 1.创建变量 2.创建数组&#xff1b; 但是这2种方法开辟的空间大小都是固定的&#xff0c;如果是数组的话确认了大小之后是无法改变的&#xff1b; int a10;//在栈区空间上开辟4个字节的空间&#xff1b;int arr[10];//在栈…

C++ 模板进阶

目录 一、非类型模板参数 二、模板的特化 1、函数模板特化 2、类模板特化 全特化 偏特化 3、例题 三、模板分离编译 1、定义 2、解决方法 3、模板总结 一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xf…

vue 实现调起打印机打印图片 与图片下载

需要创建一个标签&#xff0c;可以放在页面用样式隐藏起来 <div id"printable-content" style"display: none"><div><el-imagestyle"width: 60px; height: 60px; border-radius: 50%"v-if"barrcodePicture":src"b…

10本审稿及出版效率均较好的科普期刊参数分享!

医、药、护、技及医学工程等相关的人员&#xff0c;进行卫生高级职称评审时&#xff0c;需要在专业期刊上公开发表本专业学术论文&#xff0c;论文的方向、内容质量以及发表的刊物都至关重要。今天常笑医学给大家整理了10本审稿及出版效率均较好的科普期刊&#xff01;参数分享…

【开源GPT项目 - 在问】让知识无界,智能触手可及

Chatanywhere: chatAnywhere 在问 | 让知识无界&#xff0c;智能触手可及 项目简介 这是一个免费的在线聊天工具&#xff0c;旨在让用户更方便地享受科技带来的便利。用户可以使用我们的工具来获取答案、寻求建议、进行翻译和计算等等。这是由一位个人开发者创建的&#xff…

MLP(多层感知机) 虚战1

使用Keras实现MLP 前两节地址&#xff1a; CSDNmatplotlib 虚战1-CSDN博客 &#xff08;数据的获取在这有说明&#xff09; 数据预处理 虚战1-CSDN博客CSDN 数据预处理的最后一步&#xff1a;将数据集分为 训练数据集、测试数据集和校验数据集。 训练数据集&#xff1a…

leetcode10-困于环中的机器人

题目链接&#xff1a; https://leetcode.cn/problems/robot-bounded-in-circle/description/?envTypestudy-plan-v2&envIdprogramming-skills 思路&#xff1a; 首先&#xff0c;题目要寻找的是成环的情况。 1.如果经历一次指令后的方向仍为北方&#xff0c;要使得机器人循…

vue中key的用法

加key是提升vue渲染效率&#xff0c;减少DOM操作。 vue列表元素的更新机制&#xff1a; 当列表元素没有设置key的时候&#xff0c;vue判断是否操作这个DOM元素&#xff0c;是根据新旧两次数据的元素顺序进行对比&#xff0c;看一下元素内容是否发生变化。发生变化vue就操作这个…

安卓开发--proj4j坐标转换快速上手

本节专门讲解proj4j的使用,关于坐标转换原理,等我后面有时间了再讲解下。 现在最新版本的1.3.0版本使用起来很方面,不需要你手动导包,只要配置下gradle就行了。 目录 1.gradle配置 2.Activity使用 2.1方式1:Obtaining CRSs by name【通过epsg名字获取】 2.2方式2:Obta…

优先队列的使用c++,哈夫曼树带权路径长度

在一个果园里&#xff0c;达达已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。 每一次合并&#xff0c;达达可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0c;所有的果子…

TS 36.211 V12.0.0-通用功能

本文的内容主要涉及TS 36.211&#xff0c;版本是C00&#xff0c;也就是V12.0.0。