澳门美高梅游戏官方网站 > 澳门美高梅游戏 > MySQL去除重复数据,GTID复制错误管理之跳过不当

原标题:MySQL去除重复数据,GTID复制错误管理之跳过不当

浏览次数:50 时间:2019-10-06

innodb为贯彻MVCC所使用的里边快速照相,PRADOENVISION(REPEATABLE READ)隔断等第下在第二回询问时创制read view,RC(READ COMMITTED)隔绝等级下会在每便查询时创设read view
以下测验在奇骏Wrangler隔断等级下,数据库版本为5.7.20
1.

一、sql server日期时间函数
澳门美高梅游戏 1Sql Server中的日期与时间函数 
澳门美高梅游戏 21.  当前系统日期、时间 
澳门美高梅游戏 3    select getdate()  
澳门美高梅游戏 4
澳门美高梅游戏 52. dateadd  在向内定日期加上一段时间的根底上,重临新的 datetime 值
澳门美高梅游戏 6   举个例子:向日期加上2天 
澳门美高梅游戏 7   select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 
澳门美高梅游戏 8
澳门美高梅游戏 93. datediff 再次回到跨八个钦命日期的日子和时间界限数。
澳门美高梅游戏 10   select datediff(day,'2004-09-01','2004-09-18')   --返回:17
澳门美高梅游戏 11
澳门美高梅游戏 124. datepart 再次回到代表钦点日期的钦定日期部分的整数。
澳门美高梅游戏 13  select DATEPART(month, '2004-10-15')  --返回 10
澳门美高梅游戏 14
澳门美高梅游戏 155. datename 重回代表钦定日期的钦定日期部分的字符串
澳门美高梅游戏 16   select datename(weekday, '2004-10-15')  --返回:星期五
澳门美高梅游戏 17
澳门美高梅游戏 186. day(), month(),year() --能够与datepart对照一下
澳门美高梅游戏 19
澳门美高梅游戏 20select 当前日子=convert(varchar(10),getdate(),120) 
澳门美高梅游戏 21,当前时光=convert(varchar(8),getdate(),114) 
澳门美高梅游戏 22
澳门美高梅游戏 23select datename(dw,'2004-10-15') 
澳门美高梅游戏 24
澳门美高梅游戏 25select 二〇二〇年第多少周=datename(week,'二〇〇一-10-15')
澳门美高梅游戏 26      ,明天是周几=datename(weekday,'二零零二-10-15')

作者的MYSQL学习心得(九) 索引

自家的MYSQL学习心得(一) 不难语法

自己的MYSQL学习心得(二) 数据类型宽度

自个儿的MYSQL学习心得(三) 查看字段长度

自身的MYSQL学习心得(四) 数据类型

本身的MYSQL学习心得(五) 运算符

自个儿的MYSQL学习心得(六) 函数

自个儿的MYSQL学习心得(七) 查询

自己的MYSQL学习心得(八) 插入 更新 删除

自家的MYSQL学习心得(十) 自定义存款和储蓄进度和函数

自己的MYSQL学习心得(十一) 视图

自个儿的MYSQL学习心得(十二) 触发器

自个儿的MYSQL学习心得(十三) 权限管理

自己的MYSQL学习心得(十四) 备份和东山复起

本身的MYSQL学习心得(十五) 日志

自个儿的MYSQL学习心得(十六) 优化

自个儿的MYSQL学习心得(十七) 复制

 

这一篇《作者的MYSQL学习心得(九)》将会讲课MYSQL的目录

 

目录是在仓库储存引擎中贯彻的,由此每个存款和储蓄引擎的目录都不确定完全同样,何况每一种存款和储蓄引擎也不必然协助全数索引类型。

基于存款和储蓄引擎定义每种表的最大索引数和最大索引长度。全数存款和储蓄引擎帮忙种种表最少十五个目录,总索引长度最少为256字节。

好多囤积引擎有越来越高的限制。MYSQL中索引的仓库储存类型有二种:BTREE和HASH,具体和表的存款和储蓄引擎相关;

MYISAM和InnoDB存款和储蓄引擎只协助BTREE索引;MEMO福特ExplorerY和HEAP存储引擎能够支撑HASH和BTREE索引

 

 

SQL学习指南

