我知道TRIGGERs 很有用,因为它们负责后续查询,但是从性能的角度来看,它们也有优势吗?
将两个或三个查询替换为
INSERT INTO table1 ...
UPDATE table2 ...
UPDATE table3 ...
Run Code Online (Sandbox Code Playgroud)
使用基于触发器的查询作为
INSERT INTO table 1
Run Code Online (Sandbox Code Playgroud)
带触发器
CREATE TRIGGER test
AFTER INSERT ON table1
FOR EACH ROW BEGIN
UPDATE table2 ... WHERE id=NEW.id;
UPDATE table3 ... WHERE id=NEW.id;
END
Run Code Online (Sandbox Code Playgroud)
我们仍然拥有相同性能的三个查询吗?我的意思是我们执行后续查询或执行TRIGGER是否重要?
如果我们使用 API(例如通过 PHP 进行查询)会怎样。后续查询是内部的,无需连接器/驱动程序。是否TRIGGER提高了性能?
附加信息:数据库是带有 innoDB 的 mysql 5.5。
在一个简单的查询中
SELECT *
FROM table
WHERE id='x' OR id='y'
Run Code Online (Sandbox Code Playgroud)
如何优先获得仅其中一个WHERE条款?
我的意思是用id='x'. 仅当没有行时,获取行id='y'。
换句话说,id='y'如果有一行则不要使用id='x'。
对不起,如果这个问题很幼稚,但我无法理解 RESTRICT 或 No ACTION 的可能用法。考虑一个简单的数据库
CREATE TABLE column1
(
first_id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (first_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci";
CREATE TABLE column2
(
second_id int(11) NOT NULL AUTO_INCREMENT,
first_id int(11) REFERENCES column1(first_id) ON DELETE CASCADE,
PRIMARY KEY (second_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci";
Run Code Online (Sandbox Code Playgroud)
DELETE FROM column1 WHERE first_id='XX'column2(子列)中的对应行将被删除DELETE FROM column2 WHERE first_id='XX'不会从 column1(父列)中删除任何内容对?那么,什么以及如何RESTRICT或NO ACTION可以改变这种情况?
在SELECT查询中
SELECT b.id, MIN(IFNULL(a.views,0)) AS counted
FROM table1 a JOIN table2 b ON a.id=b.id GROUP BY id
HAVING counted>0
Run Code Online (Sandbox Code Playgroud)
我怎么能拒绝此查询UPDATE作为
UPDATE b.number = counted
Run Code Online (Sandbox Code Playgroud) 我有一个系统可以为存储在列中的每个句子分配分数:
表 1:word_scores
word score
this 3
is 4
a 5
test 1
another 0
sentence 8
Run Code Online (Sandbox Code Playgroud)
表2:句子(得分列根据表1计算)
sentence score
this is a test 13
another sentence 8
this is 7
Run Code Online (Sandbox Code Playgroud)
现在我需要1.将每个句子提取到PHP中,2.然后将字符串拆分为单词,3.然后捕获每个单词的分数,4.然后计算word_scores的总和
是否可以在mysql中计算句子分数?
我有一张桌子
id num_items folder
1 4
2 33
3 74
4 41
5 24
6 34
7 46
8 55
9 11
Run Code Online (Sandbox Code Playgroud)
我想为行分配文件夹编号,但限制每个文件夹中的项目数(例如 100)。因此,如果SUM(num_items) > 100.
该UPDATEd文件夹应该看起来像
id num_items folder
1 4 1
2 33 1
3 74 2
4 41 3
5 24 3
6 34 3
7 46 4
8 55 4
9 11 5
Run Code Online (Sandbox Code Playgroud)
因为,SUM对整个列进行计算,显然,我需要SUM在达到文件夹中的最大项目后重置值/过程。
在这个查询中:
SELECT col1, col2, col3
FROM table1
GROUP BY col1
Run Code Online (Sandbox Code Playgroud)
每行包括 的第一个值col2和col3的每个唯一值col1。
如何选择MAX和MIN的每个值col1。
就像是:
SELECT col1, minimum of col2, maximum of col2, minimum of col3, maximum of col3
Run Code Online (Sandbox Code Playgroud) 在一个表中,许多行已被删除,如何获取下一个缺失行的 id INSERT?
例如
id col1
1 1
3 3
4 4
5 5
8 8
9 9
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得 next 的第一个可用 id 的值INSERT。在这里,我想获取id = 2.
就像是
SELECT id+1 FROM table WHERE CLAUSE // pointing to the least available value
// or x = id +1 (after SELECT)
INSERT INTO table (id, ....) VALUES ('x', ....)
Run Code Online (Sandbox Code Playgroud) 这可能是一个幼稚的问题,但这两个查询有什么区别,哪个是首选?
UPDATE table1,
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) AS B
SET table1.Freq = B.idcount WHERE table1.id=B.id
Run Code Online (Sandbox Code Playgroud)
和
UPDATE table1 A INNER JOIN
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) B USING (id)
SET A.Freq = B.idcount
Run Code Online (Sandbox Code Playgroud) 我想找到每个条目最上面的父 ID。例如,
CREATE TABLE t1
(
ID int(11) unsigned NOT NULL,
ParentID int(11) unsigned,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
INSERT INTO t1 (ID,ParentID) VALUES (1,NULL),(2,1),(3,2),(4,3);
Run Code Online (Sandbox Code Playgroud)
我意图得到
ID Highest ParentID
1 NULL
2 1
3 1
4 1
Run Code Online (Sandbox Code Playgroud)
我计划创建一个递归查询(MySQL 8 或 MariaDB 10.5),方法是添加一个条件,以在 Parent ID 为特定值(例如,上述情况下为 NULL)时中断递归。我开始于
WITH RECURSIVE cte (ID, ParentID) as (
SELECT ID,ParentID FROM t1
UNION ALL
SELECT t2.ID,t2.ParentID FROM t1 t2
INNER JOIN cte on t2.ParentID = cte.ID
)
SELECT * FROM cte; …Run Code Online (Sandbox Code Playgroud) mysql ×10
mysql-5.5 ×4
join ×3
select ×3
group-by ×2
innodb ×2
performance ×2
query ×2
update ×2
constraint ×1
foreign-key ×1
insert ×1
recursive ×1
subquery ×1
trigger ×1