我正在 mysql 5.7 中试验 text 和 varchars。我创建了一个简单的 mysql 表,如下所示
创建表small_table
(pk
int(11) NOT NULL AUTO_INCRMENT,varc
varchar(255) DEFAULT NULL,txt
text, 首要的关键 (pk
) ) 引擎=InnoDB AUTO_INCRMENT=103925 默认字符集=utf8
该表大约有 100k 行。
我已经执行了以下查询并对两者进行了分析
查询 1(对 varchar 列进行分组)
通过varc从small_table组中选择varc,count(*);
配置文件 1 结果
+----------------------+----------+ | 状态 | 持续时间 | +----------------------+----------+ | 开始| 0.000064 | 0.000064 | 检查权限 | 0.000004 | | 开桌 | 0.004812 | | 初始化| 0.000026 | 0.000026 | 系统锁| 0.000005 | 0.000005 | 优化| 0.000006 | 0.000006 …
在mysql 5.6中,考虑这 2 个在 A、B、C 和 D 之间创建关系的示例。
实施例1
CREATE TABLE `a` (
id INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB;
CREATE TABLE `b` (
id INT UNSIGNED NOT NULL,
a INT UNSIGNED NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (a) REFERENCES a (id) ON DELETE CASCADE
) ENGINE = INNODB;
CREATE TABLE `c` (
id INT UNSIGNED NOT NULL,
a INT UNSIGNED NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (a) REFERENCES a (id) …
Run Code Online (Sandbox Code Playgroud) MYSQL VERSION : 5.7.X
STORAGE ENGINE : Innodb
Run Code Online (Sandbox Code Playgroud)
我有一个大致的想法,即 Read Committed Isolation 将主要使用 Shared and Exclusive Record Locks。但是,根据 mysql docs,在某些情况下,甚至 Read Committed 也必须使用间隙锁定。
READ COMMITTED ..... 对于锁定读取(SELECT with FOR UPDATE 或 LOCK IN SHARE MODE)、UPDATE 语句和 DELETE 语句,InnoDB 只锁定索引记录,而不锁定它们之前的间隙,因此允许自由插入新记录在锁定的记录旁边。间隙锁定仅用于外键约束检查和重复键检查。
恕我直言,只有记录锁就足够了。谁能解释一下 Gap 锁定的场景以及为什么 mysql 会这样做?
我最近在 Postgres 中遇到了这种奇怪的行为。我有一张像下面这样的表:
sasdb=# \d emp_manager_rel 表“db3004db.emp_manager_rel” 专栏 | 类型 | 整理 | 可空 | 默认 ------------+--------+-----------+------------+----- ---- emp_id | bigint | | | manager_id | bigint | | | select * from emp_manager_rel ; emp_id | manager_id --------+------------ 1 | 123
我执行了以下更新语句:
更新1:
更新 emp_manager_rel 设置 manager_id = manager_id+emp_id , emp_id=emp_id*4;
更新表格如下:
emp_id | manager_id --------+------------ 4 | 124
更新 2:我执行了以下查询(在原始表上,而不是在更新表上)
更新 emp_manager_rel 设置 emp_id=emp_id*4 , manager_id = manager_id+emp_id ;
它更新表格如下:
emp_id | manager_id --------+------------ 4 | 124
我期望 …
这是情况:
但是我找不到“ utf8_bin vs utf8_general_cs ”的帖子。那么,它们是一样的吗?如果不是,它们之间有什么区别?
注意:我已经检查过utf8_general_cs在默认 MySQL 中不可用。我可以知道为什么吗?
mysql ×3
sql-standard ×2
cascade ×1
collation ×1
delete ×1
foreign-key ×1
innodb ×1
locking ×1
mysql-5.7 ×1
performance ×1
postgresql ×1
transaction ×1
update ×1
utf-8 ×1
varchar ×1