mysql将引稳当做表的可选部件,所以mysql5.1在此以前只好选取alter table add xx来增多索引,mysql5.1分包5.1从此将create index命令映射到alter table add index

 

目录的长处:

1、通过创办独一索引,保障数据库表每行数据的独一性

2、大大加快数据查询速度

3、在应用分组和排序进行多少查询时,能够显然减弱查询中分组和排序的岁月

 

目录的症结:

1、维护索引需求消耗数据库财富

2、索引供给占用磁盘空间,索引文件大概比数据文件更加快达到最大文件尺寸

3、当对表的多寡实行增加和删除改的时候,因为要维护索引,速度会遭受震慑

 

澳门美高梅游戏,目录的归类

1、普通索引和独一索引

主键索引是一种新鲜的独一索引,差异意有空值

2、单列索引和复合索引

单列索引只含有单个列

复合索引指七个字段上创造的目录,唯有在询问条件中选用了创办索引时的第一个字段,索引才会被利用。使用复合索引时听从最左前缀会集

3、全文索引

全文索引类型为FULLTEXT,在定义索引的列上匡助值的全文字笔迹查证索,允许在这个索引列中插入重复值和空值。全文索引能够在

CHACRUISER、VARCHA大切诺基、TEXT类型列上成立。MYSQL唯有MYISAM存款和储蓄引擎帮忙全文索引

4、空间引得

空中引得是对空间数据类型的字段建设构造的目录,MYSQL中的空间数据类型有4种,

分别是GEOMETRY、POINT、LINESTRING、POLYGON。

MYSQL使用SPATIAL关键字打开扩大,使得能够用于创建正规索引类型的语法创立空间引得。成立空间引得的列,必需

将其宣称为NOT NULL,空间引得只好在存储引擎为MYISAM的表中创立

 

如上的目录在SQLSERVER里都扶助

 

CREATE TABLE table_name[col_name data type]
[unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]

unique|fulltext|spatial为可选参数,分别代表独一索引、全文索引和空中引得;

index和key为同义词,两个效率一样,用来钦点创设索引

col_name为必要创制索引的字段列,该列必得从数据表中该定义的多个列中精选;

index_name钦点索引的称呼,为可选参数,尽管不钦命,MYSQL暗中认可col_name为索引值;

length为可选参数,表示索引的尺寸,独有字符串类型的字段技术钦点索引长度;

asc或desc钦定升序或降序的索引值存款和储蓄


普通索引

CREATE TABLE book (
  bookid INT NOT NULL,
  bookname VARCHAR (255) NOT NULL,
  AUTHORS VARCHAR (255) NOT NULL,
  info VARCHAR (255) NULL,
  COMMENT VARCHAR (255) NULL,
  year_publication YEAR NOT NULL,
  INDEX (year_publication)
) ;

应用SHOW CREATE TABLE查看表结构

CREATE TABLE `book` (
  `bookid` INT(11) NOT NULL,
  `bookname` VARCHAR(255) NOT NULL,
  `authors` VARCHAR(255) NOT NULL,
  `info` VARCHAR(255) DEFAULT NULL,
  `comment` VARCHAR(255) DEFAULT NULL,
  `year_publication` YEAR(4) NOT NULL,
  KEY `year_publication` (`year_publication`)
) ENGINE=MYISAM DEFAULT CHARSET=latin1

能够窥见,book表的year_publication字段成功创设了索引其索引名字为year_publication

假如不加索引名,那么MySQL会以索引的率先个字段的名字来定名

CREATE TABLE customer5(id INT UNSIGNED NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
dd DATETIME NOT NULL ,
KEY (NAME,dd),
CONSTRAINT idx_pri PRIMARY KEY (id))

澳门美高梅游戏 27

 而一旦一个表下有五个目录的第二个字段都以一致的,那么索引名会在字段名后加序数

CREATE TABLE customer6(id INT UNSIGNED NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
dd DATETIME NOT NULL ,
KEY (NAME,dd),
KEY (NAME),
CONSTRAINT idx_pri PRIMARY KEY (id))

澳门美高梅游戏 28

 

 

大家向表插入一条数据,然后使用EXPLAIN语句查看索引是不是有在利用

INSERT INTO BOOK VALUES(12,'NIHAO','NIHAO','文学','henhao',1990)


