简介:微服务springboot服务从0开始搭建
5分钟可以做什么?springboot服务搭建
启动项目
简介:关系对象映射讲解
思考题:Mysql与springboot整合的流程步骤是怎样的?
对象关系映射,是一种规范,调节目前面向对象的程序设计与主流的关系型数据库之间发展不同步的问题,
关系到对象的映射
让编程时可以全身心的用面向对象的设计思想去编程,用对象映射关系数据表,在持久化时,可以直接操作对象进行持久化

表user user_id user_name==》User.java Long userId;String userName
简介: Mysql+springboot项目整合实战
什么是jdbc?
什么是jdbcTemplate?
环境准备
create database xdclass_mysql;
create table user (id bigint auto_increment comment '自增id',name varchar(64) default '' not null comment '用户名称', primary key (id)) default charset=utf8mb4;
grant all privileges on xdclass_mysql.* to 'xdclass'@'%' identified by 'xdclass';
flush privileges;
#通用数据源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/xdclass_mysql?charset=utf8mb4&useSSL=false
spring.datasource.username=xdclass
spring.datasource.password=xdclass
# Hikari 数据源专用配置
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
引入web项目依赖和jdbc对应jar包的maven依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>6.0.6version>
dependency>
简介: Mysql+springboot项目整合实战
jdbcTemplate增删改查实战
返回结果封装
public class RestItemResult<T> {
private String result;
private String message;
private T item;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
}
简介:HTTP应用增删改查协议剖析
HTTP协议简介

当用户在浏览器中输入一个指向特定网页的 URL 地址时,浏览器就会生成一个 HTTP 请求,建立与远程 HTTP 服务器的 TCP 连接,然后把 HTTP 请求发送给远程 HTTP 服务器,HTTP 服务器再返回包含相应网页数据的 HTTP 响应,最后浏览器把这个网页显示出来。当浏览器与服务器之间的数据交换完毕,就会断开连接。
JAVA socket套接字创建监听请求实战
查看端口占用 mac/linux:lsof -i:8080, windows: netstat -aon|findstr “8080”
http 0.9==>http1.0==>http1.1==>http2==>http3(后续发展趋势是quic)

简介:JdbcTemplate的痛点问题与Mybatis工具的引入
思考jdbcTemplate的缺点
解决方案
现成工具MyBatis
工作原理

