sql数据库

sql 根据多个ID删除表中多行数据

眉间皱痕 提交于 2020-03-18 01:17:32
以下为删除记录的存储过程,此删除为逻辑删除,只是将记录的状态字段state改为'2'了,正常为'1' /*******************************************************************************根据ID删除黑名单表中记录信息******************************************************************************/CREATE PROCEDURE [dbo].[P_DelBlackListByID_sp]@IDList nvarchar(2000)AS DECLARE @Len int DECLARE @id varchar(30) SELECT @Len = DATALENGTH(@idList) WHILE @Len> 0 BEGIN EXECUTE @Len = GetFirstWordWithSeparator_sp @idList OUTPUT, @id OUTPUT,',' IF @Len > 0 BEGIN update BlackList_tb set [state]='2' WHERE BlackListID=cast(@id as int) END End 以上存储过程调用了下面的存储过程 CREATE PROCEDURE

在ORACLE 12C 上安装APEX 19.2

别说谁变了你拦得住时间么 提交于 2020-03-17 15:29:16
安装环境 操作系统:win 10 x 64 中间件:本文尝试了三个安装环境 PL/SQL gateway/ORDS独立模式/Apache + ORDS 数据库版本:采用windowns X64 版本的 oracle db 12.1.0 目标容器:安装在PDB中(已经自建好名字为apexpdb) 提前修改好pdb的sys用户的密码并熟记 参考官方文档:https://docs.oracle.com/en/database/oracle/application-express/19.2/ 安装步骤(通用步骤): 下载apex安装包 并解压到ORACLE_HOME目录下的 apex文件夹中,并切换到apex目录中, sqlplus / as sysdba 登录数据库: PS C:\app\oracle\oracle\product\ 12.1 .0 \dbhome_1\apex > sqlplus / as sysdba SQL * Plus: Release 12.1 .0 .2 .0 Production on 星期日 3 月 1 16 : 43 : 59 2020 Copyright ( c ) 1982 , 2014 , Oracle . All rights reserved . 连接到: Oracle Database 12 c Enterprise Edition

(ETL)ETL架构师面试题(转载)

