sql语言

MySQL 逻辑架构

眉间皱痕 提交于 2020-02-25 12:07:46
1.MySQL整体逻辑架构 mysql 数据库的逻辑架构如下图: 第一层,即最上一层 ,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。 第二层值得关注 。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。 第三层包括了存储引擎 。通常叫做StorEngine Layer ,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事 物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。 连接管理和安全 在服务器内部,每个client连接都有自己的线程。这个连接的查询都在一个单独的线程中执行。这些线程轮流运行在某一个CPU内核

sql执行过程

拈花ヽ惹草 提交于 2020-02-25 11:42:51
作为一个程序员,几乎所有人都使用过 SQL 语言,无论是在命令行执行、程序调用,还是在 SQL 工具里,你都做过这样的事:写一个规范的 SQL 语句,然后等待数据库返回的结果,然后再基于结果做各种逻辑处理。但是,你知道这条 SQL 语句是咋执行的吗?我打赌你并不是很清楚,读完全文,你会有完全不同的感受。 我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时: mysql> select * from T where ID=10; 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。 今天我们就把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,让你对 MySQL 有更深入的理解。这样当我们碰到 MySQL 的一些异常或者问题时,就能够直击本质,更为快速地定位并解决问题。 下面我给出的是MySQL的基本架构示意图,从中你可以清楚地看到SQL语句在MySQL的各个功能模块中的执行过程。 MySQL的逻辑架构图 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server层包括连接器、查询缓存、分析器

Web安全篇之SQL注入攻击

萝らか妹 提交于 2020-02-25 03:32:43
在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源: http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问题~ 大家早上好!今天由我给大家带来《web安全之SQL注入篇》系列晨讲,首先对课程进行简单介绍, SQL注入篇一共分为三讲: 第一讲:“纸上谈兵:我们需要在本地架设注入环境,构造注入语句,了解注入原理。”; 第二讲:“实战演练:我们要在互联网上随机对网站进行友情检测,活学活用,举一反三”; 第三讲:“扩展内容:挂马,提权,留门。此讲内容颇具危害性,不予演示。仅作概述”。 这个主题涉及的东西还是比较多的,结合我们前期所学。主要是让大家切身体会一下,管中窥豹,起到知己知彼的作用。千里之堤溃于蚁穴,以后进入单位,从事相关 程序开发 ,一定要谨小慎微。 问:大家知道骇客们攻击网站主要有哪些手法? SQL注入,旁注,XSS跨站,COOKIE欺骗,DDOS,0day 漏洞 ,社会工程学 等等等等,只要有数据交互,就会存在被入侵风险!哪怕你把网线拔掉,物理隔绝,我还可以利用传感器捕捉电磁辐射信号转换成模拟图像。你把门锁上,我就爬窗户;你把窗户关上,我就翻院墙;你把院墙加高,我就挖地洞。。。道高一尺魔高一丈,我始终坚信计算机不存在绝对的安全,你攻我防,此消彼长,有时候,魔与道只在一念之间。 下面

MySQL SQL常用语句

纵然是瞬间 提交于 2020-02-25 02:31:19
目录 MySQL语句 MySQL对象 insert用法 update用法 select用法 delete用法 MySQL语句 SQL语句是结构化的查询语言,mysql接口程序只负责接受sql,传送给sql层 SQL语句的种类: DDL:数据库 对象 定义语言 DCL:数据库 控制 语言(grant revoke) DML:数据 行 操作语言(update delete insert) DQL:数据 查询 语言(show、select) MySQL对象 1、数据库对象 库 能定义什么? 库名 库的基本属性(字符集、排序规则) 如何定义? create database [dbname] create schema [dbname] 1.创建数据库 //创建库名为:case1和case2,以下两种方法功能一致 mysql> create database case1; Query OK, 1 row affected (0.00 sec) mysql> create schema case2; Query OK, 1 row affected (0.00 sec) 2.创建数据库,指定字符集 字符集:[DEFAULT] CHARACTER SET [=] charset_name 排序规则:[DEFAULT] COLLATE [=] collation_name mysql>

RAISERROR

爱⌒轻易说出口 提交于 2020-02-24 23:18:36
RAISERROR 返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。 语法 RAISERROR ( { msg_id | msg_str } { , severity , state } [ , argument [ ,...n ] ] ) [ WITH option [ ,...n ] ] 参数 msg_id 存储于 sysmessages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。 msg_str 是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,则只能显示前 397 个并将添加一个省略号以表示该信息已被截断。所有特定消息的标准消息 ID 是 14,000。 msg_str 支持下面的格式: % [[flag] [width] [precision] [{h | l}]] type 可在 msg_str 中使用的参数包括: flag 用于确定用户定义的错误信息的间距和对齐的代码。 代码 前缀或对齐 描述 -(减)

MyBatis的深入原理分析之1-架构设计以及实例分析

久未见 提交于 2020-02-24 20:23:54
MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。 一、MyBatis的框架设计 注:上图很大程度上参考了iteye 上的 chenjc_it 所写的博文 原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的非常好,赞一个! 1.接口层---和数据库交互的方式 MyBatis和数据库的交互有两种方式: a.使用传统的MyBatis提供的API; b. 使用Mapper接口 1.1.使用传统的MyBatis提供的API 这是传统的传递 Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession 对象完成和数据库的交互; MyBatis 提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和 MyBatis 自身配置信息的维护操作。 上述使用 MyBatis 的方法,是创建一个和数据库打交道的 SqlSession 对象,然后根据 Statement Id 和参数来操作数据库,这种方式固然很简单和实用,但是它不符合面向对象语言的概念和面向接口编程的编程习惯。由于面向接口的编程是面向对象的大趋势,

