精华内容
下载资源
问答
  • mysql中engine=innodbengine=myisam的区别

    千次阅读 2021-01-28 00:25:53
    转载自:...后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表,不知道这两种类型有什么区别,就去查了查。原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类...

    转载自:http://blog.csdn.net/lingyi_xu/article/details/5393791

    最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意。后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表,不知道这两种类型有什么区别,就去查了查。原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。这 样就可以根据数据表不同的用处是用不同的存储类型。

    另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。

    修改:

    ALTER TABLE tablename ENGINE = MyISAM ;

    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打 开也可以),将大大提高性能。

    ===============================================================

    1. 4.0以上mysqld都支持事务,包括非max版本。3.23的需要max版本mysqld才能支持事务。

    2. 创建表时如果不指定type则默认为myisam,不支持事务。

    可以用 show create table tablename 命令看表的类型。

    2.1 对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:

    执行一个msyql:

    use test;

    drop table if exists tn;

    create table tn (a varchar(10)) type=myisam;

    drop table if exists ty;

    create table ty (a varchar(10)) type=innodb;

    begin;

    insert into tn values('a');

    insert into ty values('a');

    select * from tn;

    select * from ty;

    都能看到一条记录

    执行另一个mysql:

    use test;

    select * from tn;

    select * from ty;

    只有tn能看到一条记录

    然后在另一边

    commit;

    才都能看到记录。

    3. 可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb表比myisam表更安全:

    alter table tablename type=innodb;

    3.1 innodb表不能用repair table命令和myisamchk -r table_name

    但可以用check table,以及mysqlcheck [OPTIONS] database [tables]

    4. 启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(

    只影响到create语句。)

    --default-table-type=InnoDB

    测试命令:

    use test;

    drop table if exists tn;

    create table tn (a varchar(10));

    show create table tn;

    5. 临时改变默认表类型可以用:

    set table_type=InnoDB;

    show variables like 'table_type';

    或:

    c:/mysql/bin/mysqld-max-nt --standalone --default-table-type=InnoDB

    展开全文
  • AUTO_INCREMENT=2021032601100027,它本身就是自增的,设数字是什么意思 这个是自增的,在这里设置数字的意思是想要让这条语句在增长的时候,从2021032601100027开始自增。 utf8已经在my.ini里设置过了,为什么还...

    Mark学习

    CREATE TABLE `pm_xxxxx` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '合约id',
      `name` varchar(64) NOT NULL COMMENT '名称 如BTC-20190125-3500-C',
      .........
      `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_name` (`name`) COMMENT '名称必须是唯一的'
    ) ENGINE=InnoDB AUTO_INCREMENT=2021032601100027 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='xx表'

    ENGINE=InnoDB默认就是这个引擎

    如果不写也是ok的,就会走默认的,在这里写上是因为可以很清楚的看到这个建表语句用了哪些,而且在创建表的时候,写上也是一个很好的习惯;

    AUTO_INCREMENT=2021032601100027,它本身就是自增的,设数字是什么意思

    这个是自增的,在这里设置数字的意思是想要让这条语句在增长的时候,从2021032601100027开始自增。

    utf8已经在my.ini里设置过了,为什么还需要设置一遍

    这个虽然在my.ini设置过了,但设置的是mysql的的语言编码,而这里创建的时候不设置,就会出现乱码问题,二者的作用域是不一样的,在创建表单的时候,这个charset会作用到这个表上,他代表mysql简历数据库数据表时设定字符集为utf-8

    ROW_FORMAT=COMPACT

    今天更改数据引擎的时候,突然出现了

    Table storage engine for '#sql-3e9_132' doesn't have this option

    这样的提示:

    通过搜索,发现了一些端倪,下面是对于Row_Format参数的讲解:

    在MYSQL中, 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表[static/fixed ],即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。

    那么实际开发中,这种表很少,大部分表的字段类型都是有很多种的,那么这种表就叫做:dynamic :动态表 ,优点是节省空间,缺点是读取的时间的开销

    ROW_FORMAT 的值如下:

    DEFAULT

    FIXED

    DYNAMIC

    COMPRESSED

    REDUNDANT

    COMPACT

    修改row_format的参数:

    1

    ALTER TABLE table_name ROW_FORMAT = DEFAULT

    命令执行的结果:

    fixed--->dynamic: 这会导致CHAR变成VARCHAR

    dynamic--->fixed: 这会导致VARCHAR变成CHAR

     

    注意:只有在MYSAM 的数据库引擎才支持这个属性:

    1

    2

    mysql> alter table oem_idlib row_format = fixed;

    ERROR 1478 (HY000): Table storage engine 'InnoDB' does not support the create option 'ROW_TYPE'

    COMMENT='合约表'

    就是代表该表的描述,含义

     

     

    唯一键与主键的区别

    https://www.jianshu.com/p/b09dfc85c235

    Primary key

    • 概念
      主键用于唯一标识表中的每一条数据

    • 主键的特征:
      不能重复, 不能为空

    注意:

    auto_increment的字段必须是主键, 但是主键不一定是auto_increment的, 只要是唯一的就可以 一个表只能有一个主键, 但是主键可以是1个或多个字段组成

    唯一键unique

    作用

    避免添加重复数据, 也就是说如果想保证某一个字段的值永远不重复, 那么就可以将这个字段设置为唯一键

    注意点:

    • 唯一键不是主键, 主键有一个特点是不能重复, 但是唯一键不等于主键
    • 一张表中只能有一个主键, 但是一张表中可以有多个唯一键

     

    展开全文
  • InnoDB,MyISAM 两种类型有什么区别:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持,外键等高级...

    2018年5月22日

    一、

    1/ISAM

    ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。

    ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。

    如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。

    2/InnoDB

    它提供了事务控制能力功能,它确保一组命令全部执行成功,或者当任何一个命令出现错误时所有命令的结果都被回退,可以想像在电子银行中事务控制能力是非常重要的。支持COMMIT、ROLLBACK和其他事务特性。

    最新版本的Mysql已经计划移除对BDB的支持,转而全力发展InnoDB。

    二、

    MyIASM是IASM表的新版本,有如下扩展:

    二进制层次的可移植性。

    NULL列索引。

    对变长行比ISAM表有更少的碎片。

    支持大文件。

    更好的索引压缩。

    更好的键吗统计分布。

    更好和更快的auto_increment处理。

    三、

    以下是一些细节和具体实现的差别:

    1.InnoDB不支持FULLTEXT类型的索引。

    2.InnoDB中不保存表的

    具体行数,也就是说,执行select count(*) from 时,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 set num=1 where name like “�a%”

    任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势.

    MySQL

    Administrator建数据库的时候,表缺省是InnoDB类型。

    InnoDB,MyISAM

    两种类型有什么区别:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。

    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持,外键等高级数据库功能。

    MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。

    修改表的引擎类型:

    ALTER tablename ENGINE = MyISAM ;

    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打

    开也可以),将大大提高性能。

    1.查看表信息,里面包括使用的引擎类型,字符编码,表结构等

    使用这个命令

    mysql> show create table t1;--t1是表名

    2.

    可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb表比myisam表更安全:

    alter table t1 type=innodb;--t1是表名

    3.

    innodb表不能用repair table命令和myisamchk -r table_name

    但可以用check table

    t1,以及mysqlcheck [OPTIONS] database [tables]

    4.

    启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(

    只影响到create语句。)

    --default-table-type=InnoDB

    5.

    临时改变默认表类型可以用:

    set table_type=InnoDB;

    MyISAM

    优点:速度快,磁盘空间占用少;某个库或表的磁盘占用情况既可以通过操作系统查相应的文件(夹)的大小得知,也可以通过SQL语句SHOW TABLE STATUS查得

    缺点:没有数据完整性机制,即不支持事务和外键

    InnoDB

    优点:支持事务和外键,数据完整性机制比较完备;可以用SHOW TABLE STATUS查得某个库或表的磁盘占用

    缺点:速度超慢,磁盘空间占用多;所有库都存于一个(通常情况)或数个文件中,无法通过操作系统了解某个库或表的占用空间

    BDB

    优点:支持事务,不支持外键,由于在事务支持的基础上,外键可以在数据库的客户端(可能是最终客户的服务器端,例如php)间接实现,所以数据完整性仍然是有保障的;

    缺点:速度慢,磁盘占用多;不能通过SHOW TABLE STATUS查询某个库或表的空间占用;用操作系统可了解库相应的文件夹,或表相应的文件的大小,但由于BDB表总是还要产生log文件,而实际的磁盘占用应该把log文件也包含在内,所以用操作系统查得某库或表的大小总是小于实际占用空间。

    展开全文
  • 在这个sql语句中,出现了这样的ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8; 但不太明白最后那三项是干嘛的? ENGINE=InnoDB不是默认就是这个引擎吗? AUTO_INCREMENT=22,它不是自增的吗?为什么还要设...
    CREATE TABLE `hui_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',
      `username` varchar(50) NOT NULL COMMENT '用户名',
      `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
      `email` varchar(50) DEFAULT NULL,
      `phone` varchar(20) DEFAULT NULL,
      `question` varchar(100) DEFAULT NULL COMMENT '找回密码问题',
      `answer` varchar(100) DEFAULT NULL COMMENT '找回密码答案',
      `role` int(4) NOT NULL COMMENT '角色0-管理员,1-普通用户',
      `create_time` datetime NOT NULL COMMENT '创建时间',
      `update_time` datetime NOT NULL COMMENT '最后一次更新时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `user_name_unique` (`username`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
    
    • 在这个sql语句中,出现了这样的ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
      但不太明白最后那三项是干嘛的?
    1. ENGINE=InnoDB不是默认就是这个引擎吗?
    2. AUTO_INCREMENT=22,它不是自增的吗?为什么还要设数字?
    3. utf8不是已经在my.ini里设置过了?

    ENGINE=InnoDB不是默认就是这个引擎吗?

    ——是的,如果不写也是ok,就会走默认的,在这里写上是因为可以很清楚的看到这个建表语句用了哪些,而且在创建表的时候,写上也是一个很好的习惯

    AUTO_INCREMENT=22,它不是自增的吗?为什么还要设数字?

    ——这个是自增的,在这里设置数字的意思是想要让这条语句在增长的时候,从22开始自增。

    utf8不是已经在my.ini里设置过了?

    ——这个虽然在my.ini设置过了,但设置的是mysql的的语言编码,而这里创建的时候不设置,就会出现乱码问题,二者的作用域是不一样的,在创建表单的时候,这个charset会作用到这个表上,他代表mysql建立数据库数据表时设定字符集为utf-8

    展开全文
  • 通过alter table A engine=innodb来重建表,减少表空间 1. 业务场景(即为什么要重建表) 由于前期的存储设计不合理,表里有个字段,用于存储大段字符串,导致存储到磁盘的空间极大,严重影响表相关的增删改查速度。...
  • MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持,本文为大家讲解下mysql中engine=innodbengine=myisam的区别,不懂的朋友可以学习下,希望对大家有所帮助 最开始用MySQL Administrator建数据库的时候,表...
  • ENGINE=INNODB DEFAULT CHARSET=utf8

    千次阅读 2021-02-21 13:43:49
    ENGINE=InnoDB使用baiinnodb引擎 DEFAULT CHARSET=utf8 数据库默du认编码为utf-8 AUTO_INCREMENT=1 自增键的起始序号zhi为1 扩展dao: 1.InnoDB,是MySQL的数据库引擎zhuan之一,为MySQL AB发布binary的标准之shu一...
  • ENGINE=InnoDB DEFAULT CHARSET=utf-8

    千次阅读 2021-03-24 09:43:24
    ENGINE=InnoDB DEFAULT CHARSET=utf-8 ENGINE=InnoDB使用InnoDB引擎,InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。 DEFAULT CHARSET=utf8 数据库默认编码为utf-8 AUTO_INCREMENT=1 自增键的...
  • ENGINE = InnoDB:使用InnoDB引擎(聚集索引) AUTO_INCREMENT=101:自增字段从101开始递增 default charset=utf8:默认编码集为utf-8 collate=utf8_bin:以二进制值比较,也就是区分大小写,collate是核对的意思...
  • ENGINE=InnoDB时在navicat里面编辑表数据,如果字段为default null,会出现输入后被清空的情况(输入不了) 改为ENGINE=MyISAM可解决
  • check the manual that corresponds to your MySQL server version for the right syntax to use near ')engine=innodb auto_increment=7 default charset=utf8' at line 8 执行耗时 : 0 sec 传送时间 : 0 sec 总...
  • check the manual that corresponds to your MySQL server version for the right syntax to use near ‘type=InnoDB‘ at line 1我很纳闷,为什么之前没有这样的问题呢?难道是建表语句语法有误?对比后,似乎不是...
  • ENGINE = InnoDB:使用InnoBD数据库引擎 CHARACTER SET = utf8mb4:permission 表使用的编码是utf8mb4(UTF-8) COLLATE = utf8mb4_general_ci:指定排序的编码规则utf8mb4_general_ci,utf8mb4编码的默认值为utf8...
  • InnoDB:用上面命令会提示 “Table does not support optimize, doing recreate + analyze instead” 意思就是InnoDB不支持optimize。 解决方法有两种,一个是: alter table tb_user engine=‘InnoDB’; 其实就是...
  • innodb,myisam 两种类型有什么区别:myisam类型不支持事务处理等高级处理,而innodb类型支持。 myisam类型的表强调的是性能,其执行数度比innodb类型更快,但是不提供事务支持,而innodb提供事务支持,外键等高级...
  • sql导入报错 check the manual that corresponds to ...) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4’ at line 3 原因:MySQL版本问题 MySQL从5.7版本之后开始支持JSON数据类型 解决方法: 1、升级MySQL版本 2、将sql文
  • innodb查看表的存储引擎mysql> showcreate table tt7;+-------+-------------------------------------------------------------------------------------------------------------------------+|...
  • 测试环境:MySQL 5.7.28社区版CentOS release6.10MySQL Undo参数配置:innodb_undo_tablespaces= 1innodb_default_row_format= dynamic测试1:插入测试测试脚本:## 创建测试表CREATE TABLE `TB001` (`ID` varchar...
  • MYSQL无法启动提示: Default storage engine (InnoDB) is not available的解决方法更新时间:2011年05月01日 23:07:04 作者:自己用的MYSQL都是用MYISAM数据库,还没涉及到需要INNODB,因此打算直接不加载INNODB...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 239,223
精华内容 95,689
关键字:

engine=innodb什么意思