当前位置: 代码网 > it编程>数据库>Mysql > MySQL对标准SQL的扩展方式

MySQL对标准SQL的扩展方式

2025年02月27日 Mysql 我要评论
mysql对标准sql的扩展mysql服务器支持一些其他sql数据库管理系统中不太可能找到的扩展功能。请注意,如果您使用这些扩展功能,您的代码可能无法在其他sql服务器上移植。在某些情况下,您可以编写

mysql对标准sql的扩展

mysql服务器支持一些其他sql数据库管理系统中不太可能找到的扩展功能。请注意,如果您使用这些扩展功能,您的代码可能无法在其他sql服务器上移植。

在某些情况下,您可以编写包含mysql扩展功能但仍然可移植的代码,通过使用以下形式的注释:

/*! mysql-specific code */

在这种情况下,mysql服务器解析并执行注释中的代码,就像处理任何其他sql语句一样,但其他sql服务器应该忽略这些扩展功能。

例如,mysql服务器可以识别以下语句中的straight_join关键字,但其他服务器则不会:

select /*! straight_join */ col1 from table1,table2 where ...

如果在'!'字符之后添加版本号,那么注释中的语法只有在mysql版本大于或等于指定的版本号时才会执行。

以下注释中的key_block_size子句仅在mysql 5.1.10或更高版本的服务器上执行:

create table t1(a int, key (a)) /*!50110 key_block_size=1024 */;

以下描述按照类别列出了mysql的扩展功能:

磁盘上的数据组织方式

mysql服务器将每个数据库映射到mysql数据目录下的一个目录,并将数据库中的表映射到数据库目录中的文件名。因此,在具有区分大小写文件名的操作系统上(例如大多数unix系统),mysql服务器中的数据库和表名区分大小写。

通用语言语法

  • 默认情况下,字符串可以用双引号 " 或单引号 ' 括起来。如果启用了ansi_quotes sql模式,则字符串只能用单引号 ' 括起来,而服务器将双引号括起来的字符串解释为标识符。
  • \ 是字符串中的转义字符。
  • 在sql语句中,您可以使用db_name.tbl_name语法访问不同数据库中的表。一些sql服务器提供相同的功能,但将其称为用户空间。mysql服务器不支持类似以下语句中使用的表空间:create table ralph.my_table ... in my_tablespace。

sql语句语法

  • analyze table、check table、optimize table和repair table语句。
  • create database、drop database和alter database语句。
  • do语句。
  • 使用explain select语句可以获取查询优化器处理表的描述。
  • flush和reset语句。
  • set语句。
  • show语句。许多mysql特定的show语句产生的信息可以通过使用select查询information_schema以更标准的方式获得。
  • load data的用法。在许多情况下,此语法与oracle的load data兼容。
  • rename table的用法。
  • 使用replace而不是delete加insert的用法。
  • 在alter table语句中使用change col_name、drop col_name、drop index、ignore或rename的用法。在alter table语句中使用多个add、alter、drop或change子句的用法。
  • 在create table语句中使用索引名称、创建列前缀索引、以及使用index或key的用法。
  • 在create table语句中使用temporary或if not exists的用法。
  • 使用if exists的用法在drop table和drop database语句中。
  • 使用单个drop table语句删除多个表的功能。
  • update和delete语句中的order by和limit子句的用法。
  • insert into tbl_name set col_name = ...语法的用法。
  • insert和replace语句的delayed子句的用法。
  • 在select语句中使用into outfile或into dumpfile的用法。
  • 在select语句中使用straight_join或sql_small_result等选项的用法。
  • 在group by子句中不需要为所有选择的列命名。这对于一些非常特定但相当常见的查询可以提供更好的性能。
  • 可以在group by子句中使用asc和desc来指定排序顺序,而不仅仅是在order by子句中使用。
  • 使用:=赋值运算符在语句中设置变量的能力。

数据类型

  • 中等整数类型(mediumint),集合类型(set),枚举类型(enum),以及各种二进制大对象(blob)和文本(text)类型。
  • auto_increment(自动递增)、binary(二进制)、null(空值)、unsigned(无符号)和zerofill(填充零)是数据类型的属性。

函数和运算符(functions and operators)

  • 为了方便从其他sql环境迁移的用户,mysql server支持许多函数的别名。例如,所有字符串函数都支持标准sql语法和odbc语法。
  • mysql server 中的 || 和 && 运算符被理解为逻辑 or 和 and,在 c 编程语言中也是如此。在 mysql server 中,|| 和 or 是同义词,&& 和 and 也是如此。由于这种优雅的语法,mysql server 不支持标准的 sql || 运算符用于字符串连接;而是使用 concat() 函数来进行字符串连接。由于 concat() 函数接受任意数量的参数,因此很容易将使用 || 运算符的代码转换为 mysql server 的语法。
  • 使用 count(distinct value_list) 的情况是 value_list 包含多个元素。
  • 字符串比较在默认情况下是不区分大小写的,排序顺序由当前字符集的校对规则(默认为utf8mb4)确定。若要执行大小写敏感的比较,您可以在声明列时使用binary属性,或者使用binary转换操作符,这样比较将使用底层字符代码值而不是词法顺序进行。
  • % 运算符是 mod() 的同义词。也就是说,n % m 等同于 mod(n, m)。% 运算符支持给 c 程序员使用,并且与 postgresql 兼容性保持一致。
  • 在select语句中,可以在输出列列表(在from左侧)的表达式中使用=、<>, <=、<、>=、>、<<、>>、<=>、and、or或like运算符。
  • 例如:
mysql> select col1=1 and col2=2 from my_table;
  • last_insert_id() 函数返回最近插入的 auto_increment 值。
  • like 运算符允许在数值上使用。
  • regexp和not regexp是扩展正则表达式运算符。它们用于在比较中使用正则表达式来匹配或排除模式。
  • concat() 或者 char() 函数可以接受一个或多个参数。在 mysql server 中,这些函数可以接受可变数量的参数。
  • bit_count()、case、elt()、from_days()、format()、if()、md5()、period_add()、period_diff()、to_days() 和 weekday() 是mysql中可用的一些函数。
  • 使用 trim() 函数来修剪子字符串。标准 sql 只支持删除单个字符。
  • group by 函数包括 std()、bit_or()、bit_and()、bit_xor() 和 group_concat() 。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com