相关疑难解决方法(0)

MySQL中的CHECK约束不起作用

首先,我创建了一个像

CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);
Run Code Online (Sandbox Code Playgroud)

然后在该表中插入值

INSERT INTO Customer values ('-2','abc','zz');
Run Code Online (Sandbox Code Playgroud)

MySQL没有显示错误,它接受了值.

mysql check-constraints

126
推荐指数
5
解决办法
9万
查看次数

为什么MySQL允许"分组"查询没有聚合函数?

惊喜 - 这是MySQL中完全有效的查询:

select X, Y from someTable group by X
Run Code Online (Sandbox Code Playgroud)

如果您在Oracle或SQL Server中尝试过此查询,则会收到自然错误消息:

Column 'Y' is invalid in the select list because it is not contained in 
either an aggregate function or the GROUP BY clause.
Run Code Online (Sandbox Code Playgroud)

那么MySQL如何确定每个X显示哪个Y?它只选了一个.据我所知,它只是挑选它找到的第一个Y. 理由是,如果Y既不是聚合函数也不是group by子句,那么在查询中指定"select Y"就没有意义.因此,我作为数据库引擎将返回我想要的任何内容,你会喜欢它.

甚至还有一个MySQL配置参数来关闭这种"松散". http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

本文甚至提到MySQL在这方面如何被批评为ANSI-SQL不兼容. http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html

我的问题是: 为什么 MySQL是这样设计的?打破ANSI-SQL的理由是什么?

mysql sql standards-compliance ansi-sql

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