sql数据库

MySQL经典面试题

流过昼夜 提交于 2020-02-12 03:09:24
1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)、MySQL如何保证复制过程中数据一致性及减少数据同步延时 一致性主要有以下几个方面

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

你离开我真会死。 提交于 2020-02-12 03:04:48
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。 3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理 4. Code Fragment 1: String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′"; stmt.executeUpdate(updateString); Code Fragment 2: PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? "); updateSales.setInt(1, 75); updateSales.setString(2, "Colombian"); updateSales

数据库 之基本操作的SQL语句--模式、表、索引、视图、查询(详情/讲解版)

依然范特西╮ 提交于 2020-02-11 21:20:18
文章目录 1、模式的定义与删除 1.1 定义模式 1.2 删除模式 2、基本表的定义、删除与修改 2.1 定义表 2.2 定义表的所属模式 2.3 修改表 2.4 删除表 3、索引的建立与删除 3.1 创建索引 3.2 修改索引 3.3 删除索引 4、视图的创建与删除 4.1 创建视图 4.1.1 基于多个基表的视图 4.1.2 基于视图的视图 4.1.3 带表达式的视图 4.1.4分组视图 4.2 删除视图 4.3 查询视图 4.4 更新视图 5、查询操作 5.1 单表查询 5.2 连接查询(后续补充) 5.3 嵌套查询 5.3.1 带有IN谓词的子查询 5.3.2 带有比较运算符的子查询 5.4 集合查询(后续补充) 5.5 基于派生表的查询(后续补充) 5.6 Select语句的一般形式(后续补充) 1、模式的定义与删除 1.1 定义模式 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句,语句如下: CREATE SCHEMA < 模式名 > AUTHORIZATION < 用户名 > [ < 表定义子句 > | < 视图定义子句 > | < 授权定义子句 > ] 例子:为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1 CREATE SCHEMA TEST AUTHORIZATION ZHANG

ER 和 数据库关系模式

ぐ巨炮叔叔 提交于 2020-02-11 14:54:45
http://lianghuanyue123.blog.163.com/blog/static/130423244201162011850600/ 我们眼下所接触的数据库基本上是关系数据库,关系数据库中的关系模式是型,而关系是值。关系模式是对关系的描写叙述。 什么是关系?关系实质上是一张二维表,当中每一行是一个元组,每一列是一个属性,每一个元组是该关系涉及到属性集合笛卡尔积的一个元素。(笛卡尔积是这种一个集合。集合中的元素是有序对,若 A= { 0,1 } B= { a , b }则: A*B={<0,a> , <0,b>,<1,a>,<1,b>} ) , 关系是元组的集合,所以关系模式要描写叙述元组的集合,当中包含那些属性,属性来自域,属性与域之间的映射关系。 关系模式能够用五元组形式表示: R ( U , D , Dom , F ),当中 R: 表示关系名, U: 表示属性集合, Dom, 表示属性域(来自那个域) ,F: 表示函数依赖。 可是普通情况下,我们通常把关系模式表示为: R ( U )或者 R ( A , B )(当中 A 、 B 代表 U 中的属性) 那么 E-R 图转化成关系模式的步骤。 前提:是已经把需求中的实体,以及实体中联系确定。 第一:把每一个实体都转化成关系模式 R ( A 、 B )形式。( A 、 B 代表属性) 第二

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

时间秒杀一切 提交于 2020-02-11 12:12:29
1. 子程序的各个部分: 声明部分、可执行部分、异常处理部分(可选) 2.子程序的分类: A. 过程 - 执行某些操作 a. 创建过程的语法: CREATE [OR REPLACE] PROCEDURE <procedure name> [(<parameter list>)] IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <exception handlers>] END; b. 过程参数的三种模式: IN:用于接受调用程序的值、默认的参数模式 OUT:用于向调用程序返回值 IN OUT:用于接受调用程序的值,并向调用程序返回更新的值 c. 将过程的执行权限授予其他用户: SQL> GRANT EXECUTE ON find_emp TO MARTIN; SQL> GRANT EXECUTE ON swap TO PUBLIC; d. 删除过程:SQL> DROP PROCEDURE find_emp; B. 函数 - 执行操作并返回值 a. 创建函数的语法: CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations]

Python3 MySQL 数据库连接 - PyMySQL 驱动

