MySQL对标准SQL的扩展

1.8.4. MySQL对标准SQL的扩展

MySQL服务器包含一些其他SQL DBMS中不具备的扩展。注意,如果使用了它们,将无法把代码移植到其他SQL服务器。在某些情况下,你可以编写包含MySQL扩展的代码,但仍保持其可移植性,方法是用“/*... */”注释掉这些扩展。在本例中,MySQL服务器能够解析并执行注释中的代码,就像对待其他MySQL语句一样,但其他SQL服务器将忽略这些扩展。例如:

SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...

如果在字符“!”后添加了版本号,仅当MySQL的版本等于或高于指定的版本号时才会执行注释中的语法:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

这意味着,如果你的版本号为3.23.02或更高,MySQL服务器将使用TEMPORARY关键字。

下面按类别介绍了各种MySQL扩展。

·         磁盘上的数据组织

MySQL服务器会将每个数据库映射到MySQL数据目录下的1个目录中,并将数据库中的表映射到数据库目录下的文件名。它具有下述含义:

o        如果操作系统的文件名区分大小写(如大多数Unix系统),当MySQL服务器运行在这类操作系统上时,数据库名和表名也区分大小写。请参见9.2.2节,“识别符大小写敏感性”

o        你可以使用标准的系统命令来备份、重命名、移动、删除、并拷贝由MyISAM或ISAM存储引擎管理的表。例如,要想重命名MyISAM表,可重命名表对应的.MYD、.MYI、以及.frm文件。

数据库、表、索引、列或别名能够以数字开头(但或许不能全部由数字构成)。

·         通用语言语法

o        可以使用“””或“’”括住字符串,而不仅是“’”。

o        在字符串中使用“\”作为转义字符。

o        在SQL语句中,可以使用“db_name.tbl_name”语法访问不同数据库中的表。某些SQL服务器提供了相同的功能,但调用该用户空间除外。MySQL服务器不支持表空间,如下述语句中使用的那样: CREATE TABLE ralph.my_table...IN my_tablespace.

·         SQL语句的语法

o        ANALYZE TABLE,CHECK TABLE,OPTIMIZE TABLE,以及REPAIR TABLE语句。

o        CREATE DATABASE和DROP DATABASE语句。请参见13.1.3节,“CREATE DATABASE语法”

o        DO语句。

o        EXPLAIN SELECT获取如何联合表的介绍。

o        FLUSH和RESET语句。

o        SET语句。请参见13.5.3节,“SET语法”

o        SHOW语句。请参见13.5.4节,“SHOW语法”

o        使用LOAD DATA INFILE。在很多情况下,该语法与Oracle的LOAD DATA INFILE兼容。请参见13.2.5节,“LOAD DATA INFILE语法”

o        RENAME TABLE的使用。请参见13.1.9节,“RENAME TABLE语法”

o        使用REPLACE取代DELETE + INSERT。请参见13.2.6节,“REPLACE语法”

o        在ALTER TABLE语句中使用CHANGE col_name、DROP col_name、或DROP INDEX、IGNORE或RENAME。在ALTER TABLE语句中使用多个ADD、ALTER、DROP或CHANGE子句。请参见13.1.2节,“ALTER TABLE语法”

o        使用索引名,字段前缀上的索引,并在CREATE TABLE语句中使用INDEX或KEY。请参见13.1.5节,“CREATE TABLE语法”

o        与CREATE TABLE一起使用TEMPORARY或IF NOT EXISTS。

o        与DROP TABLE一起使用IF EXISTS。

o        使用单个DROP TABLE语句,能够舍弃多个表。

o        UPDATE和DELETE语句的ORDER BY和LIMIT子句。

o        INSERT INTO ... SET col_name = ... syntax.

o        INSERT和REPLACE语句的DELAYED子句。

o        INSERT、REPLACE、DELETE和UPDATE语句的LOW_PRIORITY子句。

o        在SELECT语句中使用INTO OUTFILE和STRAIGHT_JOIN。请参见13.2.7节,“SELECT语法”

o        SELECT语句中的SQL_SMALL_RESULT选项。

o        不需要在GROUP BY部分命名所有选择的列。对于某些十分特殊但相当正常的查询,它能提供更好的性能。请参见12.10节,“与GROUP BY子句同时使用的函数和修改程序

o        可以与GROUP BY一起指定ASC和DESC。

o        能够在带有“:=”赋值操作符的语句中设置变量。

o                     mysql> SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg
o                         -> FROM test_table;
o                     mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;

·         列类型

o        列类型MEDIUMINT、SET、ENUM、以及不同的BLOB和TEXT类型。

o        列属性AUTO_INCREMENT、BINARY、NULL、UNSIGNED以及ZEROFILL。

·         函数和操作符

