一、数据库存储引擎

1、存储引擎

mysql中建立的库===>文件夹

库中建立的表===>文件

现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等。

数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
操作此表的类型)。

在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql
数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据
自己的需要编写自己的存储引擎。

2、mysql支持的存储引擎

mysql> show engines\G;  #查看所有支持的存储引擎
mysql> show variables like '%storage_engine%';   #查看正在使用的存储引擎

MySQL常用的存储引擎

MyISAM存储引擎
由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。

InnoDB存储引擎(主要使用
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。

MEMORY
MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。

BLACKHOLE
黑洞存储引擎,可以应用于主备复制中的分发主库。

3、使用存储引擎

方法1:建表时指定

mysql> create table innodb_t1(id int,name char)engine=innodb;
mysql> create table innodb_t2(id int)engine=innodb;
mysql> show create table innodb_t1;
mysql> show create table innodb_t2;

方法2:在配置文件中指定默认的存储引擎

/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
innodb_file_per_table=1

查看

[root@egon db1]# cd /var/lib/mysql/db1/
[root@egon db1]# ls
db.opt  innodb_t1.frm  innodb_t1.ibd  innodb_t2.frm  innodb_t2.ibd

二、索引

1、索引简介

索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。

索引优化应该是对查询性能优化最有效的手段了。
索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

索引特点:创建与维护索引会消耗很多时间与磁盘空间,但查询速度大大提高!

2、索引语法

创建索引

--创建表时
--语法:CREATE TABLE 表名 (字段名1  数据类型 [完整性约束条件…],字段名2  数据类型 [完整性约束条件…],[UNIQUE]   INDEX | KEY[索引名]  (字段名[(长度)]  [ASC |DESC]));--------------------------------
--创建普通索引示例:CREATE TABLE emp1 (id INT,name VARCHAR(30) ,resume VARCHAR(50),INDEX index_emp_name (name)--KEY index_dept_name (dept_name));--创建唯一索引示例:CREATE TABLE emp2 (id INT,name VARCHAR(30) ,bank_num CHAR(18) UNIQUE ,resume VARCHAR(50),UNIQUE INDEX index_emp_name (name));--创建全文索引示例:CREATE TABLE emp3 (id INT,name VARCHAR(30) ,resume VARCHAR(50),FULLTEXT INDEX index_resume (resume));--创建多列索引示例:CREATE TABLE emp4 (id INT,name VARCHAR(30) ,resume VARCHAR(50),INDEX index_name_resume (name,resume));
---------------------------------

添加和删除索引

---添加索引---CREATE在已存在的表上创建索引CREATE  [UNIQUE]  INDEX  索引名ON 表名 (字段名[(长度)]  [ASC |DESC]) ;---ALTER TABLE在已存在的表上创建索引ALTER TABLE 表名 ADD  [UNIQUE] INDEX索引名 (字段名[(长度)]  [ASC |DESC]) ;CREATE INDEX index_emp_name on emp1(name);ALTER TABLE emp2 ADD UNIQUE INDEX index_bank_num(band_num);-- 删除索引语法:DROP INDEX 索引名 on 表名DROP INDEX index_emp_name on emp1;DROP INDEX bank_num on emp2;

3、索引测试实验

--创建表
create table Indexdb.t1(id int,name varchar(20));--存储过程delimiter $$
create procedure autoinsert()
BEGIN
declare i int default 1;
while(i<500000)do
insert into Indexdb.t1 values(i,'yuan');
set i=i+1;
end while;
END$$delimiter ;--调用函数
call autoinsert();-- 花费时间比较:
-- 创建索引前select * from Indexdb.t1 where id=300000;--2.42s
-- 添加索引 create index index_id on Indexdb.t1(id);
-- 创建索引后select * from Indexdb.t1 where id=300000;--0.09s

三、pymysql

pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。

一、下载安装:

pip3 install pymysql

二、使用

1、执行SQL

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql# 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
# 创建游标
cursor = conn.cursor()# 执行SQL,并返回收影响行数
effect_row = cursor.execute("update hosts set host = '1.1.1.2'")# 执行SQL,并返回受影响行数
#effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))# 执行SQL,并返回受影响行数
#effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])# 提交,不然无法保存新建或者修改的数据
conn.commit()# 关闭游标
cursor.close()
# 关闭连接
conn.close()

2、获取新创建数据自增ID

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
conn.commit()
cursor.close()
conn.close()# 获取最新自增ID
new_id = cursor.lastrowid

3、获取查询数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.execute("select * from hosts")# 获取第一行数据
row_1 = cursor.fetchone()# 获取前n行数据
# row_2 = cursor.fetchmany(3)
# 获取所有数据
# row_3 = cursor.fetchall()conn.commit()
cursor.close()
conn.close()

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode='relative')  # 相对当前位置移动
  • cursor.scroll(2,mode='absolute') # 相对绝对位置移动

