mysql数据库

MyISAM与InnoDB两者之间怎么选择

六月ゝ 毕业季﹏ 提交于 2020-04-06 09:21:30
MyISAM与InnoDB两者之间怎么选择 1、MyISAM不支持事务,InnoDB是事务类型的存储引擎 当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了。 2、MyISAM只支持表级锁,BDB支持页级锁和表级锁默认为页级锁,而InnoDB支持行级锁和表级锁默认为行级锁 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许 MyISAM是表级锁定的存储引擎,它不会出现死锁问题 对于write,表锁定原理如下: 如果表上没有锁,在其上面放置一个写锁,否则,把锁定请求放在写锁队列中。 对于read,表锁定原理如下 : 如果表上没有写锁定,那么把一个读锁放在其上面,否则把锁请求放在读锁定队列中 当一个锁定被释放时,表可被写锁定队列中的线程得到,然后才是读锁定队列中的线程。这意味着,如果你在一个表上有许多更新,那么你的SELECT语句将等到所有的写锁定 线程执行完。 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。 行级锁是Mysql粒度最小的一种锁,它能大大的减少数据库操作的冲突,但是粒度越小实现成本也越大。 行级锁可能会导致“死锁”,那到底是怎么导致的呢,分析原因:Mysql行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主 键索引

Python连接MySQL数据库

大兔子大兔子 提交于 2020-04-06 08:42:19
常用函数 Python DB API 2.0 对事务提供了两个方法: commit() 提交 rollback() 回滚 cursor用来执行命令的方法: callproc(self, procname, args) 用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数 execute(self, query, args) 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数 executemany(self, query, args) 执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数 nextset(self) 移动到下一个结果集 cursor用来接收返回值的方法: fetchall(self) 接收全部的返回结果行. fetchmany(self, size=None) 接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据. fetchone(self) 返回一条结果行. rowcount 这是一个只读属性,并返回执行execute() 方法后影响的行数。 scroll(self, value, mode='relative') 移动指针到某一行; 如果mode='relative',则表示从当前所在行移动value条,如果 mode=

python连接mysql数据库(MySQL)

