clcx_1315

clcx_1315 查看完整档案

上海编辑长春工业大学  |  计算机科学与技术 编辑cmb  |  dba 编辑填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

clcx_1315 回答了问题 · 2019-03-14

商品合并,数据库怎么设计

那就维护一个映射关系表不就行了,表中一个真实商品id对应多个别名id,多行存储,统计的时候关联一下就可以了

关注 5 回答 2

clcx_1315 回答了问题 · 2019-03-14

请问 SQL (mysql) 如何查询相同 ID下某一列全部相同的 sql 语句怎么写?

select * from 
    (select wextid,result 
    from t_test 
    group by wextid,result) a 
 group by wextid 
 having count(1)=1 and result = 'error'

关注 6 回答 5

clcx_1315 关注了标签 · 2019-03-13

mysql

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

关注 72629

clcx_1315 关注了标签 · 2019-03-13

mysql

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

关注 72629

clcx_1315 评论了文章 · 2018-12-28

差点掉坑,MySQL一致性读原来是有条件的

众所周知,在设定了隔离等级为Repeatable Read及以上时,InnoDB 可以实现数据的一致性读。换句话来说,就是事务执行的任意时刻,读取到的数据是同一个快照,不会受到其他事务的更新影响。

以前一直以为在事务内读到的数据不会受其他事务影响,后来发现只有普通的select语句才是一致性读。如果是update, delete, select for update, select in share mode等语句是当前读,读的是数据库最新数据, 下面是两个例子。

加锁读

创建一个测试用的表, 然后插入一条测试用的数据

create table test_innodb_read(
    id int not null primary key,
    value int
) engine = InnoDB charset=utf8;
insert into test_innodb_read values (1, 1);

当前autocommit和隔离等级如下

db83-3306>>select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

db83-3306>>select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ         |
+-------------------------+
1 row in set (0.00 sec)

然后开启两个 Session,分别执行以下操作

时间点SessionA结果SessionB
1begin
select * from test_innodb_read where id=1
1
2update test_innodb_read set value = 2 where id=1
3select * from test_innodb_read where id=11
4select * from test_innodb_read where id=1 lock in share mode2

由于设置了自动提交,所以SessionB的更新语句执行完就已经提交了,从结果可以看到普通的Select不受其他事务影响,所以读到的数据都是同一版本,而在加锁读的情况下采取的是读最新的数据,所以读到的数据是最新提交的数据。

DML 操作

在进行数据变更操作的时候,也会拿到最新的数据,用的还是上面的表,插入一条测试数据

insert into test_innodb_read values (2, 1);

然后开启两个 Session,分别执行以下操作,

时间点SessionA结果SessionB
1begin
select * from test_innodb_read where id=2
1
2update test_innodb_read set value = 2 where id=2
3select * from test_innodb_read where id=21
4update test_innodb_read set value=value+1 where id=2
5select * from test_innodb_read where id=23

SessionA在时间点 5 查看数据拿到的是 3 而不是 2,原因是,事务在对数据进行更新操作时(时间点4),会先读取一次数据,这次读取的不是事务开始版本,而是数据的最新提交的值 2。如果不读取最新数据的话,就等于覆盖了SessionB的更新,所以读到的是 2,最后得到的数据是 3。

最后

当我知道这个知识点后,感觉背后一凉,以前写代码的时候,喜欢在事务里先把数据查出来,内存中相加减,再存库,现在想想这样做就是BUG啊,坑...

不得不说,极客时间上面的这个MySQL课程还是很值的,至少让我推翻了以前的想法

MySQL实战45讲-8 事务到底是隔离的还是不隔离的
查看原文

clcx_1315 回答了问题 · 2018-11-29

我该如何优化这样一条sql?

select a.* from t_test a join 
(select '1' id union    
SELECT id FROM `t_test` WHERE `pid` = '1' AND type = 1) b
on a.pid=b.id and a.type=2;

数据量大的话pid要加个索引

关注 3 回答 2

clcx_1315 回答了问题 · 2018-11-29

请问Mac 终端加载csv文件的sql指令是什么

客户端都一样,mac还是win要load都用load,
load加local是加载客户端本地文件
source只能读取服务器端文件

关注 2 回答 1

clcx_1315 回答了问题 · 2018-11-29

解决A表与B表关联,查询在A表中有,但在B表没有的数据

select * from a where not exists 
(select 1 from b where a.column1=b.column1 and a.column2=b.column2;

关注 4 回答 3

clcx_1315 回答了问题 · 2018-11-15

mysql 官网rmp源找不到老版本的

http://mirrors.sohu.com/mysql/ 这里可以找到每个大版本的最后几个小版本,不包含所有小版本
要么就去percona找吧 有所有小版本包 https://www.percona.com/downl...

关注 4 回答 3

clcx_1315 回答了问题 · 2018-11-08

解决MySQL 有where条件时,怎么利用自增ID倒序

加个article_id,id,user_id的联合索引

关注 5 回答 3

认证与成就

  • 获得 294 次点赞
  • 获得 13 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 11 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-12-16
个人主页被 3k 人浏览