4、fetch数据类型

  关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("call p1()")result = cursor.fetchone()conn.commit()
cursor.close()
conn.close()

转载于:https://www.cnblogs.com/zzn91/p/7300806.html

Day46:数据库引擎、索引、pymysql相关推荐

  1. 数据库_mysql数据库引擎_数据库索引

    文章目录 前言 一.MySql数据库引擎 1.1.数据库引擎任务 1.2.常用的数据库引擎 1.2.1.InnoDB存储引擎 页主要部分 InnoDB的几个变量 1.2.2.MyISAM存储引擎 1. ...

  2. MySQL数据库引擎和索引

    ISAM 执行读取的速度快但是不支持容错也不支持事务处理.所以如果硬盘上崩溃了数据就无法恢复了 MyISAM: 提供了锁表的功能来优化并发读写的情况,提供了索引和字段管理的功能.MyISM强调了快速读 ...

  3. 数据库进阶,数据库的索引,事物与存储引擎

    数据库的索引,事物与存储引擎 数据库的索引 索引的概念 索引的作用 索引适合在什么情况下? 索引的分类和创建 普通索引 唯一性索引 主键索引 组合索引 全文索引 查看索引 删除索引 数据库的事务 数据 ...

  4. mysql数据库引擎介绍

    mysql数据库引擎介绍 你能用的数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HE ...

  5. CoolHash数据库引擎压测对比报告

    Coolhash 当前性能指标:读写吞吐量超过百万,千万级别查询1秒完成,连续48小时打满CPU强压力运行稳定.redis官方公布读写性能在10万 tps,leveldb官方公布写性能在40万tps, ...

  6. uniapp无法使用substr_SQLite 3.34.0发布,世界上使用量最大的数据库引擎

    点击"蓝字"关注我们吧 SQLite 3.34.0 发布了,SQLite 是一个 C 实现的 SQL 数据库引擎,它的特点是小型.快速.自包含.高可靠性和功能齐全.SQLite 嵌 ...

  7. mysql数据库引擎博客_2、MySQL常见数据库引擎及比较?

    摘自: https://www.cnblogs.com/zhuifeng-mayi/p/9265075.html MySQL存储引擎简介 MySQL支持数个存储引擎作为对不同表的类型的处理器.MySQ ...

  8. mysql的innodb数据库引擎详解

    http://www.jb51.net/softjc/158474.html 这篇文章主要介绍了mysql的innodb数据库引擎,需要的朋友可以参考下 一.mysql体系结构和存储引擎 1.1.数据 ...

  9. MySQL 数据库 引擎

    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引 擎:ISAM.MYISAM和HEAP.另外两种类型I ...

  10. 第一次接触 SharpHsql(纯C#开源数据库引擎)

    在 开源中的灵感之源 的blog上看到这篇文章 开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本 这篇文章,着实幸福了一阵.       类似的数据库引擎我用过不少,比如 sqlit ...

最新文章

  1. C++中#include的工作原理
  2. 人工智能伦理如何设定,从种群层面看人类的知识积累和进化
  3. h5上传图片_怎么搭建自己的H5响应式网站
  4. 在C ++中将String转换为Integer并将Integer转换为String
  5. 本地通过Eclipse链接Hadoop操作Mysql数据库问题小结
  6. python-jieba库
  7. PHP smarty
  8. 【无标题】python类报错:takes no arguments
  9. 文字+图片的混编(富文本)
  10. eclipse的jsp第一行代码报错_Eclipse手记(小弟发现最实用的资料之一)-JSP教程,Java技巧及代码...
  11. 台式计算机win如何联网,Win10台式机怎么连接无线网(wifi)?
  12. sublime text3解决Gosublime无法自动补全代码
  13. 转:资本2010《CCTV财经频道中国证券市场投资策略报告》发布
  14. PDF图纸尺寸怎么测量
  15. 2020年2月12日 林大OJ习题 队列
  16. 重置找不到计算机,重置Win10电脑时提示找不到恢复环境的解决教程
  17. VSCode安装Go环境(详细教程)
  18. 【C语言入门】将十元钱兑换成一元,五角,一角的硬币,共计40枚,计算有多少中兑换方法
  19. Unity 武器的刀光剑影效果
  20. Android 应用是如何编译与运行的

热门文章

  1. .h和.cpp文件的区别 .
  2. 在J2ME和WAP中实现电话呼叫功能
  3. Windows中MySQL主从数据库搭建(一)
  4. C# 匿名对象的写法
  5. VS2022编译项目出现““csc.exe”已退出,代码为 -1073741819”的错误解决办法
  6. js使用闭包循环为a标签正确添加事件
  7. 几种常见的程序命名规则
  8. 12. Copy all parts of an object
  9. html5实现拖拽上传图片,JS HTML5拖拽上传图片预览
  10. mfc用数组怎么存储句柄_指南手机存储不足怎么办?用好这份清理指南你的手机还能再战三年...