安稳与你 提交于 2020-04-06 07:55:53
在介绍python在数据库中的操作之前先简单介绍点mysql中的操作语言: [root@elk-server 2018-01-24]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 194 Server version: 5.6.16 Source distribution Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databses; mysql> create table users(id int(2) not null primary

mysql 运维命令

倖福魔咒の 提交于 2020-04-06 07:35:47
数据库备份导入 mysqldump -u root -p main_3_2_0 > /main_3_2_0.sql use main_3_2_0 source /main_3_2_0.sql #查询正在执行的sql show full processlist # 使用 kill id 来杀死进程 kill 483 #锁定主数据库 flush tables with read lock INSERT INTO `kettle`.`user_copy` (`id`, `name`, `telphone`) VALUES ('4', '4', '4'); # [SQL]INSERT INTO `kettle`.`user_copy` (`id`, `name`, `telphone`) VALUES ('4', '4', '4'); # [Err] 1223 - Can't execute the query because you have a conflicting read lock #解锁主数据库 #切换回主数据库的终端,进行表解锁操作。 unlock tables; 1、查询是否锁表 show open tables where in_use>0; 2、查询进程 show processlist 查询到相对应的进程,然后 kill id 3、查看正在锁的事务 select *

MySQL设置允许用户远程登录

非 Y 不嫁゛ 提交于 2020-04-06 05:12:01
项目中需要连接虚拟机上面的MySQL数据库,但是总是出错,怀疑本机是否有连接远程数据库的权限。 执行命令: mysql > use mysql ; mysql > select host , user from user ; 查看结果是不是root用户仅允许本地(localhost)登录,下面这个截图就是这种情况: mysql-root-state 是的话,就要修改它的host为 % ,表示任意IP地址都可以登录。 mysql > update user set host = '%' where user = 'root' ; 执行完后可能提示error。再 mysql> select host,user from user; 查看下吧。 root对应的host成了 % ,表示可以任意IP地址登录了。 mysql-change-root-state mysql > flush privileges ; 把缓存flush掉,在使用update语句修改用户记录后,需要FLUSH语句告诉服务器重载授权表。 MySQL默认在本地localhost登录root用户,然而远程连接却会报错(root@X.X.X.X acess denied) 这里就需要进行配置允许远程连接 方式一: 进入mysql: mysql -uroot -p 运行mysql: use mysql; 开启远程访问权限:

MySQL(数据库)

不打扰是莪最后的温柔 提交于 2020-04-06 04:37:07
数据库概念: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库 在实际应用中会遇到各式各样的数据库如nosql非关系数据库(memcached,redis,mangodb),RDBMS关系数据库(oracle,mysql等),还有一些其它的数据库如hbase,在这些数据库中,又会出现结构化数据,非结构化数据,半结构化数据,下面列出各种数据类型:  结构化数据:   能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号。传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示。   半结构化数据:   所谓半结构化数据,就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。   非结构化数据:   非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。   非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等 关系型数据库: 关系数据库,是建立在关系模型基础上的数据库

MYSQL类型与JAVA类型对应表

坚强是说给别人听的谎言 提交于 2020-04-06 04:21:20
下面我给出MYSQL类型与JAVA类型对应表,希望能够帮到您: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6 SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5 MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4 BIT 1 BIT java.lang.Boolean -7 BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5 FLOAT 4+8 FLOAT java.lang.Float 7 DOUBLE 22 DOUBLE java.lang.Double 8 DECIMAL 11 DECIMAL java.math.BigDecimal 3

php 手动搭建环境

浪尽此生 提交于 2020-04-06 04:07:40
php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败。 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合。 一、PHP语言包下载 首先从官网上下载php5.6 http://windows.php.net/download#php-5.6 选择完整版下载: 二、 Apache服务器下载 首先从官网上下载Apache2.4 http://httpd.apache.org/download.cgi 进入第二个界面,选择第二个选项: 根据电脑的不同,选择相应的位数: 注意有句话: 大体意思是,配置好Apache之后,要运行ApacheMonitor.exe,可能会报缺少dll文件,如果报缺少文件,需要下载这个软件。 下载好Apache2.4之后继续下载MySQL 5.6。 三、MySQL 5.6服务的下载。 我使用的是mysql5.6.17这个版本 官网下载地址: https://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-17.html 可能官网下载会比较慢,也可以直接网上找。 这个文件有两种,一种是安装版(msi结尾的文件),还有一种是免安装版(zip结尾的文件) 两种都可以。 注意:之前数据库里有东西最好备份一下 我使用的是免安装版,自己觉得这个版本产生的错误比较少。下面介绍免安装版的配制方法:

MySQL各种存储引擎对比

六月ゝ 毕业季﹏ 提交于 2020-04-06 04:04:45
欢迎观看 {无双}(wushuang) 的读书笔记,您可以通过订阅 无双的公众号或微博或头条号 持续关注最新的文章。 头条号ID:1656865998770190 微信公众号:落叶飞翔的蜗牛 开源中国博客: https://my.oschina.net/zhouguanya QQ:3190976240 MySQL数据库区别于其他数据库的最重要的一个特点是其插件式的存储引擎。 MySQL各类存储引擎 InnoDB存储引擎 从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。 InnoDB存储引擎支持事务,其设计目标主要是面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。 InnoDB通过使用多版本并发控制MVCC来获取高并发性,并且实现了SQL标准的4种隔离级别,默认为repeatable级别。同时,使用一种称为next-key locking的策略避免幻读现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。 对于表中存储的数据,InnoDB存储引擎采用聚集的方式,每张表的存储都是按照主键的顺序进行存放的。如果没有显示的在定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID作为主键。 MyISAM存储引擎

MySql设置外网访问

烈酒焚心 提交于 2020-04-06 03:51:11
mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所以我想访问无法访问,测试暂停. 解决方法如下: 1,修改表,登录mysql数据库,切换到mysql数据库,使用sql语句查看"select host,user from user ;" mysql -u root -pvmwaremysql>use mysql; mysql>update user set host = '%' where user ='root'; mysql>select host, user from user; mysql> flush privileges; 注意:最后一句很重要,目的是使修改生效.如果没有写,则还是不能进行远程连接. 2,授权用户,你想root使用密码从任何主机连接到mysql服务器 GRANT ALL PRIVILEGES ON *.* TO ' root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION; flush privileges; 如果你想允许用户root从ip为192.168.1.104的主机连接到mysql服务器 GRANT ALL PRIVILEGES ON *.* TO ' myuser'@'192.168.1.104'