o        为了使其他SQL环境下的用户更容易入手,MySQL服务器对很多函数均支持别名特性。例如,所有的字符串函数均支持标准SQL语法和ODBC语法。

o        MySQL服务器能够理解“||”和“&&”操作符,将其当作逻辑OR和AND,就像在C编程语言中那样。在MySQL服务器中,||和OR是同义词,&&和AND也是同义词。由于采用了该优异的语法体系,MySQL服务器不支持SQL针对字符串连接的“||”操作符,而采用了CONCAT()取而代之。由于CONCAT()能够接受任意数目的参量,很容易将使用“||”操作符的情况转换为MySQL服务器支持的类型。

o        请在有多于1个元素的场合下使用COUNT(DISTINCT list)。

o        默认情况下,所有的字符串比较均区分大小写,其分类顺序由当前字符集确定(默认为cp1252 Latin1)。如果你不喜欢该点,应使用BINARY属性或BINARY cast声明列,这样,就会使用基本的字符代码值进行比较,而不是词汇顺序。

o        “%”操作符等同于MOD()。也就是说“N % M”等同于MOD(N,M)。Cyuyan的程序员支持“%”,而且它也是为了兼容PostgreSQL而使用的。

o        在列比较中,可在SELECT语句的FROM左侧使用=、<>、<=、<、>=、>、<<、>>、<=>、AND、OR或LIKE操作符。例如:

o                     mysql> SELECT col1=1 AND col2=2 FROM tbl_name;

o        返回最近AUTO_INCREMENT值的LAST_INSERT_ID()函数。请参见12.9.3节,“信息函数”

o        允许在数值列上使用LIKE。

o        REGEXP和NOT REGEXP扩展了常规的表达式操作符。

o        具有1个或2个以上参量的CONCAT()或CHAR()。(在MySQL服务器中,这些函数可以有任意数目的参量)。

o        BIT_COUNT()、CASE、ELT()、FROM_DAYS()、FORMAT()、IF()、PASSWORD()、ENCRYPT()、MD5()、ENCODE()、DECODE()、PERIOD_ADD()、PERIOD_DIFF()、TO_DAYS()、以及WEEKDAY()函数。

o        使用TRIM()来调整子字符串。标准SQL仅支持单个字符的删除。

GROUP BY函数STD()、BIT_OR()、BIT_AND()、BIT_XOR()、以及GROUP_CONCAT()。请参见 12.10节,“与GROUP BY子句同时使用的函数和修改程序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 标准 MySQL 用户SQL 语句如下: ``` CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE ); ``` 这条语句创建了一个名为 "users" 的,包含四个字段: - "id":整数类型,自动递增且为主键。 - "username":字符串类型,不允许为空且唯一。 - "password":字符串类型,不允许为空。 - "email":字符串类型,不允许为空且唯一。 这只是一个简单的示例,在实际使用中,您需要根据自己的需求进行调整和扩展。 ### 回答2: 标准MYSQL用户SQL语句如下: ``` CREATE TABLE user ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY username (username), UNIQUE KEY email (email) ); ``` 上述SQL语句创建了一个名为`user`的用户中包含以下字段: - `id`:用户ID,采用自增长的方式进行唯一标识; - `username`:用户名,最大长度为50个字符,不允许为空; - `password`:密码,最大长度为50个字符,不允许为空; - `email`:电子邮箱,最大长度为100个字符,不允许为空; - `created_at`:创建时间,采用默认值`CURRENT_TIMESTAMP`设置为当前时间戳; - `PRIMARY KEY (id)`:将`id`字段设为主键,确保每个用户记录的唯一性; - `UNIQUE KEY username (username)`:将`username`字段设为唯一键,确保用户名的唯一性; - `UNIQUE KEY email (email)`:将`email`字段设为唯一键,确保电子邮箱的唯一性。 以上就是标准MYSQL用户SQL语句。 ### 回答3: 标准MySQL用户SQL语句主要包括创建用户和插入数据两部分。 创建用户SQL语句如下: ``` CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 以上语句创建了一个名为"user"的,包括"id"、"username"、"password"、"email"、"created_at"和"updated_at"六个字段。其中,"id"为主键,自动递增;"username"、"password"、"email"为字符串类型,并且不能为空;"created_at"和"updated_at"为时间戳类型,默认值为当前时间,"updated_at"字段在更新时自动更新。 插入数据的SQL语句如下: ``` INSERT INTO user (username, password, email) VALUES ('user1', 'pass1', 'user1@example.com'), ('user2', 'pass2', 'user2@example.com'), ('user3', 'pass3', 'user3@example.com'); ``` 以上SQL语句将三个用户的用户名、密码和电子邮件插入到用户中。 通过以上的创建用户和插入数据的SQL语句,可以创建一个标准MySQL用户格,并向中插入初始数据。当然,根据实际需求,用户还可以根据需要增加其他字段,例如手机号码、地址等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值