sql数据库

让数据库变快的十个建议

假装没事ソ 提交于 2020-02-09 04:09:33
引用: http://www.admin10000.com/Document/198.html http://www.catswhocode.com/blog/   大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。 1、小心设计数据库   第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。   譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库列中的例子。对于系统和用数据库的开发者来说,这很糟糕。   新建数据库时,应当将信息储存在不同的表里,采用标准的命名方式,并采用主键。   来源: http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/ 2、 清楚你需要优化的地方   如果你想优化某个查询语句,清楚的知道这个语句的结果是非常有帮助的。采用EXPLAIN语句,你将获得很多有用的信息,下面来看个例子: EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;  

让数据库变快的10个建议

限于喜欢 提交于 2020-02-09 03:31:00
http://database.51cto.com/art/201203/324833.htm 大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。 0. 小心设计数据库 第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。 譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库列中的例子。对于系统和用数据库的开发者来说,这很糟糕。 新建数据库时,应当将信息储存在不同的表里,采用标准的命名方式,并采用主键。 来源: http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/ 1. 清楚你需要优化的地方 如果你想优化某个查询语句,清楚的知道这个语句的结果是非常有帮助的。采用EXPLAIN语句,你将获得很多有用的信息,下面来看个例子: EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table. column ; 来源: http://dev.mysql.com/doc/refman/5.0/en

Sql Or NoSql,看完这一篇你就都懂了

大憨熊 提交于 2020-02-09 01:38:54
你是否在为系统的数据库来一波大流量就几乎打满CPU,日常CPU居高不下烦恼? 你是否在各种NoSql间纠结不定,到底该选用那种最好? 今天的你就是昨天的我,这也是写这篇文章的初衷。 这篇文章是我好几个月来一直想写的一篇文章,也是一直想学习的一个内容,作为互联网从业人员,我 们要知道关系型数据库(MySql、Oracle)无法满足我们对存储的所有要求,因此对底层存储的选型,对每种存储引擎的理解非常重要。 同时也由于过去一段时间的工作经历,对这块有了一些更多的思考,想通过自己的总结把这块写出来分享给大家。 结构化、非结构化和半结构化数据 文章的开始,聊一下结构化数据、非结构化数据与半结构化数据,因为数据特点的不同,将在技术上直接影响存储引擎的选型。 首先是结构化数据,根据定义结构化数据指的是由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范,也称作为行数据,特点为:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。例如: 因此关系型数据库完美契合结构化数据的特点,关系型数据库也是关系型数据最主要的存储与管理引擎。 非结构化数据, 指的是数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据,例如办公文档(Word)、文本、图片、HTML、各类报表、视频音频等。 介于结构化与非结构化数据之间的数据就是半结构化数据了

dvwa模拟实验——sql盲注

柔情痞子 提交于 2020-02-09 01:11:32
sql盲注 1.sql盲注的基本内容 1.1 sql注入与盲注的区别 盲注:目标只会回复是或者不是,没有详细内容; 注入:可以查看到详细的内容 1.2 sql盲注的过程 判断是否存在注入,注入是字符型还是数字型 猜解当前数据库名–>猜数据库的长度–>猜数据库的名称 猜解数据库中的表名–>猜表的数量–>猜表的长度–>猜表的名称 猜解表中的字段名–>猜列的数量–>猜列的长度–>列的名称 1.3 sql盲注的类型 基于布尔值的盲注 基于时间的盲注 基于报错的盲注 2. DVWA模拟实验 了解一个关键函数: 2.1 low等级 1.分析源代码 从源码中可以看出并没有任何防御措施,存在sql注入漏洞,并且注入类型是字符型。 但是输出只有两句话,所以应该采用盲注的方法。 2.手动盲注过程 (1)猜测数据库名的长度 从1开始试,一直到页面返回正确。 (2)猜测数据库的名称 利用二分法,并对照ASCII码表可以得到数据库名四个字符分别是什么 1' and ascii(substr(database(),1,1))=100 # 1' and ascii(substr(database(),1,1))=118 # 1' and ascii(substr(database(),1,1))=119 # 1' and ascii(substr(database(),1,1))=97 # 得到数据库的名称

下面是对初学者数据库增删改查BaseDao的一个封装

試著忘記壹切 提交于 2020-02-08 23:40:08
大体步骤是: 1.将所有要读取的路径都写在db.properties的一个文件中,方便我们进行后续的维护 2.增删改查的sql语句写到专门的一个mapper.xml文件中,方便我们的使用 3.写一个只用来读取db.properties文件的工具类ReadPropertiesUtils 4.写一个只用来读取mapper.xml文件的工具类MapperUtils 5.导入五个jar包(等下我把jar包发到文件中) 6.写mysql的增删改的工具类MysqlCrudUtils 7.写数据库CURD的工具类JDBCUtils 8.写实体类 9.写一个增删改的测试类TestAddDeleteUpdate ------------------------------------------------------------------------------------ 下面是代码的呈现,按照步骤进行呈现 ------------------------------------------------------------------------------------------- 第一步 db.properties mapper_url=mapper.xmldriver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/lj

Mybatis中进行批量更新(updateBatch)