hibernate sql查询

喜夏-厌秋 提交于 2020-02-24 07:39:52
如果你跟我一样比较熟悉SQL,同时不想学习一门新的语言。那么在hibernate中使用Native SQL 查询也是一种不错的方式。 一方面,Native SQL在效率方面有天生的优势; 另一方面,SQL是数据库操作的一种标准,我们与程序、数据库关联很小。如果将来不用hibernate,而是用别的ORM,sql一样好用。 但尽量用标准SQL,而不要用过多方言SQL。 标量查询 最基本的 SQL 查询就是获得一个标量(数值)的列表。 sess.createSQLQuery("SELECT * FROM USER").list(); sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM USER").list(); 它们都将返回一个 Object 数组(Object[])组成的 List,数组每个元素都是 USER 表的一个字段值。Hibernate 会使用 ResultSetMetadata 来判定返回的标量值的实际顺序和类型。 如果不需要在后台进行复杂的处理,可直接将list<Object[]> 转化为json,交给前台去处理。在处理json时,按照数组的方式遍历一个item的属性,属性值为空对应null。 例如我们前台需要一个json格式的包含userName,address,phone的UserInfo列表

防止SQL注入的五种方法!!!!!!!

我与影子孤独终老i 提交于 2020-02-22 13:07:51
一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不通的服务器和数据库特点进行SQL注入攻击 三、SQL注入攻击实例 比如在一个登录界面,要求输入用户名和密码: 可以这样输入实现免帐号登录: 用户名: ‘or 1 = 1 – 密 码: 点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题) 这是为什么呢? 下面我们分析一下: 从理论上说,后台认证程序中会有如下的SQL语句: String sql = "select * from user_table where username= ’ “+userName+” ’ and password=’ “+password+” '"; 当输入了上面的用户名和密码,上面的SQL语句变成: SELECT * FROM user_table WHERE username= ‘’or 1 = 1 – and password=’’ 分析SQL语句: 条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功; 然后后面加两个-

[转]再见 NoSQL!

人走茶凉 提交于 2020-02-22 04:16:19
为解决大规模数据集合多重数据种类带来的挑战,NoSQL 应运而生,但现在却也遇到了诸多问题,本文作者 Rick Negrin,曾在微软工作 12 年,并在 SQL Server 团队度过大部分光阴,他提出,是时候「和 NoSQL 说再见」了! 作者 | Rick Negrin 译者 | 明明如月 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 是时候承认我们早就知道的事实了: NoSQL 并不适合现代应用程序,我们该对它说再见了。 由于数据超过了数据库能够处理的规模,NoSQL 技术就应运而生。这种新型的数据服务的兴起解决了十年前它出现时网络和数据快速增长的问题。NoSQL 还提供了冷存储或批量访问 PB 级数据的低成本的新途径。然而,由于急于解决大数据和高并发的挑战,NoSQL 放弃了数据库的一些高性能和简单易用的核心特性。 对大数据和高并发与高性能和易用性做出的权衡是 NoSQL 在数据库领域做出的最大贡献。将大数据和成熟的关系型结构和灵活性结合到一起,从而产生了一个可伸缩的关系数据库,造就了一场变革。 关系型数据库的发展创造了一个全新的系统,可以处理几乎所有的任务,具有现代应用程序所需的可伸缩性、可靠性和可用性要求。随着从传统的工作任务(例如事务处理应用程序和业务分析)到更新的工作任务

PL/SQL简介

情到浓时终转凉″ 提交于 2020-02-21 19:52:30
PL/SQL是一种比较复杂的程序设计语言,用于各种环境下访问Oracle数据库. 1.1 什么是PL/SQL PL/SQL代表面向过程化的语言与SQL语言的结合.PL/SQL是在SQL语言中扩充了面向过程语言中使用的程序结构,如:变量和类型(既可以预定义也可以由用户定义),控制语句(如IF-THEN-ELSE)和循环,过程和函数,对象类型和方法. PL/SQL语言实现了将过程结构与OracleSQL的无缝集成,从而为用户提供了一种功能强大的结构化程序设计语言.同时集成了面向过程语言的过程结构和强大的数据库操作,为设计复杂的数据库应用提供了功能强大,健壮可靠的程序设计语言. 1.2 PL/SQL功能特性 1.2.1 块结构 PL/SQL被称为块结构化语言,PL/SQL块是PL/SQL语言的基本单位,其中可能包含程序代码,变量声明,错误处理程序,过程,函数,甚至包括其它的PL/SQL块. 块语句如下: DECLARE /* 声明部分 */ BEGIN /* 执行部分 */ EXCEPTION /* 异常处理部分 */ END; 声明部分为任何要定义的变量,游标定义以及过程和函数的声明. 执行部分为程序执行的主体,它由PL/SQL语句组成. 异常部分中的内容为程序运行期间发生错误或异常时触发的程序代码.通过将错误处理代码与程序的主体分离开可以使程序的结构变得清晰. 只有执行部分是必须的