MySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。其区别体现在事务安全、存储限制、空间使用、内存使用、插入数据的速度和对外键的支持。具体如下:
1、事务安全:
InnoDB支持事务安全,MyISAM和MEMORY两个不支持。
2、存储限制:
InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而定。
3、空间使用:
InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。
4、内存使用:
InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。
5、插入数据的速度:
InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。
6、对外键的支持:
InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键。
三种引擎特点如下:
1、InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL55以后默认使用InnoDB存储引擎。
InnoDB特点:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。
如果需要频繁的更新、删除 *** 作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
2、MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。
MyISAM特点:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用
3、MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。
MEMORY特点:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。
它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
扩展资料:
mysql其余不太常见的存储引擎如下:
1、BDB:源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
2、Merge:将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
3、Archive:非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差
4、Federated:将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
5、Cluster/NDB:高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
6、CSV:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。
7、BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继
关于Ubuntu中的MySQL *** 作
ubuntu下mysql的常用命令,MySQL数据库的基本 *** 作命令
一、mysql服务 *** 作
0、查看数据库版本sql-
1、netstartmysql//启动mysql服务
2、netstopmysql//停止mysql服务
3、mysql
-h主机地址-u用户名-p用户密码//进入mysql数据库
4、quit//退出mysql *** 作
5、mysqladmin-u用户名
-p旧密码password新密码//更改密码
6、grantselecton数据库to用户名@登录主机identifiedby
"密码"//增加新用户
exemple:
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的 *** 作
(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据
库,只能通过MYSQL主机上的web页来访问了。
grantselect,insert,update,deleteonmydbto
test2@localhostidentifiedby"abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant
select,insert,update,deleteonmydbtotest2@localhostidentifiedby"";
1mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中。实现mysql数据库的热备份。
2要想实现双机的热备首先要了解主从数据库服务器的版本的需求。要实现热备mysql的版本都要高于32,还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。
3设置主数据库服务器:
a首先查看主服务器的版本是否是支持热备的版本。然后查看mycnf(类unix)或者myini(windows)中mysqld配置块的配置有没有log-bin(记录数据库更改日志),因为mysql的复制机制是基于日志的复制机制,所以主服务器一定要支持更改日志才行。然后设置要写入日志的数据库或者不要写入日志的数据库。这样只有您感兴趣的数据库的更改才写入到数据库的日志中。
server-id=1 //数据库的id这个应该默认是1就不用改动
log-bin=log_name //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称
binlog-do-db=db_name //记录日志的数据库
binlog-ignore-db=db_name //不记录日志的数据库
以上的如果有多个数据库用","分割开
然后设置同步数据库的用户帐号
mysql> GRANT REPLICATION SLAVE ON
-> TO 'repl'@'%mydomaincom' IDENTIFIED BY 'slavepass';
402以前的版本, 因为不支持REPLICATION 要使用下面的语句来实现这个功能
mysql> GRANT FILE ON
-> TO 'repl'@'%mydomaincom' IDENTIFIED BY 'slavepass';
设置好主服务器的配置文件后重新启动数据库
b锁定现有的数据库并备份现在的数据
锁定数据库
mysql> FLUSH TABLES WITH READ LOCK;
备份数据库有两种办法一种是直接进入到mysql的data目录然后打包你需要备份数据库的文件夹,第二种是使用mysqldump的方式来备份数据库但是要加上"--master-data " 这个参数,建议使用第一种方法来备份数据库
c查看主服务器的状态
mysql> show master status\G;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
记录File 和 Position 项目的值,以后要用的。
d然后把数据库的锁定打开
mysql> UNLOCK TABLES;
4设置从服务器
a首先设置数据库的配置文件
server-id=n //设置数据库id默认主服务器是1可以随便设置但是如果有多台从服务器则不能重复。
master-host=db-mastermycompanycom //主服务器的IP地址或者域名
master-port=3306 //主数据库的端口号
master-user=pertinax //同步数据库的用户
master-password=freitag //同步数据库的密码
master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差
report-host=db-slavemycompanycom //报告错误的服务器
b把从主数据库服务器备份出来的数据库导入到从服务器中
c然后启动从数据库服务器,如果启动的时候没有加上"--skip-slave-start"这个参数则进入到mysql中
mysql> slave stop; //停止slave的服务
d设置主服务器的各种参数
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记住的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记住的参数)
e启动同步数据库的线程
mysql> slave start;
查看数据库的同步情况。
查看主从服务器的状态
mysql> SHOW PROCESSLIST\G //可以查看mysql的进程看看是否有监听的进程
如果日志太大清除日志的步骤如下
1锁定主数据库
mysql> FLUSH TABLES WITH READ LOCK;
2停掉从数据库的slave
mysql> slave stop;
3查看主数据库的日志文件名和日志文件的position
show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| louis-bin001 | 79 | | mysql |
+---------------+----------+--------------+------------------+
4解开主数据库的锁
mysql> unlock tables;
5更新从数据库中主数据库的信息
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记住的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记住的参数)
6启动从数据库的slave
mysql> slave start;
40G的数据不可能存放到一条记录中(因为你不可能申请一块40G的内存来存放这些数据),一定需要分割后再逐条插入,有两个方案:
写一个小工具,将txt分割成若干小的txt
在你的数据库 *** 作程序中,添加一段一边读文件一边向数据库插数据的代码。
之前介绍了一系列的mysql基础知识,今天我们将MySQL常用的功能命令整理出来,供大家参考使用!
1导出整个数据库
mysqldump -u 用户名 -p –default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)
mysqldump -u wcnc -p smgp_apps_wcnc > wcncsql
2导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_userssql
3导出一个数据库结构
mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_dbsql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
4导入数据库
A:常用source 命令
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的sql)
mysql>source wcnc_dbsql
B:使用mysqldump命令
mysqldump -u username -p dbname < filenamesql
C:使用mysql命令
mysql -u username -p -D dbname < filenamesql
启动与退出
1、进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:mysql>
2、退出MySQL:quit或exit
库 *** 作
1、创建数据库
命令:create database <数据库名>
例如:建立一个名为sqlroad的数据库
mysql> create database sqlroad;
2、显示所有的数据库
命令:show databases (注意:最后有个s)
mysql> show databases;
3、删除数据库
命令:drop database <数据库名>
例如:删除名为 sqlroad的数据库
mysql> drop database sqlroad;
4、连接数据库
命令:use <数据库名>
例如:如果sqlroad数据库存在,尝试存取它:
mysql> use sqlroad;
屏幕提示:Database changed
5、查看当前使用的数据库
mysql> select database();
6、当前数据库包含的表信息:
mysql> show tables; (注意:最后有个s)
表 *** 作, *** 作之前应连接某个数据库
1、建表
命令:create table <表名> ( <字段名> <类型> [,<字段名n> <类型n>]);
mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> name char(20) not null,
> sex int(4) not null default ’′,
> degree double(16,2));
2、获取表结构
命令:desc 表名,或者show columns from 表名
mysql>DESCRIBE MyClass
mysql> desc MyClass;
mysql> show columns from MyClass;
3、删除表
命令:drop table <表名>
例如:删除表名为 MyClass 的表
mysql> drop table MyClass;
4、插入数据
命令:insert into <表名> [( <字段名>[,<字段名n> ])] values ( 值 )[, ( 值n )]
例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为45, 编号为 的名为Joan 的成绩为99,编号为 的名为Wang 的成绩为5
mysql> insert into MyClass values(1,’Tom’,9645),(2,’Joan’,8299), (2,’Wang’, 9659);
5、查询表中的数据
11)、查询所有行
命令:select <字段,字段,> from < 表名 > where < 表达式 >
例如:查看表 MyClass 中所有数据
mysql> select from MyClass;
12)、查询前几行数据
例如:查看表 MyClass 中前行数据
mysql> select from MyClass order by id limit 0,2;
或者:
mysql> select from MyClass limit 0,2;
6、删除表中数据
命令:delete from 表名 where 表达式
例如:删除表 MyClass中编号为 的记录
mysql> delete from MyClass where id=1;
7、修改表中数据:
update 表名 set 字段=新值,…where 条件
mysql> update MyClass set name=’Mary’where id=1;
8、在表中增加字段:
1命令:alter table 表名 add字段 类型 其他;
3例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为
5mysql> alter table MyClass add passtest int(4) default ’′
9、更改表名:
命令:rename table 原表名 to 新表名;
例如:在表MyClass名字更改为YouClass
mysql> rename table MyClass to YouClass;
更新字段内容
update 表名 set 字段名 = 新内容
update 表名 set 字段名 = replace(字段名,’旧内容’, 新内容’)
update article set content=concat(‘’,content);
字段类型和数据库 *** 作
1.INT[(M)] 型:正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL] 型:正常大小(双精密)浮点数字类型
3.DATE 日期类型:支持的范围是-01-01到-12-31。MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT类型,最大长度为(2^16-1)个字符。
6.VARCHAR型:变长字符串类型
7导入数据库表
创建sql文件
先产生一个库如auctionc:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。
导入auctionsql文件
c:mysqlbin>mysql -u root -p auction < auctionsql。
通过以上 *** 作,就可以创建了一个数据库auction以及其中的一个表auction。
8.修改数据库
在mysql的表中增加字段:
alter table dbname add column userid int(11) not null primary key auto_increment;
这样,就在表dbname中添加了一个字段userid,类型为int(11)。
9.mysql数据库的授权
mysql>grant select,insert,delete,create,drop
on (或test/user/)
to 用户名@localhost
identified by ‘密码’;
如:新建一个用户帐号以便可以访问数据库,需要进行如下 *** 作:
mysql> grant usage
-> ON test
-> TO testuser@localhost;
Query OK, 0 rows affected (015 sec)
此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些 *** 作:
mysql> GRANT select, insert, delete,update
-> ON test
-> TO testuser@localhost;
Query OK, 0 rows affected (000 sec)
此 *** 作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询 *** 作。现在我们结束 *** 作并退出MySQL客户程序:
mysql> exit
DDL *** 作
1:使用SHOW语句找出在服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
2、创建一个数据库MYSQLDATA
mysql> Create DATABASE MYSQLDATA;
3:选择你所创建的数据库
mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明 *** 作成功!)
4:查看现在的数据库中存在什么表
mysql> SHOW TABLES;
5:创建一个数据库表
mysql> Create TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:显示表的结构:
mysql> DESCRIBE MYTABLE;
7:往表中加入记录
mysql> insert into MYTABLE values (“hyq”,”M”);
8:用文本方式将数据装入数据库表中(例如D:/mysqltxt)
mysql> LOAD DATA LOCAL INFILE “D:/mysqltxt”INTO TABLE MYTABLE;
9:导入sql文件命令(例如D:/mysqlsql)
mysql>use database;
mysql>source d:/mysqlsql;
10:删除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中数据
mysql>update MYTABLE set sex=”f”where name=’hyq’;
以上就是关于Mysql数据库3种存储引擎有什么区别(mysql数据库的存储引擎有哪些)全部的内容,包括:Mysql数据库3种存储引擎有什么区别(mysql数据库的存储引擎有哪些)、关于Ubuntu中的MySQL *** 作(ubuntu启动mysql服务)、MySQL数据库如何实现双机热备的配置成功方案等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)