MySQL支持SQL标准,同时在SQL标准上面做了拓展,有不一样的语法和数据库特性。本文记录MySQL数据库的SQL语句,并不是针对SQL,虽有有很大的相似之处。
在学习和使用过程中的MySQL版本是:5.7.17。
本文针对MySQL4.1及其以上版本的使用。
一、MySQL引入的主题的主要变化过程:
4——InnoDB引擎,增加事务处理,并,改进全文本搜索等。
4.1——函数库、子查询、集成帮助等的重要增加。
5——存储过程、触发器、游标、视图等的增加。
二、DOS窗口登录MySQL数据库
首先使用cmd打开DOS命令行界面,然后分成两种情况:
1)没有在环境变量中配置MySql Server的path路径
配置方法如下:在系统环境变量的path变量名中添加下面路径的bin目录:C:\Program Files\MySQL\MySQL Server 5.7\bin
,这个路径是具体情况而定,不管MySQL安装在那个盘中,一定是MySQL Server 的bin目录。配置了环境变量之后的使用方法见下面。
假如没有配置环境变量,还可以这样使用:
在DOS命令行中使用cd进入到上面路径的bin目录下,然后按照“配置了环境变量”的使用方法进行操作。
2)已经在环境变量中配置过MySQL Server的path路径
mysql -h localhost -u root -p | 登录MySQl数据库。-h表示主机名,这里在本地;-u表示登录用户;这里是root用用户;-p是用户密码 |
---|---|
show databases;回车 | 显示当前用户下已有的数据库。MySQL数据库中的命令必须以 ; 结尾 |
use + 数据库名; | 使用该数据库 |
show tables; | 显示数据库中的表 |
show columns from + 表名; |
显示表列,包括列名,各种完整性,数据类型等详细信息 |
exit;回车 | 退出数据库登录 |
create user 'test'@'localhost' identified by '123456'; | root用户下创建test用户。@表示访问的主机名,identified by表示密码。localhost表示允许本机IP(127.0.0.1)访问(使用局域网的主机IP使用下面一条语句) |
create user 'test_1'@'%' identified by '123456' | root用户下创建test_1用户。允许使用外网Ip访问,本机当然可以 |
flush privileges; | root用户下刷新授权 |
三、MySQL语句详解
在MySQL数据库连接工具Navicat和DOS命令行中,都可以使用下面的MySQL语句来进行MySQL的操作。假如有表products。
语句示例 |
解释说明 |
---|---|
SELECT prod_name FROM products; | SELECT表示查询的列。可以有多列,列名之间使用“,”分割开来;FROM表示使用的表。 |
SELECT * FROM products; | 检索所有的列。能够检索出表中未知的列 |
SELECT DISTINCT vend_id FROM products; | DISTINCT消除检索中相同的行。如果DISTINCT后面跟了不止一个列,DISTINCT作用于每一个列,即DISTINCT的作用是消除不同的行。 |
SELECT prod_name FROM products LIMIT x, y; | LIMIT用于限制检索出来的行数。意思是从第x行开始的y行。 |
SELECT products.prod_name FROM crashcourse.products; |
使用完全限定。product表示一张表,crashcourse表示一个数据库,数据库中有products表。 |
SELECT prod_name FROM products ORDER BY prod_name | ORDER BY子句表示使用列进行排序。默认的排序方向是英语字母升序排列,排序使用的列还可以是非检索的列。 |
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name; |
ORDER BY子句按多个行进行排序。多个列排序时,排序完全按照语句中列的顺序进行,即后面列的排序是在前面排序结果的基础上面进行。ORDER BY子句位于FROM之后,LIMIT之前,位置不当会产生错误信息。 |
SELECT prod_id, prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name; | 指定ORDER BY子句的排序方向。ASC指定为按照字母升序排列,默认的;DESC指定为降序排列。当有多个列排序时,一个DESC/ASC只作用于一个列。 |
SELECT products, prod_price FROM products WHERE prod_price = 2.50; | WHERE子句过滤数据。WHERE子句位于FROM之后,ORDER BY子句之前。 |
SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses'; | WHERE子句进行数据过滤。加上''表示字符串。 |
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; |
BETWEEN进行范围值检查。第一个为开始值,第二个为结束值,该范围中包括这两个值。 |
SELECT prod_name FROM products WHERE prod_price IS NULL; |
WHERE进行空值过滤。空值与字段包含0、空字符串或仅仅包含空格不同。 |
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10; | AND操作符:用于WHERE子句中的关键词,用来指示检索满足所有给定条件的行。过滤每增加一条就使用一个AND。 |
SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003; | OR操作符:WHERE子句中使用的关键字,表示检索匹配任意给定条件的行。 |
SELECT prod_name,prod_price FROM products WHERE vend_id = 1024 OR vend_id = 1003 AND prod_price >= 10; | AND操作符和OR操作符的计算次序:AND优先级高于OR。建议:无论使用默认的优先级次序还是使用括号改变计算优先次序,都建议使用括号,这样子很明确。 |
SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name; | IN操作符:用在WHERE子句中指定要匹配的清单的关键字,功能和OR相当。使用IN关键字有如下优点: 1)IN执行速度比OR快。 2)使用IN更加清晰明了,使用较少的OR 3)IN可以包含其他SELECT语句,使得能够更加动态建立WHERE子句。 |
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name; | NOT操作符:WHERE子句中用来否定后跟条件的关键字。MySQL支持使用NOT对IN,BETWEEN和EXISTS子句进行取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。 |
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'jet%'; | LIKE谓词:用于WHERE子句中过滤数据,通配符搜索模式放置到LIKE谓词之后。 通配符搜索模式:由通配符或者通配符和字面值共同组成的搜索条件。通配符匹配从字符串首端开始进行模式匹配,不是从串的中间某个位置开始匹配。 NULL:通配符不能匹配NULL 注意首尾空格:首尾空格在肉眼识别上面对串没有区别,但是在计算机进行模式匹配时会有影响。 |
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '%anvil%'; | %(百分号)通配符:任意字符出现任意次数,可以是0次。 通配符使用技巧: 1)尽量不使用通配符,因为通配符执行起来很慢。 2)尽量1不要再搜索模式开始处使用通配符,开始处的通配符搜索起来是最慢的。 |
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ ton anvil'; | _(下划线)通配符:匹配单个字符。 通配符使用技巧: 3)通配符不要放错位置。 |
操作符 | 说明 |
---|---|
= |
等于 |
<> 或 != | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
注意:
1)关系数据库设计理论认为,如果没有明确规定检索结果的排序方式,检索结果没有顺序之分;MySQL中也没有顺序之分。
2)在SQL中,有的区分大小写,有的不区分大小写,所以应该按照规范书写SQL语句。
3)在处理SQL语句时,会将所有的空格忽略掉。
4)mySQL第一行为行0。