SQL 数据库常用语句与概念之DDL、DML、DCL、TCL、事务、where 1=1

为了方便描述,假设现在有一个表flow,包含字段pday、id、uv

DDL-数据库定义语言

data definition language
数据库定义语言用于对表进行操作,包括:create创建、alter修改表中字段(增加列,更改列,删除列)、drop删除、truncate截断、comment注释、rename重命名;
注意,DDL不涉及记录的修改,不需要commit命令(提交、确认、生效)且不能rollback回滚。

BEGIN TRANSACTION;
--增加列
alter table flow add (vv bigint);
--更改列pday的类型
alter table flow modify (pday integer) ;
--更改字段默认值
alter table flow add default(1) for id with values;
--删除列
alter table flow delete (id);
alter table flow drop column id;
-- 根据约束名称删除约束
alter table flow drop constraint 约束名;

关于alter还要多说几句
MySQL可以使用MODIFY COLUMN 、ALTER COLUMN 、CHANGE COLUMN三种方式修改列属性。对于部分只需要修改表定义而不需要修改表数据的操作,使用ALTER COLUMN操作可以避免数据发生移动,提高ALTER 操作效率。
一般情况下alter colum用于设置或删除列的默认值速度非常快;用change column 处理列的重命名、类型变更和位置移动;modify column除了不能重命名列,其他与change column 一致

-- 增加据表名向字段中增加新的默认值
alter table flow add default (0) for pday with values;

alter table flow alter column id set default 123;
alter table flow alter column id drop default;
--ID是id的新名字
alter table flow change column id ID bigint not null first;
alter table flow change column id ID bigint not null after pday;

alter table flow modify column id bigint not null after pday;

仅需要修改表结构的操作有:
1、更改字段的默认值
2、增加和删除字段的AUTO_INCREMENT属性(主要是增加属性而不是增加字段)
3、增删改ENUM的常量值

更多请参考

DML-数据库操纵语言

data manipulation language
包括:select查询记录、insert插入记录、update更新/更改记录、delete 删除表中一条或多条记录、explain plan执行计划、lock table锁表、merge 、call调用;DML需要commit才能生效。

delete from flow where id=3;
update flow set id=4 where id=3;
insert into flow values(20200907,10086,55);

--注,以下from后面的子句都是可选的
select * ,sum(uv) as sum_uv from flow 
into flow1 
where id=3 
group by pday having sum(uv)>0
order by pday desc

DQL-数据库查询语言

DCL-数据库控制语言

数据库控制语言用于更改或设置用户/角色的权限,包括:grant授权、revoke取消授权。

TCL-事务控制语言

包括:commit提交、rollback回滚、savepoint设置保存点,可以回滚到此处。

事务提交

事物
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作逻辑单元。事务将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性和可恢复性,如当对多个表进行更新的时候,某条执行失败。为了保持数据的完整性,需要使用事务回滚。
参考
ACID
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求

begin transaction 命令,启动一个事务处理。为了保存所做的修改并终止事务处理,应发出 END TRANSACTION命令。如果事务处理失败(如服务器有故障或工作站有故障,以及没有提交事务处理就退出 Visual FoxPro),或者用户发出ROLLBACK 命令,事务处理中的文件就恢复成原状态。
事务提交
只有当事务在提交到数据库时,插入、删除和修改操作才算完成,而在事务提交前,只有操作数据库的这个人才有权看到所做的事情,别人只有提交完成后才可以看到。提交数据有三种类型:

  1. 显式提交,用COMMIT命令直接完成提交
    COMMIT;
  2. 隐式提交,用SQL命令间接完成
    这些命令是:CREATE,ALTER,DROP,RENAME,COMMENT,CONNECT,DISCONNECT,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,AUDIT。
  3. 自动提交,把AUTOCOMMIT设置为ON
    SET AUTOCOMMIT ON;

SHOW

  • SHOW COLUMNS FROM table:列出 表 中的列及其数据类型和其他属性
  • Select current_user
  • SHOW TABLES [ FROM schema ] [LIKE pattern :列出指定 库 或当前库中的表。 可以用 LIKE 子句控制列出的表名
  • SHOW SCHEMAS [ FROM catalog ]:列出 catalog 或当前catalog中的库
  • SHOW SESSION(列出当前会话属性)
  • SHOW CATALOGS
  • DESCRIBE table_name:查看一个已经存在的表结构
  • SHOW FUNCTIONS:列出全部可用于查询的函数
  • EXPLAIN [ ( option [, …] ) ] statement:显示一个语句的逻辑或分布式执行方案。其中option为FORMAT { TEXT | GRAPHVIZ } 或TYPE { LOGICAL | DISTRIBUTED }

动态SQL:where 1=1

where 1=1主要作用是拼凑动态的sql语句,即为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误,从而方便程序逻辑处理,当然,使用不当也会影响效率。

--使用场景:
lv_string = 'select tbl_name,tbl_desc from tbl_test where 1=1' +l_condition;
--当用户选择了查询的名称'abc'时
l_condition ='and tbl_name = ''abc'''
--但是当用户没有选择名称查询时l_condition就为空串''这样运行也不会出错,相当于没有限制名称条件。
lv_string = 'select tbl_name,tbl_desc from tbl_test where 1=1 '
--但如果没有1=1的条件,则报错
lv_string = 'select tbl_name,tbl_desc from tbl_test where '

详细的解释参考

1<>1 用法

用于只取结构不取数据的场合
例如:
create table table_temp tablespace tbs_temp as
select * from table_ori where 1<>1
建成一个与table_ori 结构相同的表table_temp,但是不要table_ori 里的数据。(除了表结构,其它结构也同理)

insert into & insert overwrite

overwrite会覆盖现有的数据(先删除 hive 表的数据,再执行写入操作),而into是直接将数据写入库(向 hive 表尾部追加数据)。
hive 动态分区

Select Condition条件查询模拟解析

全量表和增量表

全量表表示所有的数据信息,增量表表示当前新增的数据, 比如对于把mysql中的用户表信息导入到hive中,每天都进行导入操作,可以有增量导入和全量导入,这时候全量导入就是把数据每天的所有用户信息都导入,增量导入就是把当天新增的用户信息导入,因为之前的已经导入进去,后面的导入只需新增的

猜你喜欢

转载自blog.csdn.net/weixin_43545069/article/details/108555972