包含标签 MySQL 的文章

CAS 和 ABA 问题浅析

在讨论数据库事务处理问题中,离不开 CAS 和 ABA 的问题。 CAS Compare And Swap, 先对比再替换 事实上,乐观锁用到的就是 CAS。 CAS, 现在有内存值V, 更改操作发生前的预期值A,要更改后的值B。当且仅当V==A时才进行更改操作。 原理很简单,这样真的是安全的么? ABA CAS 会导致 ABA的问题发生。我们先来看下什么是 ABA 问题。 线程one和线程two都要更新同一个数据V。此时one查V发现等于A,然后two也查V也看到是等于A,然后two开始更新V为B,更新时进行了对比发现更新时刻V确实等于A,此时two成功的进行了更改。然后two又把V(此时等于B)更新为了A。然后one开始操作更新,对比发现此时V确实等于A,就进行了更新为B的操作。 可以发现,尽管one的CAS操作是成功的,但不表示是没有问题的。因为one是期望在查询到更改之间 V是没有被更改过的,事实上是有可能被更改的。 参考 Java CAS 和ABA问题 Java并发:CAS、ABA问题、ABA问题解决方案 ……

阅读全文

悲观锁、乐观锁,浅析

悲观锁和乐观锁是并发控制常用的两种技术手段。
并发控制是用来确保 多个事务同时读写DB中同一条数据时不破坏事务的隔离性、统一性以及数据库的统一性。

……

阅读全文

学习笔记 | MySQL 数据类型

最好的资料是 官方文档 !!! Data Type Storage Requirements Numeric Types | 数值型 官方说明文档: https://dev.mysql.com/doc/refman/5.6/en/integer-types.html TINYINT, 1Bytes SMALLINT, 2Bytes MEDIUMINT, 3Bytes INT, 4Bytes BIGINT, 8Bytes FLOAT | DOUBLE | DECIMAL ,指定精度 FLOAT(5,3)可以显示 12.345,超过这个范围进行四舍五入。不指定精度时,FLOAT和DOUBLE按照实际的精度显示,而DECIMAL默认整数位为10小数位为0。FLOAT为4Bytes, DOUBLE为8Bytes, DECIMAL最大支持位数65. 可以参照这篇介绍 和 这一篇 String Types | 字符串 官方说明文档:https://dev.mysql.com/doc/refman/5.6/en/string-types.html CHAR(L) 与 VARCHAR(L),L表示L个字符个,而非L个字节,UTF8编码中,一个汉字字符占3Bytes CHAR 定长,长度0~255,例如CHAR(4),可以存储4个字符,不足4个字符时在后面补空格后存储,超过则截断,取出该字段时将自动过滤掉后边的空格,除非 PAD_CHAR_TO_FULL_LENGTH 模式已启用 VARCHAR 可变长,长度0~65535,例如VARCHAR(4),英文下存储2个字符时占用3bytes,存储4个字符时占用5bytes,超过则截断 BLOB 类的用于存储二进制,TEXT 类的用于存储字符串。均不能有默认值 ENUM , gender ENUM('0', '1'), 表示gender字段只能存放 ‘0’, ‘1’其中的一个值, 官方文档 SET , major SET('computer', 'network'), 表示major字段可存放 ‘’, ‘computer’, ‘network’, ‘computer,network’其中四个中的一个值, 官方文档……

阅读全文