mysql8之与标准sql的区别

一  mysql8概述

   在研究mysql8新特性的时候,越来越感觉mysql8朝sql server看齐。看来对于中小型企业级应用也挺有兴趣,但是没有企业级的应用套件,有知道的麻烦告知。本文不探讨mysql8的结构变化,函数变化,

以及新增的功能。仅仅阐述下mysql8在sql语法上与标准sql的一点点区别,作为研究mysql系列文章的开篇

二  mysql8sql与标准sql的些许差异

  REVOKE:在mysql删除一个表的时候,是不自定执行revoke权限的,必须手动执行revoke

  CAST:这个函数不支持转换 REAL 和 BIGINT

  SELECT INTO TABLE的语法不同:mysql不支持此语法,替换的是支持INSERT ....SELECT 和CREATEA TABLE ....SELECT和 SELECT ... INTO OUTFILE

   UPDATE 不同:UPDATE t1 SET col1 = col1 + 1, col2 = col1; 这条语句的结果是col1和col2最后是同一个值,col2 = col1这条表达式,col1并没有取源值。

三  foreign key 的不同  

  1 ,如果子表引用父表的值,在父表中有多行,那么这些行是都不能删除的。

  2,一个外键可以是非唯一的键值。

  3, ON UPDATE CASCADE or ON UPDATE SET NULL是不能自引用的,但是 ON DELETE SET NULL可以, ON DELETE CASCADE或许可以,但是嵌套是不能超过15.

  4,在一个增删改的多行的语句,外键约束,比如唯一约束,是一行一行的被检查。外键约束检查功能的时候,innodb设置一个共享锁,在必须被检查的子或者父行上。mysql立即检查约束;检查没有被延迟到事务提交。语句sql标准,默认的动作应当被延迟检查,即是,约束仅仅是被检查在整个sql语句被处理完成后,

四 comment的不同

  标准sql使用c风格的注释: /* this is a comment */.mysql同样支持这种样式,同时扩展这种风格,让mysql独特的sql可以嵌入在注释中,标准sql的注释风格使用“--”开始,mysql使用#开始注释字符。mysql也支持--注释样式的变种。就是 --开始,但是 必须跟随一个space,或者一个控制字符,比如新行。space避免自动生成sql查询的一些问题,如下例子:

UPDATE account SET credit=credit-paymet

如果payment是一个负值,比如-1,那么语句就变成:

UPDATE account SET credit=credit--1
credit--1是一个合法的表达式,但是--被解释作为注释的开始字符,注释被丢弃,实际执行的sql就成如下:
UPDATE account SET credit=cred

使用mysql实现需要一个space跟随在--,从而被识别为一个开始注释的符号。

posted @ 2019-03-07 12:05  无为有道  阅读(1968)  评论(0编辑  收藏  举报