简介:Mybatis+SpringBoot整合方式
引入pom依赖
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.2version>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.4version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatypegroupId>
<artifactId>jackson-datatype-jodaartifactId>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.modulegroupId>
<artifactId>jackson-module-parameter-namesartifactId>
dependency>
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelper-spring-boot-starterartifactId>
<version>1.2.5version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.1.9version>
dependency>
使用idea工具将properties转成yml
yml配置
spring:
datasource:
name: mysql_test
type: com.alibaba.druid.pool.DruidDataSource
#druid相关配置
druid:
#监控统计拦截的filters
filters: stat
driver-class-name: com.mysql.jdbc.Driver
#基本属性
url: jdbc:mysql://localhost:3306/xdclass_mysql?charset=utf8mb4&useSSL=false
username: xdclass
password: xdclass
#配置初始化大小/最小/最大
initial-size: 1
min-idle: 1
max-active: 20
#获取连接等待超时时间
max-wait: 60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
time-between-eviction-runs-millis: 60000
#一个连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
validation-query: SELECT 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
mybatis:
type-aliases-package: com.xdclass.mysql.persist
config-location: classpath:mybatis-config.xml
mapper-locations: classpath*:mappers/**/*Mapper.xml
#pagehelper
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>1.3.7version>
<configuration>
<configurationFile>tools/generatorConfig-xdclass.xmlconfigurationFile>
<verbose>trueverbose>
<overwrite>trueoverwrite>
configuration>
<executions>
<execution>
<id>Generate MyBatis Artifactsid>
<phase>nonephase>
<goals>
<goal>generategoal>
goals>
execution>
executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-coreartifactId>
<version>1.3.7version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.24version>
dependency>
dependencies>
plugin>
plugins>
build>
简介:Mybatis自动生成工具的使用
定义:MyBatis Generator 是 MyBatis 提供的一个代码生成工具。可以帮我们生成表对应的持久化对象(po)、操作数据库的接口(dao)、CRUD sql的xml(mapper)
自动生成增删改查SQL
配置项
配置样例
DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<context id="xdclass" targetRuntime="MyBatis3">
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<plugin type="org.mybatis.generator.plugins.MapperAnnotationPlugin"/>
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/xdclass_mysql?useUnicode=true&characterEncoding=UTF-8"
userId="xdclass" password="xdclass">
jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
<property name="useJSR310Types" value="true"/>
javaTypeResolver>
<javaModelGenerator targetPackage="com.xdclass.mysql.model"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="false"/>
javaModelGenerator>
<sqlMapGenerator targetPackage="mappers/xdclass/generated"
targetProject="./src/main/resources/">
<property name="enableSubPackages" value="true"/>
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.xdclass.mysql.persist.mapper.generated"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
javaClientGenerator>
<table tableName="user" domainObjectName="User" mapperName="UserMapper"
enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false"
enableDeleteByPrimaryKey="true" enableInsert="true"
enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true">
<columnOverride column="is_default_type" property="defaultType" javaType="java.lang.Boolean"
jdbcType="TINYINT"/>
table>
context>
generatorConfiguration>
简介:基于Mybatis自定义SQL*
新建mappes.xdclass.custom包用于存储自定义XML定义信息
新建mapper.custom用于存储自定义mapper接口
进行自定义mapper查询接口测试案例
简介:Mybatis Executor执行过程解析

