使用mysql数据库过程中,经常需要注意的一些问题,在此稍作整理记录,以当个人备录之用。
查看mysql版本的几种方法:
mysql -V;
mysql> status;
mysql --help | grep Distrib;
mysql> select version();
1、创建数据时,字符集问题。
创建数据库除数据库名外,一般还会有Database Charset和Database Collation设置。
Database Charset 顾名思义,是选择数据存储时用的字符集,
Database
Collation则主要是设置是否区分大小写,以gbk字符集为例,它包含gbk_bin和gbk_chinese_ci二个选项。
gbk_bin是二进制存储,区分大小写的。
gbk_chinese_ci不区分大小写。
2、char varchar的区别
char是定长的,varchar是变长的。varchar2应该是varchar的升级,似乎只有ORACLE才有。
char定长存储,速度快,但是存在一定的空间浪费,适用于字段不是很大,对速度要求高的场合。速度快是因为其在物理上是按定长存储的,这样,就可以根据偏移址一次取出固定长度的字符。
varchar变长存储,所以效率不如char。varchar在存储时,在物理上要先存储该字段的实际长度,然后才是内容。这样读取的时候,就要读取两次,一次读它的长度,然后才是内容。所以它的访问速度会比char慢一些。但它可以节省空间。
由于mysql自身的特点,如果一个数据表存在varchar字段,则表中的char字段将自动转为varchar字段。在这种情况下设置的char是没有意义的。所以要想利用char的高效率,要保证该表中不存在varchar字段;否则,应该设为varchar字段。
3、InnoDB和MyISAM比较
InnoDB和MyISAM是在使用MySQL最常用的两个表类型。
MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method
(有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具.
MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,
对于支持事物的InnoDB类型的表,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN
开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。
基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
MyIASM是IASM表的新版本,有如下扩展:
二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。
以下是一些细节和具体实现的差别:
1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB
中不保存表的具体行数,也就是说,执行select count(*) from
table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数
即可。注意的是,当count(*)语句包含
where条件时,两种表的操作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE
FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROM
MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的
InnoDB特性(例如外键)的表不适用。
另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table
set num=1 where name like “%aaa%”
相关推荐
### MySQL 安装常见问题详解 #### 一、卸载MySQL的彻底方法 在尝试重新安装MySQL时,可能会遇到“Could not start the...通过以上步骤,你可以有效解决MySQL安装过程中遇到的多种常见问题,确保MySQL服务的正常运行。
### MySQL常见面试问题详解 #### 1. MySQL简介与特性 ...以上内容涵盖了MySQL面试中常见的几个问题及其解答思路。希望这些知识点能够帮助你更好地理解和掌握MySQL的相关知识,并在面试中表现出色。
MySQL常见问题及解决方法 MySQL 是一种关系型数据库管理系统,它广泛应用于 web 应用程序中。...这些问题和解决方法都是 MySQL 使用过程中常见的问题,希望能够帮助用户解决问题,提高 MySQL 使用效率。
首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个分号(;)而不会导致命令提前结束。存储过程的定义如下: ```sql CREATE PROCEDURE ...
### MySQL数据库教学中常见问题及解决方案 #### 一、引言 随着信息技术的快速发展,数据库技术已成为信息时代不可或缺的一部分。MySQL作为一种开源的关系型数据库管理系统,因其简单易用、高效稳定的特点,在众多...
- **FAQs**:常见问题解答,提供了针对MySQL使用过程中常见问题的答案。 - **Linux/Unix Platform Guide**:Linux/Unix平台指南,介绍了在这些平台上安装和使用MySQL的最佳实践。 - **Windows Platform Guide**:...
主要针对MYsql常见问题的图文解释,包括安装、卸载、到BCB连接和调用BCB等。
在IT领域,尤其是在数据库管理和Web开发中,MySQL存储过程与PHP的结合应用是十分常见且重要的技术点。根据给定的文件信息,我们将深入探讨如何在PHP中调用MySQL存储过程,这一知识点对于理解数据库自动化任务、提高...
MySQL数据库系统中文乱码问题是指在使用MySQL数据库系统时,中文字符在存储、传输和显示过程中出现乱码的问题。这种问题的出现是由于字符集和编码方式的不兼容所致。 在数据库设计和开发中,字符集和编码方式的选择...
在使用MySQL时,有一些常见的注意事项和错误,初学者在使用过程中应多加注意。以下是使用MySQL时需要注意的一些关键知识点。 1. MySQL的配置 配置MySQL主要涉及几个核心参数:服务器的主机名(或IP地址)、端口、...
3. 在应用程序中使用存储过程:了解如何在不同的编程语言环境中(如PHP、Java、Perl、Python和.NET等)调用和利用存储过程,实现跨语言的数据库操作。 4. 优化存储过程程序:关注存储过程的安全性,学习基本和高级...
MySQL数据库在处理大数据量时,分页查询是一种非常常见的优化手段,它可以帮助用户按需加载数据,避免一次性加载大量数据导致的性能问题。本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解...
MySQL中的存储过程是一种用户定义的过程,在其中可以封装一系列SQL语句或控制流语句,以便在需要时调用。存储过程可以在服务器端执行,从而提高性能和安全性。通过存储过程实现分页功能,可以极大地简化前端代码,并...
"参考资料.txt"可能包含了安装过程中或使用MySQL时的一些附加信息,例如配置文件的修改、安全设置建议或者常见问题解答。 在实际使用中,了解SQL语言是必不可少的。SQL(结构化查询语言)用于管理关系数据库,包括...
为了避免此类问题,需要确保主从服务器的时区设置一致,并且在复制配置中使用“ROW”格式的二进制日志,这样可以复制实际值,从而对时区变化保持抵抗性。 4. 配置错误 不当的配置可能会严重影响MySQL的性能和稳定...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。...了解并掌握这些常见问题及其解决方案,将有助于你在MySQL的使用过程中更加得心应手。持续学习和实践,将使你成为更优秀的数据库管理员。
在使用MySQL的过程中,用户可能会遇到各种各样的问题,尤其是在Linux系统中进行管理时。以下是一些常见的MySQL问题及其解决方案: 1. **安装与配置** - 在Linux系统中,MySQL的安装通常通过包管理器(如`apt`或`...
在Java编程中,调用MySQL存储过程是一种常见的数据库交互方式,尤其在处理复杂业务逻辑或大量数据操作时。本文将详细讲解如何通过Java来执行MySQL的存储过程。 首先,了解存储过程的基本概念。存储过程是预编译在...