主人身边。
在用于复制的 MySQL 8 中,是否可以指定主端用于复制的特定端口,并且仅指定与常规客户端连接到的默认 3306 不同的复制?
主人身边。
在用于复制的 MySQL 8 中,是否可以指定主端用于复制的特定端口,并且仅指定与常规客户端连接到的默认 3306 不同的复制?
在 MySQL 主机名中,%
in是否也%.exemple.com
包含主域exemple.com
或仅包含其子域?
比如在这个
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'rep'@'%.exemple.com';
域也会exemple.com
被允许吗?
表 T 有这个字段
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------+
在 MySQL 5.7 中,更新记录和设置updated=null
会自动设置updated
为当前日期时间
UPDATE T SET ...,updated=null WHERE k=123
==>
+---------------------+
| updated |
+---------------------+
| 2022-01-05 22:52:05 |
+---------------------+
但是在 MySQL 8.0 中做同样的事情,给出
+---------------------+
| updated |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
我该如何解决这个问题,这是 MySQL 错误,还是新设置(或行为改变)?
该updated
列创建为
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
一个简单的SELECT
给
+---------------------+
| updated |
+---------------------+
| 2021-12-25 00:15:47 |
+---------------------+
不幸的是,updated
没有创建为timestamp(3)
.
有什么方法可以从中提取更多的准确性updated
?(MySQL 是否存储比秒更高的精度,即使它只显示秒数?)
4 年前,我在 SO 上回答了一个问题,“如何为每一行批量设置 UUID”。
我试了之后回答
UPDATE table SET uuidcol = UUID();
它对我有用,但大约一半(似乎)的人报告说它不起作用,说所有行的 ID 都是相同的。
所以今天,我再次尝试,每次删除列,并创建一个具有新类型的新列,例如
text, char(36), varchar(36)
它再次起作用,每次都为每行创建一个唯一的 UUID。
是什么让它对其他人不起作用?
比如发动机?(在 MySQL 5.7 上使用 InnoDB)
编辑
做了另一个测试
t
的表uu varchar(36)
uu
插入10,000,000行null
UPDATE t SET uu=UUID();
并且所有 10M 行都有不同的唯一UUID。
表尚未创建,但为了简化,有一个groups
和一个items
表。一个组包含一个项目 ID(和一个组 ID)。并且多个组可能包含相同的项目 ID。
例如
CREATE TABLE groups (
gid int,
iid int,
primary key(gid,iid)
);
CREATE TABLE items (
iid int primary key,
label char(5)
);
并在其中放入一些数据,以帮助可视化即将出现的问题
insert into items values (1,"pen"),(2,"gum"),(3,"cat"),(4,"dog"),
(5,"hug"),(6,"art"),(7,"fun");
insert into groups values(1,1),(1,2),(1,3),(2,4),(2,5),(2,6),(3,1),
(3,4),(4,2),(4,3),(4,5),(4,6),(4,7);
检索多个组(例如组 1、2、3、4)的项目使用 aDISTINCT
删除重复项
(1) SELECT DISTINCT i.iid,i.label FROM groups g JOIN items i ON g.iid=i.iid
WHERE g.gid in (1,2,3,4) ORDER BY i.iid;
但是由于表最终将包含更多数据,使用子查询的查询会更有效吗
(2) SELECT i.iid,i.label FROM items i
JOIN (SELECT DISTINCT iid FROM groups WHERE gid IN (1,2,3,4)) AS s
ON i.iid=s.iid ORDER BY i.iid;
因为distinct
只适用于项目 ID,尽管使用子查询的开销?
或者@hypercube 建议的这个(见评论):
(3) SELECT i.iid,i.label FROM items AS i
WHERE EXISTS
(SELECT * FROM groups AS g WHERE g.gid IN (1,2,3,4) AND i.iid=g.iid)
ORDER BY i.iid
供参考,最终