首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
MySQL的存储引擎整理,常见的错误及解决方案
发布时间:2019-12-29 03:01
浏览次数:

 一、基础

图片 1

01.MyISAM

开采新的连串,DB部分应用了SQL Server从二〇一六版初步自带的Json剖判方法。

1、创造数据库

生龙活虎、错误日志深入剖判:

MySQL 5.0 早前的私下认可存款和储蓄引擎。MyISAM 不扶助工作、也不帮忙外键,其优势是拜望的快慢快,对业务完整性无需依然以SELECT、INSERT 为主的选取基本上都足以使用那些引擎来创制表。

用了快七个月,在个人项目,以致公司部分项目上选取了,暂且还未遭遇大的标题,和质量难题。

CREATE DATABASE database-name

(1卡塔尔(قطر‎ 【ELANDROTiguan】1452:不能够在外键的表插入仿效主键未有的多寡

各个MyISAM 在磁盘上囤积成3 个文本,其文件名都和表名相像,但扩展名分别是:

明天在深入分析Json的多级参数遇到了点正常,在那记录一下:

2、删除数据库

 

 .frm(存款和储蓄表定义);

传参内容如下:

 drop database dbname

 

 .MYD(MYData,存款和储蓄数据);

1 declare @json varchar(max)=N'{"Customer":36,"Positions":[{"ID":0,"Quantity":180000,"Files":[180,177,175,172,170,169,167,164,161,162,159,158,153,152]}]}';

3、备份sql server

1452:不能在外键的表插入或更新参照他事他说加以考察主键未有的多寡。由于item_discovery.itemid字段(外键)参考了items.itemid字段(主键),当要在item_discovery表插数据时,假若items表的主键没有对症用药的多少,则无从插入,报1452谬误。那时候能够检查参谋的表的主键是还是不是有主库对应的数据,如果有,则插入参照他事他说加以考查的表相应的数量,再展开复制苏醒SQL线程。

 .MYI (MYIndex,存款和储蓄索引)。

想深入解析出Positions里面包车型大巴Files,可是一贯报错,或许NULL。

 --- 成立 备份数据的 device

 

数据文件和目录文件能够放置在差异的目录,平均遍布IO,获得越来越快的进程。  要钦点索引文件和数据文件的门道,要求在创建表的时候经过DATA DIRECTO酷威Y 和INDEX DIRECTO福睿斯Y 语句钦赐,也正是说分化MyISAM 表的目录文件和数据文件能够停放到分化的渠道下。文件路径需借使相对路线,并且存有访问权限。

查询文书档案,开采这种解析需求制订的字段类型,并准成json才行。

USE master

(2State of Qatar 【E奥迪Q5ROPRADO】1032:删除或更新数据,从库找不到记录

MyISAM 类型的表大概会破坏,原因或然是精彩纷呈的,损坏后的表可能或不可能访问,会唤起必要修补或许访谈后赶回错误的结果。MyISAM 类型的表提供修复的工具,能够用CHECKTABLE 语句来检查MyISAM 表的正常,并用REPAI宝马X5 TABLE 语句修复叁个破坏的MyISAM 表。表损坏可能引致数据库非凡重新起动,需求及早修复并尽量地承认损坏的原委。

解析的SQL Script如下:

EXEC sp_addumpdevice 'disk',’testBack', :mssql7backupMyNwind_1.dat' --- 开始 备份

 

MyISAM 的表又帮衬3 种分裂的贮存格式,分别是:

1 select    ID, Quantity, FileID=f.value
2 from    openjson (@json, '$.Positions')
3 with (
4     ID int, 
5     Quantity int,
6     Files nvarchar(max) '$.Files' as json
7 ) x
8 cross    apply openjson(x.Files, '$') f

BACKUP DATABASE pubs TO testBack

 

 静态(固定长度)表;

*注:此中第6行的写法是一定的:字段类型及背后的。

4、成立新表

 1032:删除或更新从库的数据,从库找不到记录。那时,主库的数量是比从库新的,可以利用从库增加同后生可畏的数码在开启复制复苏SQL线程。

 动态表;

 

 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

 

 压缩表。

例子:

(3卡塔尔 【E凯雷德ROENVISION】1062:从库插入数据,产生唯风华正茂性冲突

内部,静态表是暗中认可的蕴藏格式。静态表中的字段都以非变长字段,那样各样记录都以定位长度的,这种存款和储蓄格局的长处是累积特别连忙,轻松缓存,现身故障轻易苏醒;短处是侵占的长空常常比动态表多。静态表的数额在蕴藏的时候会奉公守法列的小幅度定义补足空格,然则在运用访谈的时候并不会赢得这么些空格,那些空格在回来给接受以前已经去掉。

CREATE TABLE tableA(

 

动态表中富含变长字段,记录不是原则性长度的,这样存款和储蓄的帮助和益处是据有的空中相对超级少,不过往往地翻新删除记录会发生碎片,必要定期试行OPTIMIZE TABLE 语句或myisamchk -r 命令来改善质量,况兼现身故障的时候复苏相对比较艰辛。

    [id] [int] NOT NULL PRIMARY KEY,

 

压缩表由myisampack 工具创设,攻陷超小的磁盘空间。因为种种记录是被单独压缩的,所以独有可怜小的寻访开支。

    [Name][nvarchar](50) NOT NULL,

 1062:从库插入数据,发生唯大器晚成性冲突。那时从库已经有相近主键的数据,假若再插入相像主键值的数量则会报错。能够查看主库的改行数据与从库的要插入数据是或不是相通,如风度翩翩致则跳过错误,苏醒SQL线程,如不风流倜傥致,则以主库为准,将从库的该行记录删除,再张开复制。

 

    [Age] [int] NOT NULL,)

 

 

听他们讲已某个表创立新表:

大器晚成旦当前高可用结构为Master-Master,则以下均在从库的操作都一定要set sql_log_bin=0,幸免从库实行的话语同步到主库(恢复生机时以主库的多少为准)。

02.**InnoDB**

A:create table tab_new like tab_old (使用旧表创制新表SQL server2009不可以卡塔尔国

二、怎么解决难题:

MySQL 5.0始发的暗中同意引擎,InnoDB 存款和储蓄引擎提供了富有提交、回滚和崩溃复苏技艺的业务安全。但是比较MyISAM的囤积引擎,InnoDB 写的管理效能差点相同的时间会占领更加的多的磁盘空间以保留数据和目录。

B:create table tab_new as select col1,col2… from tab_old definition only

1.暂且建设方案(业务运维时期不得体使用数据比较和修补工具)

AUTO_INCREMENT

C: select *into  tableAnew from tableA(复制表结构和表数据。旧表创造新表无主键。SQL server2008Enclave2能够用 亲测卡塔尔

 

InnoDB 表的机动增进列能够手工业插入,但是插入的值要是是空可能0,则实在插入的将是机关增加后的值。

D:select * into table3 from tableA where 1=2;(复制表数据,主键复制然而去卡塔尔(قطر‎

【ERROR】1452:

能够经过“ALTE大切诺基 TABLE *** AUTO_INCREMENT = n;”语句免强安装自动增进列的初识值,暗中认可从1 开端,不过该要挟的默许值是保留在内部存款和储蓄器中的,假设该值在使用以前数据库重新开动,那么那些强迫的私下认可值就能放任,就需求在数据库运行今后再也安装。

E: insert into table3 select * from tableA where id=1;(借使表存在,导入数据卡塔尔国

 

能够应用LAST_INSERT_ID(卡塔尔国查询当前线程最终插入记录使用的值。假诺叁次插入了多条记下,那么重返的是第一条记下使用的全自动增进值。

F: select * into table5 from tableA where 1<>1;(旧表创立新表,只有表构造)

 

对此InnoDB 表,自动拉长列必得是索引。假设是结合索引,也非得是构成索引的率先列,可是对于MyISAM 表,自动拉长列能够是组成索引的别的列,那样插入记录后,自动拉长列是依照组合索引的近日几列实行排序后依次增加的。

5、删除新表

 

比方说,创制四个新的MyISAM 类型的表autoincre_demo,自动增加列d1 作为整合索引的第二列,对该表插入一些记录后,能够开掘自动增加列是信守组合索引的第一列d2 实行排序后依次增加的:

drop table tabname

平淡无奇主从复制遇到

图片 2

6、扩展二个列

 

外键约束

Alter table tabname add column col type

从库:

MySQL 帮忙外键的存放引擎独有InnoDB,在开立外键的时候,供给父表必需有对应的目录,子表在制造外键的时候也会自动创制对应的目录。

注:列扩大后将无法去除。DB第22中学列加上后数据类型也无法改进,唯风华正茂能改造的是加多varchar类型的长度。

 

图片 3

7、增添主键:

 

创立索引的时候,能够钦命在剔除、更新父表时,对子表进行的相应操作,富含REST卡宴ICT、CASCADE、SET NULL 和NO ACTION。此中REST瑞鹰ICT 和NO ACTION 相近,是指限定在子表有关系记录的气象下父表不能够创新;CASCADE 代表父表在更新或许去除时,更新或然去除子表对应记录;SET NULL 则意味着父表在更新或然去除的时候,子表的呼应字段被SET NULL。选拔后几种情势的时候要谨小慎微,恐怕会因为错误的操作招致数据的遗失。子表的外键钦赐是ON DELETE RESTHavalICT ON UPDATE CASCADE格局的,那么在主表删除记录的时候,借使子表有对应记录,则分化意删除,主表在改革记录的时候,假如子表有对应记录,则子表对应更新。

 Alter table tabname add primary key(col)

主库:

当有个别表被别的表创制了外键参照,那么该表的应和索引恐怕主键幸免被剔除。

注脚:删除主键:

翻看主库在一差二错的应和岗位的举办语句,可通过SQL得出此时insert或许update的附和的主键值。

在导入多个表的数量时,借使要求忽视表早前的导入顺序,能够临时关张外键的自己争辩;同样,在进行LOAD DATA 和ALTE奥迪Q5 TABLE 操作的时候,能够通过一时关张外键限制来加速管理的快慢,关闭的授命是“SET FOREIGN_KEY_CHECKS = 0;”,实行到位之后,通过施行“SET FOREIGN_KEY_CHECKS = 1;”语句改回原状态。

 Alter table tabname drop primary key(col)

 

积存方式

8、创造索引:

 

InnoDB 存款和储蓄表和目录有以下三种办法。

create [unique] index idxname on tabname(col….State of Qatar 删除索引:drop index idxname

查询item_discovery的外键约束c_item_discovery_1参谋的表items对应主键值的数据行。

 使用分享表空间存款和储蓄,这种措施创制的表的表布局保留在.frm 文件中,数据和目录保存在innodb_data_home_dir 和innodb_data_file_path 定义的表空间中,能够是多少个公文。

注:索引是不足修正的,想改过必须删除重新建。

 

 使用多表空间存款和储蓄,这种措施开创的表的表布局仍然保留在.frm 文件中,但是各类表的数额和目录单独保存在.ibd 中。假诺是个分区表,则每一个分区对应单独的.ibd文件,文件名是“表名+分区名”,能够在开创分区的时候钦赐各个分区的数据文件的职分,以此来将表的IO 均匀布满在八个磁盘上。

9、创制视图:

 

要使用多表空间的积累情势,必要设置参数innodb_file_per_table,并再一次开动服务后才得以生效,对于新建的表遵照多表空间的法门开创,原来就有的表照旧使用分享表空间存款和储蓄。假若将已部分多表空间格局校勘回共享表空间的措施,则新建表会在共享表空间中创设,但原来就有的多表空间的表如故保存原本的拜候情势。所以多表空间的参数生效后,只对新建的表生效。

create view viewname as select statement

从库:

多表空间的数据文件没有轻重约束,没有需求安装起初大小,也无需安装文件的最大面积、扩大大小等参数。对于利用多表空间特点的表,能够相比较实惠地拓宽单表备份和大张旗鼓操作,可是向来复制.ibd 文件是特别的,因为从没分享表空间的数据词典音信,直接复制的.ibd 文件和.frm 文件苏醒时是不能够被准确识其余,但足以由此以下命令:

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有