【python之路】数据库2

一、数据库存储引擎

  1.什么是存储引擎

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

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

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

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

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

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

二、mysql支持的存储引擎

MariaDB [(none)]> show engines\G  #查看所有支持的存储引擎
MariaDB [(none)]> show variables like 'storage_engine%'; #查看正在使用的存储引擎

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

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

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

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

三、使用存储引擎

  方法1:建表时指定

MariaDB [db1]> create table innodb_t1(id int,name char)engine=innodb;
MariaDB [db1]> create table innodb_t2(id int)engine=innodb;
MariaDB [db1]> show create table innodb_t1;
MariaDB [db1]> show create table innodb_t2;

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

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

  练习

  创建四个表,分别使用innodb,myisam,memory,blackhole存储引擎,进行插入数据测试

MariaDB [db1]> create table t1(id int)engine=innodb;
MariaDB [db1]> create table t2(id int)engine=myisam;
MariaDB [db1]> create table t3(id int)engine=memory;
MariaDB [db1]> create table t4(id int)engine=blackhole;
MariaDB [db1]> quit
[root@egon db1]# ls /var/lib/mysql/db1/ #发现后两种存储引擎只有表结构,无数据
db.opt  t1.frm  t1.ibd  t2.MYD  t2.MYI  t2.frm  t3.frm  t4.frm#memory,在重启mysql或者重启机器后,表内数据清空
#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

四、索引

  1.索引简介

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

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

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

  2.索引语法

  2.1:创建索引

--创建表时
--语法: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));---------------------------------

  2.2:添加和删除索引

---添加索引---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 $$     #设置sql语句结束符号为$$
create procedure autoinsert()   #创建插入函数
BEGIN                                    #mysql用begin和end来表示缩进
declare i int default 1;            #定义i变量默认值为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;--0.32s
-- 添加索引 create index index_id on Indexdb.t1(id);
-- 创建索引后select * from Indexdb.t1 where id=300000;--0.00s                    

五、pymysql模块

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

  1.使用

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

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.获取查询数据

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()

  4.fetch数据类型

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

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/78pikaqiu/p/7251476.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux服务器配置端口,Linux服务器配置-新增端口

1、我们需要知道操作的Apache配置文件在Linux服务器上面的路径&#xff1a;/etc/apache2/&#xff0c;用cd命令即可&#xff1a;cd /etc/apache2/在服务器上&#xff0c;我们通过ls命令查看配置文件&#xff1a;2、需要用到的是设置端口的文件ports.conf 以及sites-enabled目录…

[BZOJ 2654]tree(陈立杰)

Description 给你一个无向带权连通图&#xff0c;每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。题目保证有解。Input 第一行V,E,need分别表示点数&#xff0c;边数和需要的白色边数。接下来E行,每行s,t,c,col表示这边的端点(点从0开始标号)&#xff0c;…

DM3软件如何在linux中安装,DM3 文件扩展名: 它是什么以及如何打开它?

DM3 疑难解答频繁的 DM3 打开问题ImageJ 不存在你尝试加载 DM3 文件并收到错误&#xff0c;例如 “%%os%% 无法打开 DM3 文件扩展名”。 通常&#xff0c;%%os%% 中会出现这种情况&#xff0c;因为 ImageJ 未安装在你的电脑上。 你将无法双击以打开 DM3&#xff0c;因为你的操作…

ftp 530 linux,Linux启动ftp服务器530 Permission denied解决方法

重新在虚拟机下安装了linux。现在我想启动linux自带的ftp服务器&#xff1a;#service vsftpd start 。如果想linux启动是自动启动ftp服务器&#xff1a;#chkconfig vsftpd on 。运行putty&#xff0c;以root身份进入&#xff0c;出现了报错 530 Permission denied &…

Shiro身份认证授权原理