解读源码的学习习惯
简介:经典面试题之Mybatis自定义拦截器
拦截器作用:拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法。
对于实现自己的 Interceptor 而言有两个很重要的注解,一个是 @Intercepts,其值是一个@Signature 数组。@Intercepts 用于表明当前的对象是一个 Interceptor,而 @Signature则表明要拦截的接口、方法以及对应的参数类型
@Signature 的参数:
步骤:
简介:怎么观察Mysql数据库执行性能
配置Durid打开SQL执行监控
@Configuration
public class DruidConfig {
@Value("${druid.login.user_name}")
private String userName;
@Value("${druid.login.password}")
private String password;
/**
* 必须配置数据源,不然无法获取到sql监控,与sql防火墙监控
*/
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
return new DruidDataSource();
}
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new StatViewServlet());
servletRegistrationBean.addUrlMappings("/druid/*");
Map<String, String> initParameters = new HashMap<>();
initParameters.put("loginUsername", userName);// 用户名
initParameters.put("loginPassword", password);// 密码
initParameters.put("resetEnable", "false");// 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.setInitParameters(initParameters);
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
在项目运行成功之后访问地址 127.0.0.1:8080/druid/login.html,输入账号名称和密码
数据源:项目中管理的所有数据源配置的详细情况
SQL监控 : 所执行sql语句数量、时长、执行时间分布
SQL防火墙 :druid提供了黑白名单的访问,可以清楚的看到sql防护情况。
Web应用 :目前运行的web程序的详细信息
URI监控 :监控到所有的请求路径的请求次数、请求时间等其他参数。
Session监控 : 当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数
简介:Durid指标讲解与实战
基于durid对比查询效果
batchInsert代码用例编写
xml mapper编写
<insert id="batchInsert" parameterType="java.util.List">
insert into user (`name`, company
)
VALUES
<foreach collection="userList" item="item" separator=",">
(#{item.name},#{item.company})
foreach>
insert>
分批插入service逻辑编写
int num = 50;
List<User> userList = new ArrayList<>();
for (int i = 0; i < num; i++) {
User u = new User();
u.setName("daniel"+i);
u.setCompany("xdclass"+i);
userList.add(u);
}
List<List<User>> partition = Lists.partition(userList, 10);
partition.forEach(users -> customMapper.batchInsert(users));
对比有无索引的请求差异化

简介:怎么好查,Mysql数据库查询索引性能实战
在数据量1000w的表里面对比是否采用索引数据对照组,查询使用索引前面性能对比
使用索引前的执行情况


不适合用索引的场景
不适合键值较少的列(重复数据较多的列)
索引无法存储null值
索引失效的经典场景
简介:谈谈你对SQL优化的理解
SQL优化可分为两个部分,一个是设计阶段,另一个是查询阶段
设计阶段运用到的优化
查询阶段涉及的优化
select *:让优化器无法完成索引覆盖扫描这类优化,而且还会增加额外的I/O、内存和CPU的消耗join操作:单张表查询可以减少锁的竞争,更容易应对业务的发展,方便对数据库进行拆分group by操作,UNION查询,部分order by操作,例如distinct函数和order by一起使用且distinct和order by同一个字段简介:谈谈你对SQL优化的理解

通过explain分析深度分页查询问题 explain select * from user where age>10 and age<90000000 order by age desc limit 8000000,10000;
执行计划Extra列可能出现的值及含义:
减少回表次数的重大优化。解决方案
通过主键索引优化
Elastic Search搜索引擎优化(倒排索引)
实际上类似于淘宝这样的电商基本上都是把所有商品放进ES搜索引擎里的(那么海量的数据,放进MySQL是不可能的,放进Redis也不现实)。但即使用了ES搜索引擎,也还是有可能发生深度分页的问题的,这时怎么办呢?答案是通过游标scroll
简介:介绍索引是什么?为什么要引入索引
索引的概念:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
索引的作用:索引的目的在于提高查询效率,使原始的随机全表扫描变成快速顺序锁定数据
常用索引的分类:
索引高性能保证:
扩展话题:为什么磁盘读取数据很慢:


简介:索引底层实现原理
索引的目的:提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql
索引设计难度:
常见检索方案分析:

[

简介: B+Tree结构解析高性能分析
B-Tree的缺点:插入删除新的数据记录会破坏B-Tree的性质,因此在插入删除时,需要对树进行一个分裂、合并、转移等操作以保持B-Tree性质。造成IO操作频繁。区间查找可能需要返回上层节点重复遍历,IO操作繁琐
B+Tree的改进:非叶子节点不存储data,只存储索引key;只有叶子节点才存储data

高性能保证:
简介:InnoDB索引结构

InnoDB物理存储结构分析
索引值匹配检索过程:确定定位条件, 找到根节点Page No, 根节点读到内存, 逐层向下查找, 读取叶子节点Page,通过 二分查找找到记录或未命中。(select * from user_info where id = 23) 查询类接口一般在30ms~50ms 插入、修改一般在50ms~100ms

索引范围查找:读取根节点至内存, 确定索引定位条件id=18, 找到满足条件第一个叶节点
, 顺序扫描所有结果, 直到终止条件满足id >=21 (select * from user_info where id >= 16 and id < 21)


简介:innoDB索引和myIsam索引对比

myIsam索引:

InnoDB主键索引:

InnoDB非主键索引:

简介:Mysql为什么会选错索引
场景分析
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`a` int(11) NOT NULL default 0,
`b` int(11) NOT NULL default 0,
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB;
delimiter ;;
create procedure xddata()
begin
declare i int;
set i=1;
while(i<=100000)do
insert into test values(i, i, i);
set i=i+1;
end while;
end;;
delimiter ;
call xddata();
explain select * from test where (a between 1000 and 2000) and (b between 50000 and 100000) order by b limit 1;
原因分析:
解决方案
select * from test where (a between 1000 and 2000) and (b between 50000 and 100000) order by b limit 1;
select * from test force index(a) where (a between 1000 and 2000) and (b between 50000 and 100000) order by b limit 1;
其他场景:
简介:唯一索引和普通索引的区别
关于唯一索引
UNIQUE索引可以强制执行值唯一的一列或多列。一个表可以有多个UNIQUE索引。唯一索引与普通索引的性能区别

查询上的区别
change buffer的定义
修改上的区别
对于唯一索引,所有更新操作要先判断该操作是否违反唯一性约束,唯一索引不会用change buffer
若所修改的数据在内存中
若所修改的数据不在内存中
结论
简介:mysql数据库存储引擎之间的区别

InnoDB支持事务,MyISAM不支持
InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败
InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快
Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高
实际场景的选择
简介:mysql事务概念以及特性讲解
3个W原则:
事务的四大特性ACID
原子性(Atomicity):原子性指的是整个数据库的事务是一个不可分割的工作单位,每一个都应该是一个原子操作。
当我们执行一个事务的时候,如果一系列的操作中,有一个操作失败了,那么,需要将这一个事务中的所有操作恢复到执行事务之前的状态,这就是事务的原子性
一致性(Consistency):一致性是指事务将数据库从一种状态转变为下一种一致性的状态,也就是说在事务执行前后,这两种状态应该是一样的,也就是数据库的完整性约束不会被破坏,另外,需要注意的是一致性是不关注中间状态的
隔离性(Isolation):MySQL数据库中可以同时启动很多的事务,但是,事务和事务之间他们是相互分离的,也就是互不影响的,这就是事务的隔离性。
持久性(Durability):事务的持久性是指事务一旦提交,就是永久的了,就是发生问题,数据库也是可以恢复的。因此,持久性保证事务的高可靠性
mysql事务实战
简介:Mysql事务隔离级别分析
set session transaction isolation level serializable;
1、为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
set global transaction isolation level read uncommitted;
select @@tx_isolation;
start transaction
select * from xdclass_mysql.user where id =1;
commit;
简介:mysql脏读幻读不可重复读讲解



Select lock in share mode; select …for update.
简介:mysql数据落盘步骤
mysql从数据执行到落盘步骤分析 show variables like ‘innodb buffer pool’

Buffer Pool是什么?


简介:Mysql 重要特性redo log和undo log日志讲解
InnoDB 使用undo、 redo log来保证事务原子性、一致性及持久性,同时采用预写日志方式将随机写入变成顺序追加写入,提升事务性能
undo log :
redo log :
内容:物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的

简介:Mysql MVCC讲解
InnoDB Multi-Versionning-InnoDB`是多版本存储引擎:它保留有关已更改行的旧版本的信息,以支持诸如并发和rollback的事务功能。此信息以称为rollback segment的数据结构存储在 table 空间中
实现原理:InnoDB向存储在数据库中的每一行添加两个关键字段:DATA_TRX_ID和DATA_ROLL_PTR

MVCC的作用:
每行数据都存在一个版本,每次数据更新时都更新该版本
修改时Copy出当前版本随意修改,各个事务之间无干扰
把修改前的数据存放于undo log,通过回滚指针与主数据关联
修改成功(commit)啥都不做,失败则恢复undo log中的数据(rollback)
Read View: select * from user where name=‘daniel’;
定义:ReadView是一个数据结构,在SQL开始的时候被创建。这个数据结构中包含了3个主要的成员:ReadView{low_trx_id, up_trx_id, trx_ids},在并发情况下,一个事务在启动时,trx_sys链表中存在部分还未提交的事务,那么哪些改变对当前事务是可见的,哪些又是不可见的,这个需要通过ReadView来进行判定
low_trx_id表示该SQL启动时,当前事务链表中最大的事务id编号,也就是最近创建的除自身以外最大事务编号;
up_trx_id表示该SQL启动时,当前事务链表中最小的事务id编号,也就是当前系统中创建最早但还未提交的事务;
trx_ids表示所有事务链表中事务的id集合 s1: insert into user(1,“Daniel”) commit; s2: select * from user where id=1;

简介:InndoBD doublewrite机制讲解
双重写入缓冲区,InnoDB使用一种称为 doublewrite 的文件刷新技术。在将 页 写入 数据文件 之前,InnoDB首先将它们写入称为 doublewrite 缓冲区的存储区域
作用:提高innodb的可靠性,用来解决部分写失败(partial page write页断裂)。在页面写入过程中发生 os,存储子系统或mysqld进程崩溃,则InnoDB随后可以在“崩溃恢复”期间从 doublewrite 缓冲区中找到该页面的良好副本。


带来的问题:
配置doublewrite
show variables like '%double%';
简介:Mysql锁是什么?锁有哪些类别?

锁定义

锁的分类
从对数据操作的类型分法(读或写)
从对数据操作的粒度分法
从并发角度的分发–实际上乐观锁和悲观锁只是一种思想
其他锁:
The main purpose of intention locks is to show that someone is locking a row, or going to lock a row in the table.
简介:行锁和表锁的区别,以及锁优化分析
表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单。最常使用的MYISAM与INNODB都支持表级锁定。
行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。
特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
使用:InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁
行级锁改为表级锁的案例–不命中索引场景
update from test set a=100 where b='100';
实战查看行锁场景
简介:InnoDB死锁概念和死锁案例分析
定义:当两个或以上的事务相互持有和请求锁,并形成一个循环的依赖关系,就会产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。在一个事务系统中,死锁是确切存在并且是不能完全避免的。
解决:InnoDB会自动检测事务死锁,立即回滚其中某个事务,并且返回一个错误。它根据某种机制来选择那个最简单(代价最小)的事务来进行回滚
死锁之select for update
产生场景:两个transaction都有两个select for update,transaction a先锁记录1,再锁记录2;而transaction b先锁记录2,再锁记录1
写锁:for update,读锁:for my share mode show engine innodb status
产生日志:
------------------------
LATEST DETECTED DEADLOCK
------------------------
2020-10-18 17:21:00 0x700003222000
*** (1) TRANSACTION:
TRANSACTION 3232878, ACTIVE 14 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1136, 4 row lock(s)
MySQL thread id 26, OS thread handle 123145355436032, query id 1172 localhost 127.0.0.1 root Sending data
select * from test where b=100 for update
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 408 page no 11 n bits 1272 index b of table `xdclass_mysql`.`test` trx id 3232878 lock_mode X waiting
Record lock, heap no 101 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 80000064; asc d;;
*** (2) TRANSACTION:
TRANSACTION 3232879, ACTIVE 8 sec starting index read
mysql tables in use 1, locked 1
6 lock struct(s), heap size 1136, 8 row lock(s)
MySQL thread id 28, OS thread handle 123145354878976, query id 1173 localhost 127.0.0.1 root Sending data
select * from test where b=200 for updated
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 408 page no 11 n bits 1272 index b of table `xdclass_mysql`.`test` trx id 3232879 lock_mode X
Record lock, heap no 101 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 80000064; asc d;;
Record lock, heap no 603 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 800186a5; asc ;;
Record lock, heap no 605 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 800186a6; asc ;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 408 page no 11 n bits 1272 index b of table `xdclass_mysql`.`test` trx id 3232879 lock_mode X waiting
Record lock, heap no 201 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 800000c8; asc ;;
1: len 4; hex 800000c8; asc ;;
*** WE ROLL BACK TRANSACTION (1)
死锁之两个update
产生场景:两个transaction都有两个update,transaction a先更新记录1,再更新记录2;而transaction b先更新记录2,再更新记录1
产生日志:
LATEST DETECTED DEADLOCK
------------------------
2020-10-18 17:30:02 0x700003222000
*** (1) TRANSACTION:
TRANSACTION 3232880, ACTIVE 9 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1
MySQL thread id 26, OS thread handle 123145355436032, query id 1218 localhost 127.0.0.1 root updating
update test set a =100 where b=100
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 408 page no 11 n bits 1272 index b of table `xdclass_mysql`.`test` trx id 3232880 lock_mode X waiting
Record lock, heap no 101 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 80000064; asc d;;
*** (2) TRANSACTION:
TRANSACTION 3232881, ACTIVE 6 sec starting index read
mysql tables in use 1, locked 1
6 lock struct(s), heap size 1136, 8 row lock(s), undo log entries 3
MySQL thread id 28, OS thread handle 123145354878976, query id 1219 localhost 127.0.0.1 root updating
update test set a =100 where b=200
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 408 page no 11 n bits 1272 index b of table `xdclass_mysql`.`test` trx id 3232881 lock_mode X
Record lock, heap no 101 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 80000064; asc d;;
Record lock, heap no 603 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 800186a5; asc ;;
Record lock, heap no 605 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000064; asc d;;
1: len 4; hex 800186a6; asc ;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 408 page no 11 n bits 1272 index b of table `xdclass_mysql`.`test` trx id 3232881 lock_mode X waiting
Record lock, heap no 201 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 800000c8; asc ;;
1: len 4; hex 800000c8; asc ;;
*** WE ROLL BACK TRANSACTION (1)
简介:程序开发过程中应该如何注意避免死锁

锁的本质是资源相互竞争,相互等待,往往是两个(或以上)的Session加锁的顺序不一致
如何有效避免:
在程序中,操作多张表时,尽量以相同的顺序来访问(避免形成等待环路)
批量操作单张表数据的时候,先对数据进行排序(避免形成等待环路) A线程 id:1 ,10 ,20按顺序加锁 B线程id:20,10,1
如果可以,大事务化成小事务,甚至不开启事务 select for update==>insert==>update = insert into update on duplicate key
尽量使用索引访问数据,避免没有 where 条件的操作,避免锁表 有走索引记录锁,没走索引表锁
使用等值查询而不是范围查询查询数据,命中记录,避免间隙锁对并发的影响 1,10,20 等值where id in (1,10,20) 范围查询 id>1 and id<20
避免在同一时间点运行多个对同一表进行读写的脚本,特别注意加锁且操作数据量比较大的语句;我们经常会有一些定时脚本,避免它们在同一时间点运行
简介:说说你对Mysql间隙锁的了解

select id,a,b from test where a=10 for update; 1条满足的记录
update delete…
INSERT INTO test (id, a, b) VALUES (18, 10, 10);
select id,a,b from test where a=10; 2条满足的记录
验证间隙锁的方式,建表==》开启两个session==》第一个session进行锁操作==》另一个session插入数据
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) NOT NULL DEFAULT '0',
`b` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=100007 DEFAULT CHARSET=latin1;
面试题回归:
简介:谈谈mysql大表性能问题,性能优化方向

简介:剖析复制的意义,从常用复制模式讲解复制
小公司用单体服务,单体数据库,大公司考虑性能、考虑安全性、容灾性
Mysql复制拓扑结构使用场景: update、delete、insert select
横向扩展(Scale-Out):指在多个从库之间进行读负载均衡,以提高读性能。所有数据变更在主库上执行,把之前在主库上的读负载剥离出来,以承载更多的写请求,另外,如果读负载越来越大,可以通过扩展从库来提高读性能
数据安全性:形成多个备份库,减少在极端场景丢失造成损失,对于主库来说,从库有多个,所以如果在从库上执行备份,对只读应用的可用性影响就要小很多(从库的复制机制本身也支持断点续传)。也就是说,在执行备份操作时,选择使用从库而不使用主库是一个更好的替代方案,这样可以尽量减少对主库性能以及数据安全性的影响

常用复制模式:一主多从、MHA+多节点集群 MHA Manage、MHA node
简介:mysql主从数据同步搭建
GRANT REPLICATION SLAVE ON *.* to 'root'@'172.168.1.2' identified by 'daniel';
//刷新系统权限表的配置
FLUSH PRIVILEGES;
接下来在找到mysql的配置文件/etc/my.cnf,增加以下配置
# 开启binlog
log-bin=mysql-bin
server-id=100
# 需要同步的数据库,如果不配置则同步全部数据库
binlog-do-db=xdclas_replication
# binlog日志保留的天数,清除超过20天的日志
# 防止日志文件过大,导致磁盘空间不足
expire-logs-days=20
重启master节点
service mysql restart
slave配置:在/etc/my.cnf配置文件,增加以下配置
server-id=101
进入到slave mysql后,再输入以下命令:
CHANGE MASTER TO
MASTER_HOST='172.168.1.2',//主机IP
MASTER_USER='root',//之前创建的用户账号
MASTER_PASSWORD='daniel',//之前创建的用户密码
MASTER_LOG_FILE='mysql-bin.000001',//master主机的binlog日志名称
MASTER_LOG_POS=100,//binlog日志偏移量
master_port=3306;//端口
启动slave服务
start slave;
show slave status;
简介:mysql主从同步原理讲解

dump过程需要关注的信息:
关于中继日志
简介:Mysql实际上是在复制什么?复制的单位怎么定义
复制功能之所以能够正常工作,是因为写入二进制日志的事件是从主库获取,然后在从库上回放的。根据事件的类型,事件以不同的格式被记录在二进制日志中,一般有三种复制模式,基于row复制模式,基于statement的复制模式以及mixed复制模式
什么是基于row的复制模式
什么是基于statement的复制模式
使用statement格式的二进制日志时,主库会将SQL语句文本写入二进制日志。在主库上执行的SQL语句,然后将主库的SQL变更在从库重放,这称为基于statement(语句)的复制,简称为SBR
关键行为:SQL转成Binlog二进制日志在从库重放
什么是mixed复制模式
简介:深入分析复制模式的区别,分析Mysql开发者怎么改进,遵守什么门路?
基于row的优缺点在哪里?
基于statement的优劣势在哪里?
关于安全与不安全数据复制
简介:了解传统复制和基于GTID复制的区别,掌握GTID带来的便利
传统复制
基于GTID的复制方式
GTID SET信息在主库与从库中都会保存。这意味着可以通过GTID SET信息来追踪二进制日志的来源。此外,一旦在给定Server中提交过某个GTID的事务,则该Server将忽略后续提交的相同GTID的事务。因此,主库上提交的事务在从库上只能应用一次,之后碰到重复的GTID时会自动跳过整个事务,这有助于保证主从库数据一致

简介:GTID生成工作作用阶段以及GTID优缺点讲解
**
**
开启GTID复制模式,在my.cnf配置文件中添加 5.7+版本
gtid_mode=on (必选)
enforce-gtid-consistency=1 (必选)
log_bin=mysql-bin (可选) #高可用切换,最好开启该功能
log-slave-updates=1 (可选) #高可用切换,最好打开该功能
GTID作用方式
GTID工作原理
GTID优势
GTID的劣势
简介:梳理半复制与异步复制的区别,讲解半复制带来哪些改进
传统异步复制模式介绍
由于主库执行提交与发送二进制日志是异步的,也就是说,从库是否成功接收二进制日志不影响主库中的事务执行提交,因此可能会出现“主库发生宕机,但主库中已提交事务的二进制日志并没有被任何从库成功接收”的情况,即发生了数据丢失

半同步复制模式介绍 5.7插件模式(微内核架构)

半复制的特点
简介:Mysql复制从单线程到多线程的演进过程
复制模式上的演进
基于group_commit提交模式
基于database的多线程复制模式
处理原则:多线程复制基于schema来实现,将多个数据库下的事务按照数据库拆分到多个线程上执行,保证数据库级别的事务一致性
在MYSQL中开启并行复制功能,SQL线程会变成coordinator线程,coordinator线程会对二进制日志的event进行判断
1、如果判断事件可以被并行执行,那么选择相应worker线程应用BINLOG事件

简介:分析基于DataBase的问题以及基于LOGICAL_CLOCK模式的改进

基于database的复制优化可能存在的问题
基于logical_clock多线程复制
简介:关于本章节常见高级工程师面试题
Mysql主从是如何复制的?怎么做到数据一致性?
Mysql复制模式有哪几种?他们分别有哪些区别
监听过binlog吗?怎么处理的?canal=>kafka,应用连接kafak

使用Mysql读写分离过程中遇到过什么问题, 你是怎么解决的?

简介:了解分库分表的原因,如果不分表瓶颈会在哪里
什么是分区?


简介:了解分库分表常见手段以及选择考虑方向
根据不同规模对垂直方向和水平方向的选择
垂直拆分
水平拆分


简介:分库分表环境准备

建表语句编写
CREATE TABLE if not exists product_0 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_1 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_2 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_3 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_4 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_5 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_6 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_7 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_8 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_9 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_10 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_11 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_12 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_13 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_14 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_15 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_16 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_17 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_18 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_19 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_20 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_21 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_22 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_23 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_24 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_25 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_26 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_27 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_28 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_29 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_30 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_31 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_32 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_33 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_34 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_35 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_36 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_37 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_38 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_39 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_40 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_41 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_42 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_43 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_44 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_45 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_46 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_47 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_48 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_49 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_50 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_51 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_52 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_53 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_54 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_55 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_56 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_57 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_58 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_59 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_60 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_61 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_62 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE if not exists product_63 ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID', `store_id` varchar(64) NOT NULL COMMENT '店铺ID', `product_seq` varchar(64) NOT NULL COMMENT '商品标识', `sku_id` varchar(64) NOT NULL COMMENT '商品skuID', `spu_id` varchar(64) NOT NULL COMMENT '商品spuID', `valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效', `create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间', `update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
简介:基于springboot+shardingJDBC分库分表实战
分库分表实战

简介:shardingJDBC实战使用
简介:讨论分布式场景ID怎么生成?

Zookeeper 一致性
简介:讨论分布式场景ID怎么生成?


雪花算法生成原则和原理

简介:解析分库分表遇到的问题,非partition key如何发起检索
分库分表是根据partition key做数据表下标定位,但在某些场景需要用到非partition key检索数据,就会遇到问题
对于单个非partition key查询一般可以根据业务场景需要解决方案
映射法检索,通过非partition key找到对应的partition key,再根据partition key做hash找到对应库表
基因法检索,在存储非partition key时冗余一个字段用于预埋能找到对应的partition key,再根据partition key做hash找到对应库表
ES检索,根据非partition key作为条件建立起检索,后续查询直接走异构系统ES即可,性能和稳定性由ES保证



简介:mysql表分区概念讲解,分区有哪些优势

简介:mysql表分区原理,分区有哪些优势
分区表实践
CREATE TABLE `product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`sale_id` varchar(64) NOT NULL DEFAULT '' COMMENT '卖家ID',
`store_id` bigint(20) NOT NULL COMMENT '店铺ID',
`product_seq` varchar(64) NOT NULL COMMENT '商品标识',
`sku_id` varchar(64) NOT NULL COMMENT '商品skuID',
`spu_id` varchar(64) NOT NULL COMMENT '商品spuID',
`valid` tinyint(1) DEFAULT '1' COMMENT '是否有效,0无效,1有效',
`create_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '创建时间',
`update_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001025 DEFAULT CHARSET=utf8mb4
partition by range columns(id,store_id)
(
partition p01 values less than (10000),
partition p02 values less than (20000),
partition p03 values less than (100000000)
);
分区表原理
分区表使用场景
分区表的劣势
简介:mysql高级篇课程总结
