mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL

约束

mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL_第1张图片

由于当用外键的时候默认的必须是innodb,如果不是innodb 的话,可以更改存储引擎为innodb,在my.ini 中更改存储引擎为innodb

mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL_第2张图片可以通过配置文件更改存储引擎为innodb

mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL_第3张图片

 

mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL_第4张图片 数据类型不相同不能创建表

禁用外键约束
SET FOREIGN_KEY_CHECKS=0;
启动外键约束
SET FOREIGN_KEY_CHECKS=1;
查看当前FOREIGN_KEY_CHECKS的值
SELECT  @@FOREIGN_KEY_CHECKS; 

 

mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL_第5张图片

mysql之any,some all
ALL、ANY和SOME子查询
ALL和ANY操作符的常见用法是结合一个相对比较操作符对一个数据列子查询的结果进行测试。它们测试比较值是否与子查询所返回的全部或一部分值匹配。比如说,如果比较值小于或等于子查询所返回的每一个值,<= ALL将是true;只要比较值小于或等于子查询所返回的任何一个值,<= ANY将是true。SOME是ANY的一个同义词。
下面这条语句用来检索最早出生的总统,具体做法是选取出生日期小于或等于president数据表里的所有出生日期(只有最早的出生日期满足这一条件)的那个数据行:
mysql> SELECT last_name, first_name, birth FROM president  
     -> WHERE birth <= ALL (SELECT birth FROM president);  
 +------------+------------+------------+  
 | last_name  | first_name | birth      |  
 +------------+------------+------------+  
 | Washington | George     | 1732-02-22 |  
 +------------+------------+------------+  
下面这条语句的用处就不大了,它将返回所有的数据行,因为对于每个日期,至少有一个日期(它本身)大于或等于它:

mysql> SELECT last_name, first_name, birth FROM president  
     -> WHERE birth <= ANY (SELECT birth FROM president);   
+------------+---------------+------------+  
 | last_name  | first_name    | birth      |  
 +------------+---------------+------------+  
 | Washington | George        | 1732-02-22 |  
 | Adams      | John          | 1735-10-30 |  
 | Jefferson  | Thomas        | 1743-04-13 |  
 | Madison    | James         | 1751-03-16 |  
 | Monroe     | James         | 1758-04-28 |  
 ...  
当ALL、ANY或SOME操作符与"="比较操作符配合使用时,子查询可以是一个数据表子查询。此时,你需要使用一个数据行构造器来提供与子查询所返回的数据行进行比较的比较值。
mysql> SELECT last_name, first_name, city, state FROM president  
     -> WHERE (city, state) = ANY  
     -> (SELECT city, state FROM president  
     -> WHERE last_name = 'Roosevelt');  
 +-----------+-------------+-----------+-------+  
 | last_name | first_name  | city      | state |  
 +-----------+-------------+-----------+-------+  
 | Roosevelt | Theodore    | New York  | NY    |  
 | Roosevelt | Franklin D. | Hyde Park | NY    |  
 +-----------+-------------+-----------+-------+  
前一节里提到过,IN和NOT IN操作符是= ANY和< > ALL的简写。也就是说,IN操作符的含义是"等于子查询所返回的某个数据行",NOT IN操作符的含义是"不等于子查询所返回的任何数据行"。
UNION和UNION ALL的作用和语法
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行

你可能感兴趣的:(mysql(四)--约束,Having,mysql之any,some all,UNION和UNION ALL)