我正在尝试:
"CREATE DEFINER=`root`@`localhost` TRIGGER `alphabetic sorting by surname` AFTER INSERT ON `contacts` FOR EACH ROW ALTER TABLE contatti ORDER BY surname ASC"
但我明白了 #1422 - 存储函数或触发器中不允许显式或隐式提交。
我很长时间没有触摸数据库,我需要做什么?
它应该是一个应用程序在多个智能手机上打开的电话号码列表,所以每次在手机上对联系人列表进行排序都没有意义,对我而言看起来更多高效地保持在服务器端排序。
谢谢任何人。
答案 0 :(得分:0)
表没有按定义排序,查询必须有ORDER BY
子句来保证结果行的特定顺序。
但是,您可以创建覆盖索引。它首先限制列,即WHERE
子句中使用的列,然后是ORDER BY
中的列,然后是所有其他选定的列。然后,DBMS将能够从索引中选择所有数据,而无需访问实际表,数据将按所需顺序排列。
当然,查询仍将包含相应的ORDER BY
子句,但DBMS(希望)会注意到它不再需要执行排序操作以获得所需顺序的数据。
示例1:
create index idx_contacts_byarea on contacts (area, surname, firstname, phone);
select firstname, surname, phone from contacts where area = 51 order by surname;
示例2:
create index idx_contacts_all on contacts (surname, firstname, phone);
select firstname, surname, phone from contacts where order by surname;