有个新功能需要处理:定时按月份备份某个表,然后将旧的表重置保存新的数据。
在备份数据时首先用的是:
CREATE TABLE 新表 SELECT * FROM 旧表 ;
这种方式,这是仅备份数据的,不需要结构一致。报错如下:
Statement violates GTID consistency: CREATE TABLE ... SELECT.
这是因为【MySQL5.6及以上的版本,开启了 enforce_gtid_consistency=true 功能导致的,MySQL官方解释说当启用 enforce_gtid_consistency 功能的时候,
MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table … select 和 create temporarytable语句,
以及同时更新事务表和非事务表的SQL语句或事务都不允许执行。】,
所以需要修改新配置获取改用新的方式,当然我是修改新的方式:
CREATE TABLE 新表 LIKE 旧表 ;#先创建一张新表(结构也一样)
INSERT INTO 新表 SELECT * FROM 旧表;#然后进行数据的复制
这样就非常方便了,只是多了一步,速度也是非常快的。
数据表复制常用记录(个人笔记):
返回某表是否存在 SHOW TABLES LIKE 'you_tableName';
mysql中用命令行复制表结构的方法主要有一下几种:
1.只复制表结构到新表
1 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;
或
1 CREATE TABLE 新表 LIKE 旧表 ;
注意上面两种方式,前一种方式是不会复制时的主键类型和自增方式是不会复制过去的,而后一种方式是把旧表的所有字段类型都复制到新表。
2.复制表结构及数据到新表
1 CREATE TABLE 新表 SELECT * FROM 旧表
3.复制旧表的数据到新表(假设两个表结构一样)
1 INSERT INTO 新表 SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)
1 INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
//删除表
DROP TABLE 表名;
判断数据表存在, 则删除:
drop table if exists table_name;
#创建数据库
CREATE DATABASE test1 DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
删除数据库
drop database <数据库名>;