MySql学习笔记(一) - 常用的基本命令

USE [database] 选择要使用的的数据库
SHOW DATABASES 显示所有可以使用的数据库
SHOW TABLES 返回当前选择的数据库内可用的列表
SHOW COLUMNS FROM [table] 返回表内的所有字段
SHOW STATUS 显示服务器的状态信息
SHOW CREATE DATABASE 显示创建数据库的语句
SHOW CREATE TABLE 显示创建表的语句
SHOW ERROR | SHOW WARNINGS 显示服务器的错误或者警告
SELECT [fields | *] FROM [table] 检索表中fields字段或全部字段,fields之间用 ‘,’分隔
SELECT DISTINCT [fields] FROM [table] 只返回唯一的行(去重)
SELECT [fields | *] FROM [table] LIMIT [number] 只返回number条数据
SELECT [fields | *] FROM [table] LIMIT [start],[number] 从第start条开始,返回number条数据,常用于分页 **1
SELECT [table.fields] FROM [database.table] 使用全限定名来检索
SELECT [fields | *] FROM [table] ORDER BY [fields] 根据一个或多个字段进行排序(默认升序ASC)**2
SELECT [FIELDS | *] FROM [table] ORDER BY [fields] DESC 根据一个或多个字段降序排序
SELECT [fields | *] FROM [table] ORDER BY [fidlds1] DESC,[fields2]

根据fidles1进行降序,当值相等时,对fields2进行升序排序

SELECT [fields | *] FROM [table] ORDER BY [field] {DESC} LIMIT 1 返回最大或最小的行
SELECT [fields | *] FROM [table] WHERE [~]

根据条件进行查询

=    <>    !=    <    >    <=    >=    BETWEEN

SELECT [fields | *] FROM [table] WHERE [~1] AND [~2] 条件~1和~2同时满足才返回 **3
SELECT [fields | *] FROM [table] WHERE [~1] OR [~2] 条件~1和~2满足一个即返回
SELECT [fields | *] FROM [table] WHERE [field] IN (v1,v2,...)

字段field满足 IN 中的 v1,v2,... 即返回 **4

SELECT [fields | *] FROM [table] WHERE [field] NOT IN (v1,v2,...) 字段field不满足IN中的v1,v2,..即返回 **5
SELECT [fields | *] FROM [table] WHERE  [field] LIKE 'mi%' 查找字段field开头为mi的行,还有'%mi','%mi%' **6
SELECT [fields | *] FROM [table] WHERE [field] LIKE '_mi' 与%不同,_只匹配1个位置的字符,%匹配0个或多个
SELECT [fields | *] FROM [table] WHERE [field] REGEXP '1000' 匹配field包含'1000'的行
SELECT [fields | *] FROM [table] WHERE [field] REGEXP '.000' 匹配field包含'_000'的行,_为任意一个字符 **7
SELECT [fields | *] FROM [table] WHERE [field] REGEXP '[123] Ton' ORDER BY [field] s使用正则表达式[123] Ton。[123]定义一组字符,意思是匹配1或2或3。则结果为1 Ton,2 Ton,3 Ton
SELECT [fields | *] FROM [table] WHERE [field] REGEXP '1|2|3 Ton' ORDER BY [field] 匹配包含'1','2','3 Ton'的field,[^123]匹配除123之外字符之外的任何内容 **8
匹配字符类 说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
匹配多个实例(元字符) 说明
* 0个或多个匹配
+ 1个或多个匹配
0个或1个匹配
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
SELECT [fields | *] FROM [table] WHERE [field] REGEXP '\\([0-9]  sticks?\\)' ORDER BY [field] \\(匹配)[0-9]匹配任意数字,sticks?匹配stick和sticks(s后的?使s可选,因为?匹配他前面的任何字符的0次或1次出现),\\)匹配) **9
SELECT [fields | *] FROM [table] WHERE [field] REGEXP '[[:digit:]{4}]' ORDER BY [field] [:digit:]匹配任意数字,因为它为数字的一个集合。{4}确切要求它前面的字符(任意数字)出现4次 **9
定位元字符 说明
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
SELECT [fields] FROM [table] WHERE [field] REGEXP '^[0-9\\.]' ^匹配串的开始。因此^[0-9\\.]只在.或任意数字为串中的第一个字符时才匹配他们。 **10
1. SELECT * FROM product LIMIT 10,5

    如果表 product 只有13条数据,则只返回3条数据

2. SELECT * FROM product ORDER BY name WHERE id > 10

    a 与 A的顺序在大多数MySql数据库中默认为相同的,但可以改变这种行为

    ORDER BY 子句应该位于 WHERE 子句之后

3. SELECT * FROM product WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price > 10

    由于 AND 的优先级大于 OR 所以先执行 vend_id = 1003 AND prod_price > 10,如果想要先执行 vend_id = 1002 OR vend_id = 1003 则改为 :

        SELECT * FROM product WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price > 10

    在多条件时,应该尽量使用()消除歧义

4. SELECT * FROM product WHERE vend_id IN (1002,1003)

    与SELECT * FROM product WHERE vend_id = 1002 OR vend_id = 1003 返回结果相同

    但是使用 IN 是因为:

        ■当语句较长时,IN操作符的语法更清楚且直观

        ■在使用IN时,计算的次序更容易管理(因为使用的操作符少)

        ■IN操作符一般比OR操作符清单执行更快

        IN的最大优点是可以包含其他的SELECT语句,使得能够更动态的建立WHERE子句

5. SELECT * FROM product WHERE vend_id NOT IN (1002,1003)

    为什么使用 NOT ?对于简单的WHERE子句,使用NOT没有什么优势。但在更复杂的子句中,NOT是非常有用的。例如在与IN操作符联合使用时,NOT使找出与条件列表不匹配的行为非常简单

    NOT支持对IN,BETWEEN和EXISTS子句取反

6. 通配符使用技巧

    ■不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符

    ■在确实需要使用通配符时,除非绝对必要,否要不要把他们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的

    ■仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据

7. SELECT * FROM product WHERE prod_name REGEXP '1000|2000|3000'

    '|'为正则表达式的OR操作符。表示匹配其中之一。

8. 正则表达式使用

    匹配范围:[0123456789]        --->        [0-9]

                     [34567]                  --->        [3-7]

                     [abcd..xyz]             --->        [a-z]

    匹配特殊字符:SELECT vend_name FROM product WHERE vend_name REGEXP '.' ORDER BY vend_name

        执行后会返回所有内容,预期是要查询vend_name带'.'的行,只是因为'.'为匹配任意字符,因此每个行都被检索出来

        为了匹配所有特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.。修改后为

    SELECT vend_name FROM product WHERE vend_name REGEXP '\\.' ORDER BY vend_name

        正则表达式内具有特殊意义的所有字符都必须转义。这包括 . []\以及迄今为止使用过的其他字符

            \\f            换页

            \\n           换行

            \\r            回车

            \\t            制表

            \\v            纵向制表 

9. 可能匹配的内容

    \\([0-9]  sticks?\\): (1 stick)    (5 sticks)

    [[:digit:]{4}]: JetPack 1000    JetPack 2000

10. ^的双重用途

    ^有两种用法。在集合中(用[和]定义),用他来否定该集合,否则值串的开始处。

    REGEXP和LIKE的不同之处在于,LIKE匹配整个串而REGEXP匹配字串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样

猜你喜欢

转载自blog.csdn.net/u010960184/article/details/80556579
今日推荐