 TiDB v6.1 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间字段。 242 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 3572 页 | 84.36 MB | 1 年前3 TiDB v6.1 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间字段。 242 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 3572 页 | 84.36 MB | 1 年前3
 TiDB v7.1 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 355 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4369 页 | 98.92 MB | 1 年前3 TiDB v7.1 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 355 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4369 页 | 98.92 MB | 1 年前3
 TiDB v6.5 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 4049 页 | 94.00 MB | 1 年前3 TiDB v6.5 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 4049 页 | 94.00 MB | 1 年前3
 TiDB v8.0 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 355 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4805 页 | 101.28 MB | 1 年前3 TiDB v8.0 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 355 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4805 页 | 101.28 MB | 1 年前3
 TiDB v7.5 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 341 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4590 页 | 100.91 MB | 1 年前3 TiDB v7.5 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 341 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4590 页 | 100.91 MB | 1 年前3
 TiDB v7.6 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 351 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4666 页 | 101.24 MB | 1 年前3 TiDB v7.6 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 351 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4666 页 | 101.24 MB | 1 年前3
 TiDB v8.1 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 340 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4807 页 | 101.31 MB | 1 年前3 TiDB v8.1 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 340 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4807 页 | 101.31 MB | 1 年前3
 TiDB v8.4 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.9.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 5072 页 | 104.05 MB | 10 月前3 TiDB v8.4 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.9.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 5072 页 | 104.05 MB | 10 月前3
 TiDB v8.2 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 238 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 344 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4987 页 | 102.91 MB | 10 月前3 TiDB v8.2 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 238 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), 类型 含义 id bigint(20) 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint(20) 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint(20) 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 344 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.8.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程0 码力 | 4987 页 | 102.91 MB | 10 月前3
 TiDB v8.5 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 表如下所示: 字段名 类型 含义 id bigint 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.9.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 5095 页 | 104.54 MB | 10 月前3 TiDB v8.5 中文手册并使用与你准备保存在数据库内的数据匹配的数据类型。 稍微提升一下复杂度,例如选择定义一张 books 表,这张表将是 bookshop 数据的核心。它包含书的唯一标识、 名称、书籍类型(如:杂志、动漫、教辅等)、库存、价格、出版时间等字段。 CREATE TABLE `bookshop`.`books` ( `id` bigint NOT NULL, `title` varchar(100), `type` 表如下所示: 字段名 类型 含义 id bigint 书籍的唯一标识 title varchar(100) 书籍名称 type enum 书籍类型(如:杂志、动漫、教辅等) stock bigint 库存 price decimal(15,2) 价格 published_at datetime 出版时间 CREATE TABLE `bookshop`.`books` ( `id` bigint 程 主要包括: 1. 更新库存数量 2. 创建订单 3. 付款 这三个操作需要保证全部成功或者全部失败,并且在并发情况下要保证不超卖。 4.9.2.1 悲观事务 下面代码以悲观事务的方式,用两个线程模拟了两个用户并发买同一本书的过程,书店剩余 10 本,Bob 购买 了 6 本,Alice 购买了 4 本。两个人几乎同一时间完成订单,最终,这本书的剩余库存为零。 当使用多个线程模拟多0 码力 | 5095 页 | 104.54 MB | 10 月前3
共 14 条
- 1
- 2