EXPLAIN SELECT * FROM book WHERE year_publication=1990 

 

因为言语相比较轻易,系统剖断有希望会用到目录大概全文扫描

澳门美高梅游戏 29

EXPLAIN语句输出结果的依次行的解释如下:

select_type: 表示查询中各个select子句的门类(不难 OPRADO复杂)

type:代表MySQL在表中找到所需行的主意,又称“访谈类型”,常见类型如下:(从上至下,效果依次变好)

possible_keys :提出MySQL能选拔哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不自然被询问利用

key: 突显MySQL在查询中实际运用的目录,若未有选用索引,呈现为NULL

key_len :表示索引中动用的字节数,可因此该列总计查询中选拔的目录的尺寸

ref :表示上述表的连日相配原则,即如何列或常量被用来查找索引列上的值

rows :表示MySQL依照表总结消息及索引选取情况,预计的找到所需的记录所须求读取的行数

Extra :包涵不适合在其余列中展现但那一个珍视的额外消息 如using where,using index

 

参考:MySQL学习体系2--MySQL实行安插分析EXPLAIN


独一索引

独一索引列的值必需独一,但允许有空值。要是是复合索引则列值的组合必需独一

建表

CREATE TABLE t1
(
 id INT NOT NULL,
 NAME CHAR(30) NOT NULL,
 UNIQUE INDEX UniqIdx(id)

SHOW CREATE TABLE t1 查看表结构

SHOW CREATE TABLE t1 

 CREATE TABLE `t1` (                                                                                                                        
          `id` int(11) NOT NULL,                                                                                                                   
          `name` char(30) NOT NULL,                                                                                                                
          UNIQUE KEY `UniqIdx` (`id`)                                                                                                              
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8     

能够看看id字段春日经成功创设了一个名字为UniqIdx的举世无双索引

 

成立复合索引

CREATE TABLE t3 (
  id INT NOT NULL,
  NAME CHAR(30) NOT NULL,
  age INT NOT NULL,
  info VARCHAR (255),
  INDEX MultiIdx (id, NAME, age (100))
)

SHOW CREATE TABLE t3

CREATE TABLE `t3` (                                                                                                                                                                                             
          `id` int(11) NOT NULL,                                                                                                                                                                                        
          `NAME` char(30) NOT NULL,                                                                                                                                                                                     
          `age` int(11) NOT NULL,                                                                                                                                                                                       
          `info` varchar(255) DEFAULT NULL,                                                                                                                                                                             
          KEY `MultiIdx` (`id`,`NAME`,`age`)                                                                                                                                                                            
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8        

由结果能够看来id,name,age字段上曾经成功创立了一个名叫MultiIdx的复合索引

 

咱俩向表插入两条数据

INSERT INTO t3(id ,NAME,age,info) VALUES(1,'小明',12,'nihao'),(2,'小芳',16,'nihao')

使用EXPLAIN语句查看索引使用状态

EXPLAIN SELECT * FROM t3 WHERE id=1 AND NAME='小芳'

可以看看  possible_keyskey 为MultiIdx注明使用了复合索引

    id  select_type  table   type    possible_keys  key       key_len  ref            rows  Extra      
------  -----------  ------  ------  -------------  --------  -------  -----------  ------  -----------
     1  SIMPLE       t3      ref     MultiIdx       MultiIdx  94       const,const       1  Using where

若果大家只钦定name而不钦点id

EXPLAIN SELECT * FROM t3 WHERE  NAME='小芳'

    id  select_type  table   type    possible_keys  key     key_len  ref       rows  Extra      
------  -----------  ------  ------  -------------  ------  -------  ------  ------  -----------
     1  SIMPLE       t3      ALL     (NULL)         (NULL)  (NULL)   (NULL)       2  Using where

结果跟SQLSEQX56VERubicon一样,也是不走索引, possible_keyskey都为NULL

 


全文索引

FULLTEXT索引能够用于全文字笔迹核实索。独有MYISAM存款和储蓄引擎帮衬FULLTEXT索引,何况只辅助CHARAV4、VARCHA福特Explorer和TEXT类型

全文索引不补助过滤索引。

CREATE TABLE t4 (
  id INT NOT NULL,
  NAME CHAR(30) NOT NULL,
  age INT NOT NULL,
  info VARCHAR (255),
  FULLTEXT INDEX FulltxtIdx (info)
) ENGINE = MYISAM 

由于MYSQL5.6默许存款和储蓄引擎为InnoDB,这里创建表的时候要修改表的囤积引擎为MYISAM,不然创制索引会出错

SHOW CREATE TABLE t4 

Table   Create Table                                                                                                                                                                                                    
------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
t4      CREATE TABLE `t4` (                                                                                                                                                                                             
          `id` int(11) NOT NULL,                                                                                                                                                                                        
          `name` char(30) NOT NULL,                                                                                                                                                                                     
          `age` int(11) NOT NULL,                                                                                                                                                                                       
          `info` varchar(255) DEFAULT NULL,                                                                                                                                                                             
          FULLTEXT KEY `FulltxtIdx` (`info`)                                                                                                                                                                            
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8   

由结果可以见见,info字段仲春经成功组建名叫FulltxtIdx的FULLTEXT索引。

全文索引特别适合大型数据集结

 

在SQLSEQashqaiVE大切诺基里使用全文索引比MYSQL还要复杂

详尽能够参照上边两篇小说:

关于SQLSEPAJEROVE路虎极光的全文目录跟全文索引的区分

[SQLSERVER]SQL中的全文字笔迹查验索(转邹建)


空中引得

空中引得必需在 MYISAM类型的表中创立,何况空间类型的字段必需为非空

建表t5

CREATE TABLE t5
(g GEOMETRY NOT NULL ,SPATIAL INDEX spatIdx(g))ENGINE=MYISAM

SHOW CREATE TABLE t5

TABLE   CREATE TABLE                                                                                                   
------  ---------------------------------------------------------------------------------------------------------------
t5      CREATE TABLE `t5` (                                                                                            
          `g` GEOMETRY NOT NULL,                                                                                       
          SPATIAL KEY `spatIdx` (`g`)                                                                                  
        ) ENGINE=MYISAM DEFAULT CHARSET=utf8    

能够见见,t5表的g字段上创办了名称叫spatIdx的上空引得。注意创造时钦点空间类型字段值的非空约束

再者表的囤积引擎为MYISAM


一度存在的表上创立索引

在早已存在的表中成立索引,能够运用ALTEENVISION TABLE或许CREATE INDEX语句

 

1、使用ALTER TABLE语句成立索引,语法如下

ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL][INDEX|KEY]

[index_name](col_name[length],...)[ASC|DESC]

 

与创立表时创设索引的语法区别,在此地运用了ALTER TABLE和ADD关键字,ADD表示向表中加多索引

在t1表中的name字段上树立NameIdx普通索引

ALTER TABLE t1 ADD INDEX NameIdx(NAME)

增多索引之后,使用SHOW INDEX语句查看钦定表中创设的目录

SHOW INDEX FROM t1

TABLE   Non_unique  Key_name  Seq_in_index  Column_name  COLLATION  Cardinality  Sub_part  Packed  NULL    Index_type  COMMENT  Index_comment
------  ----------  --------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------  -------------
t1               0  UniqIdx              1  id           A                    0    (NULL)  (NULL)          BTREE                             
t1               1  NameIdx              1  NAME         A               (NULL)    (NULL)  (NULL)          BTREE         

各种参数的意义

1、TABLE:要成立索引的表

2、Non_unique:索引非唯一,1表示是非独一索引,0代表独一索引

3、Key_MySQL去除重复数据,GTID复制错误管理之跳过不当。name:索引的称谓

4、Seq_in_index:该字段在目录中的地方,单列索引该值为1,复合索引为每种字段在目录定义中的顺序

5、Column_name:定义索引的列字段

6、Sub_part:索引的尺寸

7、NULL:该字段是或不是能为空值

8、Index_type:索引类型

 

能够看来,t1表已经存在了四个独一索引

 

在t3表的age和info字段上创造复合索引

ALTER TABLE t3 ADD INDEX t3AgeAndInfo(age,info)

动用SHOW INDEX查看表中的目录

SHOW INDEX FROM t3

Table   Non_unique  Key_name      Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment  Index_comment
------  ----------  ------------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------  -------------
t3               1  MultiIdx                 1  id           A               (NULL)    (NULL)  (NULL)          BTREE                             
t3               1  MultiIdx                 2  NAME         A               (NULL)    (NULL)  (NULL)          BTREE                             
t3               1  MultiIdx                 3  age          A               (NULL)    (NULL)  (NULL)          BTREE                             
t3               1  t3AgeAndInfo             1  age          A               (NULL)    (NULL)  (NULL)          BTREE                             
t3               1  t3AgeAndInfo             2  info         A               (NULL)    (NULL)  (NULL)  YES     BTREE             

能够看看表中的字段的顺序,第二个岗位是age,第三个义务是info,info字段是可空字段

澳门美高梅游戏 30

 澳门美高梅游戏 31

 

创设表t6,在t6表上创办全文索引

CREATE TABLE t6
(
  id INT NOT NULL,
  info CHAR(255)
)ENGINE= MYISAM;

注意修改ENGINE参数为MYISAM,MYSQL暗许引擎InnoDB不帮助全文索引

选用ALTEENCORE TABLE语句在info字段上创办全文索引

ALTER TABLE t6 ADD FULLTEXT INDEX infoFTIdx(info)

动用SHOW INDEX查看索引情形

SHOW INDEX FROM t6

Table   Non_unique  Key_name   Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment  Index_comment
------  ----------  ---------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------  -------------
t6               1  infoFTIdx             1  info         (NULL)          (NULL)    (NULL)  (NULL)  YES     FULLTEXT                          

 

始建表t7,并在空间数据类型字段g上开创名字为spatIdx的上空引得

CREATE TABLE t7(g GEOMETRY NOT NULL)ENGINE=MYISAM;

采纳ALTEEvoque TABLE在表t7的g字段创设空间引得

ALTER TABLE t7 ADD SPATIAL INDEX spatIdx(g)

动用SHOW INDEX查看索引情况

SHOW INDEX FROM t7

Table   Non_unique  Key_name  Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment  Index_comment
------  ----------  --------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------  -------------
t7               1  spatIdx              1  g            A               (NULL)        32  (NULL)          SPATIAL                           

 

 

2、使用CREATE INDEX语句成立索引,语法如下

CREATE [UNIQUE|FULLTEXT|SPATIAL]  INDEX index_name

ON table_name(col_name[length],...)  [ASC|DESC]

 

能够看来CREATE INDEX语句和ALTEEscortINDEX语句的主旨语法同样,只是关键字不一致。

咱俩建构贰个book表

CREATE TABLE book (
  bookid INT NOT NULL,
  bookname VARCHAR (255) NOT NULL,
  AUTHORS VARCHAR (255) NOT NULL,
  info VARCHAR (255) NULL,
  COMMENT VARCHAR (255) NULL,
  year_publication YEAR NOT NULL
)

 

创立日常索引

CREATE INDEX BkNameIdx ON book(bookname)

 

树立唯一索引

CREATE UNIQUE INDEX UniqidIdx ON book(bookId)

 

创设复合索引

CREATE INDEX BkAuAndInfoIdx ON book(AUTHORS(20),info(50))

 

树立全文索引,大家drop掉t6表,重新确立t6表

DROP TABLE IF EXISTS t6

CREATE TABLE t6
(
  id INT NOT NULL,
  info CHAR(255)
)ENGINE= MYISAM;

CREATE FULLTEXT INDEX infoFTIdx ON t6(info);

 

创造空间引得,我们drop掉t7表,重新树立t7表

DROP TABLE IF EXISTS t7

CREATE TABLE t7(g GEOMETRY NOT NULL)ENGINE=MYISAM;

CREATE SPATIAL INDEX spatIdx  ON t7(g)

除去索引

MYSQL中动用ALTE福特Explorer TABLE恐怕DROP INDEX语句来删除索引,两个实现均等效果

1、使用ALTERAV4 TABLE删除索引

 语法

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE book DROP INDEX UniqidIdx

SHOW CREATE TABLE book

Table   Create Table                                                                                                                                                                                                                                                                                                                                                      
------  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
book    CREATE TABLE `book` (                                                                                                                                                                                                                                                                                                                                             
          `bookid` int(11) NOT NULL,                                                                                                                                                                                                                                                                                                                                      
          `bookname` varchar(255) NOT NULL,                                                                                                                                                                                                                                                                                                                               
          `authors` varchar(255) NOT NULL,                                                                                                                                                                                                                                                                                                                                
          `info` varchar(255) DEFAULT NULL,                                                                                                                                                                                                                                                                                                                               
          `comment` varchar(255) DEFAULT NULL,                                                                                                                                                                                                                                                                                                                            
          `year_publication` year(4) NOT NULL,                                                                                                                                                                                                                                                                                                                            
          KEY `BkNameIdx` (`bookname`),                                                                                                                                                                                                                                                                                                                                   
          KEY `BkAuAndInfoIdx` (`authors`(20),`info`(50))                                                                                                                                                                                                                                                                                                                 
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8       

能够观望,book表中早就未有名称为UniqidIdx的有一无二索引,删除索引成功

 

注意:AUTO_INCREMENT约束字段的独一索引不可能被删除!!

 

2、使用DROP INDEX 语句删除索引

DROP INDEX index_name ON table_name

DROP INDEX BkAuAndInfoIdx ON book

SHOW CREATE TABLE book;

Table   Create Table                                                                                                                                                                                                                                                                                                   
------  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
book    CREATE TABLE `book` (                                                                                                                                                                                                                                                                                          
          `bookid` int(11) NOT NULL,                                                                                                                                                                                                                                                                                   
          `bookname` varchar(255) NOT NULL,                                                                                                                                                                                                                                                                            
          `authors` varchar(255) NOT NULL,                                                                                                                                                                                                                                                                             
          `info` varchar(255) DEFAULT NULL,                                                                                                                                                                                                                                                                            
          `comment` varchar(255) DEFAULT NULL,                                                                                                                                                                                                                                                                         
          `year_publication` year(4) NOT NULL,                                                                                                                                                                                                                                                                         
          KEY `BkNameIdx` (`bookname`)                                                                                                                                                                                                                                                                                 
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8  

能够看出,复合索引BkAuAndInfoIdx已经被剔除了

 

唤醒:删除表中的某列时,假使要刨除的列为索引的组成都部队分,则该列也会从索引中剔除。

倘诺索引中的全部列都被剔除,则整个索引将被去除!!


总结

这一节介绍了MYSQL中的索引,索引语句的创制和删除和一些简便用法,希望对大家有赞助

 

如有不对的地点,接待大家拍砖o(∩_∩)o 

本文版权归作者全数,未经作者同意不得转发。

后天超越三个亟需对表举行去重的主题材料,数据量大约千万左右,第一增选便是按Oracle的思绪上:

某Slave报错新闻:

session A session B
start transaction;  
  start transaction;

select * from tab1;
Empty set

 
  insert into tab1 values (1,"1");

select * from tab1;
Empty set

 
  commit;

select * from tab1;
Empty set

 

commit;

 

select * from tab1;
+------+------+
| col1 | col2 |
+------+------+
| 1 | 1 |
+------+------+

 

 

 

 

二、日期格式转变

delete from table t1 where id < (select max(id) from table t2 where t1.c1=t2.c1);  --将c1值相同的记录进行去重,只留下id最大的,写成id>min(id)效果相同。
mysql> show slave statusG;

 

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM 
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06 
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06 
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06 
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM 
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06 
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16 
Select CONVERT(varchar(100), GETDATE(), 12): 060516 
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937 
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157 
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM 
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47 
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250 
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM 
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006 
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16 
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006 
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006 
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006 
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006 
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006 
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49 
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM 
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006 
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16 
Select CONVERT(varchar(100), GETDATE(), 112): 20060516 
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513 
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547 
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49 
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700 
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827 
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM

以上相关子查询的SQL在c1上存在索引时作用不算低,可是很缺憾MySQL未有这种写法,类似的代表写法在MySQL中功效也低的令人切齿,如中间表等手法。

澳门美高梅游戏 32澳门美高梅游戏 33

 

函数 参数/功能
GetDate( ) 返回系统目前的日期与时间
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称

刚刚在前些时日整治一些shell脚本时管理过mysql导入时出错继续实行的难题,由此测验后使用了之类办法:

mysql> show slave statusG;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.206.140
                  Master_User: u_repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 499
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1007
                   Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '9e2c7c0f-0908-11e7-8230-000c29ab7544:1' at master log mysql-bin.000001, end_log_pos 313. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 1513
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1007
               Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '9e2c7c0f-0908-11e7-8230-000c29ab7544:1' at master log mysql-bin.000001, end_log_pos 313. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 140
                  Master_UUID: 9e2c7c0f-0908-11e7-8230-000c29ab7544
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 170316 04:25:29
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 9e2c7c0f-0908-11e7-8230-000c29ab7544:1-2
            Executed_Gtid_Set: 347cbac6-0906-11e7-b957-000c2981a46e:1,
c59a2526-08fd-11e7-a5c7-000c296f2953:1-2
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

 

参数 interval的设定值如下:

1.将表数据导出:

View Code

 

缩 写(Sql Server) Access 和 ASP 说明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq 季 1 ~ 4
Month Mm 月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd 日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh 时0 ~ 23
Minute Mi 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999
mysqldump -uroot -p --skip-extended-insert -t DBNAME TABLE>TABLE.sql

然后记一下去重后的记录数:
select count(*) from (select 1 from TABLE group by c1) a;

GTID的复制对于错误新闻的可读性不是很好,但能够由此错误代码(1007)从监察和控制表replication_applier_status_by_worker查看:

 

2.truncate表,然后创设独一索引

mysql> select * from performance_schema.replication_applier_status_by_worker where LAST_ERROR_NUMBER=1007G

 

truncate table TABLE;
create unique index IX_c1 on TABLE(c1);

澳门美高梅游戏 34澳门美高梅游戏 35

 

3.最终导入数据,要求加上-f选项。

mysql> select * from performance_schema.replication_applier_status_by_worker where LAST_ERROR_NUMBER=1007G
*************************** 1. row ***************************
         CHANNEL_NAME: 
            WORKER_ID: 2
            THREAD_ID: NULL
        SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: 9e2c7c0f-0908-11e7-8230-000c29ab7544:1
    LAST_ERROR_NUMBER: 1007
   LAST_ERROR_MESSAGE: Worker 1 failed executing transaction '9e2c7c0f-0908-11e7-8230-000c29ab7544:1' at master log mysql-bin.000001, end_log_pos 313; Error 'Can't create database 'mydb'; database exists' on query. Default database: 'mydb'. Query: 'create database mydb'
 LAST_ERROR_TIMESTAMP: 2017-03-16 04:25:29
1 row in set (0.00 sec)

 

mysql -uroot -p -f DBNAME<TABLE.sql

View Code

 

-f的成效是:Continue even if an SQL error occurs.

使用GTID跳过荒唐的点子:找到错误的GTID跳过(通过Exec_Master_Log_Pos去binlog里找GTID,或则通过地点监察和控制表replication_applier_status_by_worker找到GTID,也能够通过Executed_Gtid_Set算出GTID),这里运用监督表来找到错误的GTID。找到GTID之后,跳过错误的步调

 

那样导入时会报相当多的失实,正是因为唯一约束的留存,你只必要最终检查下表的记录数时候与第一步中查到的数额一致就足以了。

mysql> stop slave; #停止同步
Query OK, 0 rows affected (0.02 sec)

mysql> set @@session.gtid_next='9e2c7c0f-0908-11e7-8230-000c29ab7544:1';  #跳过错误的GTID
Query OK, 0 rows affected (0.00 sec)

mysql> begin; #提交一个空事务,因为设置gtid_next后,gtid的生命周期就开始了,必须通过显性的提交一个事务来结束,否则报错:ERROR 1790 (HY000): @@SESSION.GTID_NEXT cannot be changed by a client that owns a
Query OK, 0 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

mysql> set @@session.gtid_next=automatic; #设置回自动模式  
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

 

这种去重格局功能相比高,破绽大概是失误时荧屏上一批的‘Duplicate entry’报错会淹没其余的报错。

再也确定slave同步情形

本文由澳门美高梅游戏官方网站发布于澳门美高梅游戏,转载请注明出处:MySQL去除重复数据,GTID复制错误管理之跳过不当

关键词:

上一篇:没有了

下一篇:内部存储器初探,从内定字符串中赢得数字的主