不想你离开。 提交于 2020-02-10 21:25:06
什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 PyMySQL 安装 在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。 PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。 如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL: $ pip install PyMySQL 数据库连接 db = pymysql.connect( host = "localhost", user = "root", password = "root", port = 3306, database = "mails" ) 数据库操作 # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 定义sql语句 sql = "select * from mail" # 使用 execute() 方法执行 SQL 查询 cursor.execute(sql) # 使用 fetchone() 方法获取单条数据. data = cursor.fetchone()

sql注入学习笔记 详解篇

亡梦爱人 提交于 2020-02-10 10:38:17
sql注入的原理以及怎么预防sql注入(请参考上一篇文章)      https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sql注入的分类:   根据注入类型分类:     1.union联合注入     2.报错注入     3.盲注       布尔类型盲注       延时盲注   根据注入位置分类     get注入     post注入     请求头注入   根据sql语句不同分类     数字型注入     字符型注入 sql 注入的步骤:   1.寻找注入点     哪些地方可能存在注入点(所有与数据库交互的地方都有可能存在注入点)     一般get请求注入点判断的方式,例:假设参数为?id=1在携带参数的后面使用?id=1',(请注意单引号,如果单引号被数据库查询) ?id=1' //使用单引号使数据库报错,引发数据库异常(有时候使用双引号闭合的时候,单引号是不会报错的 在可能存在注入点的地方多尝试就好了)假如提交了?id=1'//和id=1时候出现出现明显不一样的页面,就表示可能存在注入点,当然,也有可能是被waf拦截了 //假设php中查询的sql语句为 sql = "select * from user where id='$id' limit 0,1";

DB2 SQL性能调优秘笈

扶醉桌前 提交于 2020-02-10 09:47:16
《DB2 SQL性能调优秘笈》 基本信息 作者: (美)Tony Andrews 译者: 陈勇 杨健康 丛书名: 华章程序员书库 出版社:机械工业出版社 ISBN:9787111425021 上架时间:2013-6-4 出版日期:2013 年6月 开本:16开 页码:86 版次:1-1 所属分类:计算机 更多关于 》》》《 DB2 SQL性能调优秘笈 》 内容简介 计算机书籍   《db2 sql性能调优秘笈》是一本不可多得的db2数据库性能调优秘笈,由拥有20余年db2工作经验的资深数据库专家撰写,amazon全五星评价畅销书。本书不仅详尽阐述了100余条sql语句优化的技巧和最佳实践、编写高性能sql语句的标准和原则,以及db2数据库性能优化的“15步法”,而且还包含大量案例,为解决各种复杂的db2性能问题提供了解决方案。    《db2 sql性能调优秘笈》共7章:第1章总结了116条优化sql语句的技巧和最佳实践;第2章讲解了 sql语句中提示的编写方法和技巧;第3章讲解了编写高质量sql语句需要遵守的sql标准和原则;第4章介绍了sql程序走查;第5章用2个实例介绍了如何检查存在性;第6章介绍了runstats,用来得到一些统计信息;第7章讲解了db2性能优化的“15步调优法”,被誉为db2性能调优领域的无价之宝,适用于各种情况下的性能调优问题。本书最后还有2个附录

jsp数据库连接大全[z]

房东的猫 提交于 2020-02-10 07:53:06
一、jsp连接Oracle8/8i/9i数据库(用thin模式) testoracle.jsp如下: < %@ page contentType="text/html;charset=gb2312"% > < %@ page import="java.sql.*"% > < html > < body > < %Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为你的数据库的SID String user="scott"; String password="tiger"; Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select * from test"; ResultSet rs=stmt.executeQuery(sql); while(rs.next()) {% > 您的第一个字段内容为

SQL Server数据库(时间戳timestamp)类型 (转载)

故事扮演 提交于 2020-02-10 01:22:00
https://www.cnblogs.com/OpenCoder/p/10411186.html timestamp介绍 公开数据库中自动生成的唯一二进制数字的数据类型。 timestamp 通常用作给表行加版本戳的机制。 存储大小为 8 个字节。 不可为空的 timestamp 列在语义上等价于 binary(8) 列。可为空的 timestamp 列在语义上等价于 varbinary(8) 列。 这将导致在C#程序中获取到的timestamp类型则变成了byte[]类型。所以如果我们需要从数据库中获取并使用这个时间戳的话就必需经过转换。 timestamp 数据类型只是递增的数字,不保留日期或时间。 若要记录日期或时间,请使用 datetime 数据类型。 一个表只能有一个 timestamp 列。 每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新 。对行的任何更新都会更改 timestamp 值。 总结 :SQL Server timestamp 数据类型与时间和日期无关 。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1