shiro在应用程序中的使用是用Subject为入口的&#xff0c; 最终subject委托给真正的管理者ShiroSecurityMannager Realm是Shiro获得身份认证信息和来源信息的地方(所以这里是我们实现的)我们只要继承他的实现类重写方法就好了&#xff0c;AuthorizingRealm 身份认证过程 自定义…

linux进程路由策略,linux路由表,策略路由,路由查找

路由表内核中路由表有2种&#xff1a;l 一个是缓存路由(fib)&#xff0c;是自动学习生成自动管理的&#xff0c;用户没必要去干预&#xff0c;但是内核还是提供了方法让用户可以去清空它。但是用户不能设置它的项&#xff0c;但是可以根据这个缓存更新的原理从外部影响他。l 路…

Python namedtuple(命名元组)使用实例

Python namedtuple(命名元组)使用实例 #!/usr/bin/python3import collectionsMyTupleClass collections.namedtuple(MyTupleClass,[name, age, job]) obj MyTupleClass("Tomsom",12,Cooker) print(obj.name) print(obj.age) print(obj.job)执行结果&#xff1a; To…

pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法

parallels desktop11是一款功能强大的MAC虚拟机软件&#xff0c;用户通过该软件可在mac系统下运行安装windows或Linux操作系统&#xff0c;不过很多时候用户在安装后&#xff0c;由于后期没有使用虚拟机的需求&#xff0c;故此想要将其删除&#xff0c;但是又不知道如何操作&am…

linux裸机安装nginx,linux环境下安装nginx步骤 - 进击的乌龟 - 博客园

开始前&#xff0c;请确认gcc g开发类库是否装好&#xff0c;默认已经安装。ububtu平台编译环境可以使用以下指令apt- get install build- essentialapt - get install libtoolcentos平台编译环境使用如下指令安装make&#xff1a;yum -y install gcc automake autoconf libtoo…

c语言命名参数,按照C语言的规定,实参和形参的命名不得重复。

按照羊脂玉具有( )光泽。衡量睡眠质量好坏包括入睡快慢,睡眠深浅,睡后能否解乏(精神情况、规定是否影响日常的工作和生活)三个方面。参和“有药吃而无伙食命亦难保”提示健康普及必须遵循的经济性原则。形参治病与调补都需要辩证,其中区别在于用药与药量的不同。命得重咳嗽除了…

阿诺德图像加密c语言,基于Arnold置乱的数字图像加密算法(二)

前文我们介绍了基于Arnold置乱的数字图像加密算法的两种图像置乱变换&#xff0c;今天我们介绍的是另外三种图像置乱变换&#xff1a;基于骑士巡游的图像置乱变换、基于Arnold变换的数字图像置乱和基于仿射变换的置乱变换。一、基于骑士巡游的图像置乱变换所谓骑士巡游&#xf…

8.2 css3 新增标签 盒子模型 长度单位 颜色 渐变 径像渐变

# CSS3 盒子模型* box-sizing 值 content-box 默认值 包括所有的值 / border-box 只算边框的长与宽* resize&#xff08;调节框的大小&#xff09; * 值 none不允许 / horizontal调节宽度 / vertical调节高度 / both都可以* outline轮廓边框 o…

Tomcat服务器的安装及配置

学习目标&#xff1a; 了解Tomcat服务器的主要作用掌握Tomcat服务器的安装与配置掌握Tomcat安装目录下主要文件夹的作用jsp的执行流程1.Web的工作原理流程图&#xff1a;从图中可以看出Tomcat服务器的主要作用就是接受客户端的请求和响应。 2.jsp执行流程 1&#xff09;客户端发…

织梦DEDE网站后台如何上传附件

首先登录织梦网站后台&#xff1a; 分别点击 核心 — 附件管理 — 文件式管理 里面有织梦自带的几个文件夹&#xff0c;包括图片&#xff0c;视频&#xff0c;软件等文件夹。我们来新建一个file文件夹 点击 新建目录 建立file文件夹。 默认应该是跳转进file文件夹了&#xff…