*爱你&永不变心* 提交于 2020-02-08 20:54:28
更新多条数据,每条数据都不一样 背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新。(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的操作放到数据库端,在业务代码端展现的就是一次性更新所有数据)。两种方式各有利弊,下面将会对两种方式的利弊做简要分析,主要介绍第二种方式在mybatis中的实现。 逐条更新(效率低)(方法一)   这种方式显然是最简单,也最不容易出错的,即便出错也只是影响到当条出错的数据,而且可以对每条数据都比较可控,更新失败或成功,从什么内容更新到什么内容,都可以在逻辑代码中获取。代码可能像下面这个样子: updateBatch(List<MyData> datas){ for(MyData data : datas){ try{ myDataDao.update(data);//更新一条数据,mybatis中如下面的xml文件的update } catch(Exception e){ ...//如果更新失败可以做一些其他的操作,比如说打印出错日志等 } } } //mybatis中update操作的实现 <update> update mydata set ... where ... </update> 这种方式最大的问题就是效率问题,逐条更新,每次都会连接数据库,然后更新,再释放连接资源

Hibernate 主键生成策略——Duplicate entry '1024' for key 'PRIMARY'

北战南征 提交于 2020-02-08 17:28:13
日常搬砖踩坑系列——Hibernate主键生成策略,主键冲突 项目开发完毕,前后端接口联调;前端童鞋反应新增接口偶尔会报错,经过查看后端服务日志: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1024' for key 'PRIMARY' ,明显是写入数据主键冲突,一个新增接口并且数据表的主键是自增的,怎么会主键冲突呢? 还原场景 接口联调,基本是在dev环境,有些时候为了方便开发人员也会本地启动服务连接同一个数据库;前端在切换api地址测试接口时会报错。 分析原因 因为主键是自增的,并且新增接口没有指定id(依靠数据库自增),居然会出现主键冲突错误,难道新增时id被指定了而且是开发人员不知情,貌似找到了原因,因为项目中实体类指定了主键生成策略;代码如下: @Entity @Table(name = "user") public class User { @Id @GenericGenerator(name = "autoId", strategy = "increment") @GeneratedValue(generator = "autoId") private Integer id; private String name; } 验证:将项目SQL进行日志输出(jpa.show

SQL数据库—<2>数据库基本操作(CRUD)

好久不见. 提交于 2020-02-08 11:24:40
学习基本操作语句之前先简单了解数据库的基本数据类型: 数据类型: 二进制数据:以十六进制形式存储 固定长度:binary 可变长度:varbinary 字符数据: char:定长 varchar:长度不同时,但是任何项长度不能超过8KB 日期时间数据: datatime(1753-1-1,9999-12-31) smalldatetime(1900-1-1,2079-6-6) 数值型数据 整型数据:bigint int samllint tinyint 实型数据:decimal : decimal[p(,s)] 其中p为总位数,即精度,s为小数位数,小数点算一位 float 货币数据: money 特殊数据类型: bit:true、false ; Yes、No 文本和图像数据类型: 文本:text 图像:image 简单书写规范 SQL语言中不区分大小写,SQL数据库中的数据是区分大小写的 遇到关键字可以用 [] 括号扩起来 注释: -- :单行注释 /* */:多行注释 更详细内容可以查阅资料 一、数据库操作:创建、删除、修改等基本操作 数据库的CRUD操作,C是指create新增,R是指retrieve检索,U是指update更改,D是指delete删除 使用SQL语句 1 create database 数据库名 --建,完成可用 USE 打开数据库。 2 drop

SQL-联结表

为君一笑 提交于 2020-02-08 10:35:08
SQL最强大的功能之一就是在select中执行联结表(inner)。联结表是利用SQL的select语句能执行的最重要的操作,很好地理解联结及其语法是学习SQL的极其重要的部分。 首先,要理解什么是关系表。 为了避免相同的数据出现多次,关系表的设计就是把信息分解成多个表,一类数据一个表,只要在这些表中通过一些共同的值建立连接即可。 例如要建立产品和供应商的数据库,一个产品对应一个供应商,产品还有自身的规格,价格等信息,而同一个供应商又生产不同的产品,如果将这些信息全部存在同一个表中,那么供应商的地址电话等信息发生改动时,由供应商生产的所有产品的对应信息都需要被改变。 因此,分开存储是有利于维护的,发生变更时,只用改变一次供应商表中的某条数据。 将数据分解能够更有效的存储,并且可伸缩性较好,但是在select检索时,就不如存在同一个表中方便。此时,便用到联结表啦(Join) 联结是一种机制,用来在一条select语句中关联表!!可以联结多个表返回一组输出。 比如有如下的一个表。 供应商表 产品表: 如果需要同时显示供应商name 产品name 以及产品price 那么就需要用到联结: select vender_name,pro_name,pro_price from vendors,products where vendors.vender_id=products.vend_id;

必会SQL练习题

只愿长相守 提交于 2020-02-08 09:39:56
(1)表名:购物信息 购物人 商品名称 数量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5 …… 给出所有购入商品为两种或两种以上的购物人记录 答:select * from 购物信息 where 购物人 in (select 购物人 from 购物信息 group by 购物人 having count(*) >= 2); (2)表名:成绩表 姓名 课程 分数 张三 语文 81 张三 数学 75 李四 语文 56 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 49 给出成绩全部合格的学生信息(包含姓名、课程、分数),注:分数在60以上评为合格 答:select * from 成绩表 where 姓名 not in (select distinct 姓名 from 成绩表 where 分数 < 60) 或者: select * from 成绩表 where 姓名 in (select 姓名 from 成绩表 group by 姓名 having min(分数) >=60) (3)表名:商品表 名称 产地 进价 苹果 烟台 2.5 苹果 云南 1.9 苹果 四川 3 西瓜 江西 1.5 西瓜 北京 2.4 …… 给出平均进价在2元以下的商品名称 答:select 名称 from 商品表 group by 名称 having avg(进价) < 2