小编Son*_*ngo的帖子

将 Select 语句放入事务中

这两个查询有什么区别:

START TRANSACTION;
SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

并且没有交易:

SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;  
Run Code Online (Sandbox Code Playgroud)

SELECT内部交易有什么影响?

如果在这两种情况下都在DELETE FROM orders WHERE id=1另一个会话之后立即调用SELECT,它将在什么时候被处理?

mysql innodb concurrency transaction

11
推荐指数
1
解决办法
2万
查看次数

在这种情况下,代理键是否比自然键更好

我从这里复制了这段代码:

CREATE TABLE records(
    email TEXT REFERENCES users(email),
    lat DECIMAL,
    lon DECIMAL,
    depth TEXT,
    upload_date TIMESTAMP,
    comment TEXT,
    PRIMARY KEY (upload_date,email)
);

CREATE TABLE samples(
    date_taken TIMESTAMP,
    temp DECIMAL,
    intensity DECIMAL,
    upload_date TIMESTAMP,
    email TEXT,
    PRIMARY KEY(date_taken,upload_date,email),
    FOREIGN KEY (upload_date,email) REFERENCES records(upload_date,email)
);
Run Code Online (Sandbox Code Playgroud)

引起我注意的第一件事是使用自然复合键作为两个表的主键。

我能够从这段代码中提取 3 件事:

  1. users表(此处未显示)email用作text..类型的主键。
  2. records表使用复合键text+ timestamp
  3. samples表使用 3 个类型为text+ timestamp+ 的字段的复合键timestamp

现在在这种情况下,代理键不是更好的识别吗?我的意思是性能明智的索引 anint应该比索引 a …

performance index database-design best-practices primary-key

5
推荐指数
2
解决办法
1438
查看次数