Tag: ansi sql

MySQL的 – 报价号码或不?

例如 – 我从cli创build数据库和表,并插入一些数据: CREATE DATABASE testdb CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; USE testdb; CREATE TABLE test (id INT, str VARCHAR(100)) TYPE=innodb CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; INSERT INTO test VALUES (9, 'some string'); 现在我可以做到这一点,这些例子的工作(所以 – 引号不会影响任何东西似乎): SELECT * FROM test WHERE id = '9'; INSERT INTO test VALUES ('11', 'some string'); 所以 – 在这些例子中,我select了一个string ,实际上存储为INT的string […]

如何重写IS DISTINCT FROM和不DISTINCT FROM?

在Microsoft SQL Server 2008R2等不支持SQL的实现中,如何重写包含标准IS DISTINCT FROM和IS NOT DISTINCT FROM运算符的expression式?

为什么没有数据库完全支持ANSI或ISO SQL标准?

如果我在devise一个炼油厂,我不会期望来自不同供应商的材料不会以微妙而重要的方式遵守公布的标准。 来自一个供应商的pipe道,阀门和其他部件可能会带有符合ANSI标准的法兰和壁厚,同样来自任何其他供应商的部件也是如此。 因此互操作性和系统安全性得到保证。 那么为什么常见的数据库对于他们所遵守的标准的哪些部分是如此挑剔,以及为什么没有100%符合标准的系统脱颖而出呢? 标准是否被打破,缺乏范围或难以devise? 得出这个结论; ANSI(或ISO)定义SQL标准的重点是什么? 编辑: 常用数据库之间的实现差异列表

何时使用SELECT … FOR UPDATE?

请帮我理解SELECT … FOR UPDATE的用例。 问题1 :下面是SELECT … FOR UPDATE一个很好的例子吗? 鉴于: 客房[ID] 标签[id,name] room_tags [room_id,tag_id] room_id和tag_id是外键 应用程序想要列出所有房间及其标签,但需要区分没有标签的房间和已被移除的房间。 如果不使用SELECT … FOR UPDATE,会发生什么情况是: 原来: 房间包含[id = 1] 标签包含[id = 1, name = 'cats'] room_tags包含[room_id = 1, tag_id = 1] 主题1: SELECT id FROM rooms; returns [id = 1] 线程2: DELETE FROM room_tags WHERE room_id = 1; 线程2: DELETE […]

是否有一个ANSI SQL替代MYSQL LIMIT关键字?

是否有一个ANSI SQL替代MYSQL LIMIT关键字? LIMIT关键字限制了SELECT返回的行数,例如: SELECT * FROM People WHERE Age > 18 LIMIT 2; 返回2行。 SELECT * FROM People WHERE Age > 18 LIMIT 10, 2; 在第一个10之后返回2行。

为什么SQL ANSI-92标准没有被ANSI-89更好地采用呢?

在我工作过的每个公司,我发现人们仍然在用ANSI-89标准编写他们的SQL查询: select a.id, b.id, b.address_1 from person a, address b where a.id = b.id 而不是ANSI-92标准: select a.id, b.id, b.address_1 from person a inner join address b on a.id = b.id 对于这样一个非常简单的查询,可读性没有太大差别,但是对于大型查询,我发现将我的连接条件分组并列出表格可以更容易地查看我的连接中可能存在的问题,让我在我的WHERE子句中保留所有的过滤。 更不用说我觉得外连接比Oracle中的(+)语法更直观。 当我试图向人们传播ANSI-92时,在使用ANSI-92而不是ANSI-89上有什么具体的性能好处? 我会自己尝试,但是我们在这里的Oracle设置不允许我们使用EXPLAIN PLAN – 不想让人们尝试优化他们的代码,是吗?