懵懂的女人 提交于 2020-03-17 11:54:42
1. What is a logical data mapping and what does it mean to the ETL team? 什么是逻辑数据映射?它对ETL 项目组的作用是什么? 答:逻辑数据映射(Logical Data Map)用来描述源系统的数据定义、目标数据仓库的模型以及将源系统的数据转换到数据仓库中需要做操作和处理方式的说明文档,通常以表格或Excel的格式保存如下的信息: 目标表名: 目标列名: 目标表类型:注明是事实表、维度表或支架维度表。 SCD类型:对于维度表而言。 源数据库名:源数据库的实例名,或者连接字符串。 源表名: 源列名: 转换方法:需要对源数据做的操作,如Sum(amount)等。 逻辑数据映射应该贯穿数据迁移项目的始终,在其中说明了数据迁移中的ETL策略。在进行物理数据映射前进行逻辑数据映射对ETL项目组是重要的,它起着元数据的作用。项目中最好选择能生成逻辑数据映射的数据迁移工具。 2. What are the primary goals of the data discovery phase of the data warehouse project? 在数据仓库项目中,数据探索阶段的主要目的是什么? 答:在逻辑数据映射进行之前,需要首先对所有的源系统进行分析。对源系统的分析通常包括两个阶段,一个是数据探索阶段(Data

使用MySQL SQL线程回放Binlog实现恢复

Deadly 提交于 2020-03-17 11:48:34
目录 1. 需求部分 1.1 基于MySQL复制同步特性,尝试使用Replication的SQL线程来回放binlog,可基于以下逻辑模拟场景 1.2 基于题目1.1,考虑是否可以做到以下场景的恢复 2.操作部分 2.1 环境准备及故障模拟 2.2 数据恢复 2.3 只恢复单个库的数据 2.4 只恢复单个表的数据 2.5 恢复到指定的GTID或position点 2.6 提升恢复效率的参数优化 2.7 使用复制线程与使用mysqlbinlog恢复的效率对比 2.8 总结 1. 需求部分 1.1 基于MySQL复制同步特性,尝试使用Replication的SQL线程来回放binlog,可基于以下逻辑模拟场景 做全量xtrabackup备份模拟日常备份 执行sysbench压测4张表,20个线程,压测10分钟,模拟大量binlog 删除实例模拟数据库被误删除或硬件故障(binlog需要保留) 使用xtrabackup恢复全量备份 使用MySQL Replication SQL线程回放binlog(提示:恢复前需要将relay_log_recocery参数设置为0) 1.2 基于题目1.1,考虑是否可以做到以下场景的恢复 只恢复单个库的数据 只恢复单个表的数据 将数据恢复到指定的GTID或者position点(如恢复到误操作drop之前的GTID) 是否可以通过参数调整提升回放效率

mybatis是如何防止SQL注入的

坚强是说给别人听的谎言 提交于 2020-03-17 11:05:41
SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。究其原因不外乎:No patch for stupid。为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) ); 然后使用JDBC操作表: private String getNameByUserId(String userId) { Connection conn = getConn();//获得连接 String sql = "select name from user where id=" + userId; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs=pstmt.executeUpdate(); ...... } 上面的代码经常被一些开发人员使用。想象这样的情况,当传入的userId参数为"3;drop table user;"时,执行的sql语句如下: select name from user where id=3; drop table user; 数据库在编译执行之后,删除了user表。瞧,一个简单的SQL注入攻击生效了!之所以这样

ORA-00742:Log read detects lost writein thread 1 sequence 1202 block 137840

对着背影说爱祢 提交于 2020-03-17 10:29:09
问题背景: 客户数据库环境遭遇断电宕机,启动数据库失败,协助查看。 报错如下: 1 Total System Global Area 6442450944 bytes 2 Fixed Size 8807168 bytes 3 Variable Size 1375735040 bytes 4 Database Buffers 5049942016 bytes 5 Redo Buffers 7966720 bytes 6 Database mounted. 7 ORA-00742: Log read detects lost write in thread 1 sequence 1202 block 137840 8 ORA-00312: online log 18 thread 1: '/u01/app/oracle/oradata/orcl/redo18.log' 9 10 11 alter pluggable database all open 12 * 13 ERROR at line 1: 14 ORA-01109: database not open 问题解决: 宕机过程中redolog丢失 1 SQL> RECOVER DATABASE UNTIL CANCEL; //尝试recover 2 ORA-01547: 警告: RECOVER 成功但 OPEN

mybatis是如何防止SQL注入的

青春壹個敷衍的年華 提交于 2020-03-17 10:02:04
SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。究其原因不外乎:No patch for stupid。为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) ); 然后使用JDBC操作表: private String getNameByUserId(String userId) { Connection conn = getConn();//获得连接 String sql = "select name from user where id=" + userId; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs=pstmt.executeUpdate(); ...... } 上面的代码经常被一些开发人员使用。想象这样的情况,当传入的userId参数为"3;drop table user;"时,执行的sql语句如下: select name from user where id=3; drop table user; 数据库在编译执行之后,删除了user表。瞧,一个简单的SQL注入攻击生效了!之所以这样

mySQL基础

爷,独闯天下 提交于 2020-03-17 07:45:03
mySQL 一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ MySQL服务的登录和退出 ★ MySQL的常见命令和语法规范 五、DQL语言的学习 ★ 基础查询 ★ 条件查询 ★ 排序查询 ★ 常见函数 ★ 分组函数 ★ 分组查询 ★ 连接查询 ★ 子查询 √ 分页查询 ★ union联合查询 √ 六、DML语言的学习 ★ 插入语句 修改语句 删除语句 七、DDL语言的学习 库和表的管理 √ 常见数据类型介绍 √ 常见约束 √ 八、TCL语言的学习 事务和事务处理 九、视图的讲解 √ 十、变量 十一、存储过程和函数 十二、流程控制结构 数据库的好处 1.持久化数据到本地 2.可以实现结构化查询,方便管理 数据库相关概念 1、DB:数据库,保存一组有组织的数据的容器 2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 3、SQL:结构化查询语言,用于和DBMS通信的语言 数据库存储数据的特点 1、将数据放到表中,表再放到库中 2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。 3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 4、表由列组成

Mybatis中${}和#{}的区别

狂风中的少年 提交于 2020-03-17 07:27:53
${}和#{}的作用 Mybatis在项目中起到的是项目和数据库的交互以及sql语句的管理,sql语句的集中管理,方便开发人员对sql语句的复用和管理,但是既然需要复用,就表明sql语句本身是进过抽象的,抽象的目标就是参数,在不同的用途就需要传入不同的参数${}和#{}就是用来向已经定义好的sql语句传入参数的。 ${}和#{}的区别 #{} 这种取值是变异号sql语句之后再取值,添加的值有' '包裹 ${} 这种取值是取值之后再去编译sql语句,添加的值没有' '包裹 #{}的使用案例 <select id = "selectUser" parameterType="String" resultType="com.mybatis.po.MyUser"> select * from user where account = #{account} and password = #{password} </select> 上述sql语句经过编译之后的结果是 select * from user where account = '122221122' and password = '1515131811515' ${}的使用案例 <select id = "selectUser" parameterType="String" resultType="com.mybatis.po

SQL联合主键 查重

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-17 06:21:11
2014年最后一天,今天在给数据库导入数据的时候,遇到一个问题,就是联合主键去重。 事情是这样的,现有一个表M,我想找个表中导入了许多数据,并需要将字段A(int)和B(int)联合设置为主键。 但是在设置主键时,告知我有重复的内容,无法设置主键。 正常情况下,这两个字段的组合是唯一的,不应该重复,为了找到重复数据,看看是什么方面出了问题。 采用distinct方式 但是发现 select count(distinct name, id) from A 这句话在SQL里不适用, http://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html 这个里面写了,当然SQL里也会报错。 所以只能将两个字段进行转换并重新组合成一个字段进行查询 select cast(A as varchar(10))+cast(B as varchar(10)) newkey from M group by cast(A as varchar(10))+cast(B as varchar(10)) having count(cast(A as varchar(10))+cast(B as varchar(10)))>1 代码本身没有什么难度,就是在于要转换思想,不能仅仅纠结于两个int类型的主键,重新组合就方便查询了。 来源: https:/