美文网首页
MySQL必知必会1

MySQL必知必会1

作者: 远方的橄榄树 | 来源:发表于2020-03-08 20:16 被阅读0次

    1、MySQL使用

    • 启动:net start mysql(windows版)

    • 登录:mysql -u root -p

    D:\MySQL\bin>mysql -u root -p
    Enter password: ******
    
    • 查看数据库列表:SHOW DATABASES

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | test               |
    +--------------------+
    
    • 使用数据库:USE test

    mysql> use test;
    Database changed
    
    • 获取一个数据库内的表的列表:SHOW TABLES

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | user           |
    +----------------+
    
    • 获取一个表内每个字段的信息:SHOW COLUMNS FROM user

    mysql> SHOW COLUMNS FROM user;
    +-------+--------------+------+-----+---------+----------------+
    | Field | Type         | Null | Key | Default | Extra          |
    +-------+--------------+------+-----+---------+----------------+
    | id    | int(11)      | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(255) | NO   |     | NULL    |                |
    | age   | int(11)      | YES  |     | NULL    |                |
    +-------+--------------+------+-----+---------+----------------+
    

    2、检索数据

    • 检索单个列 SELECT name FROM user

    mysql> SELECT name FROM user;
    +--------+
    | name   |
    +--------+
    | 小明   |
    | 小红   |
    | 小李   |
    +--------+
    

    注意
    1、未排序数据 如果读者自己试验这个查询,可能会发现显示输
    出的数据顺序与这里的不同。出现这种情况很正常。如果没有
    明确排序查询结果(下一章介绍),则返回的数据的顺序没有特殊意义。
    2、SQL语句和大小写 请注意,SQL语句不区分大小写,因此
    SELECT 与 select 是相同的。习惯对所有SQL关键字使用大写,而对所有
    列和表名使用小写。
    3、结束SQL语句 多条SQL语句必须以分号(;)分隔。

    • 检索多个列:SELECT name, age FROM user

    mysql> SELECT name, age FROM user;
    +--------+------+
    | name   | age  |
    +--------+------+
    | 小明   |   12 |
    | 小红   |   16 |
    | 小李   |   18 |
    +--------+------+
    
    • 检索所有列:SELECT * FROM user

    mysql> SELECT * FROM user;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 小明   |   12 |
    |  2 | 小红   |   16 |
    |  3 | 小李   |   18 |
    +----+--------+------+
    
    • 检索不同的行:使用 DISTINCT关键字,此关键字指示MySQL只返回不同的值。

    mysql> SELECT age FROM user;
    +------+
    | age  |
    +------+
    |   12 |
    |   16 |
    |   18 |
    |   18 |
    |   16 |
    +------+
    
    mysql> SELECT DISTINCT age FROM user;
    +------+
    | age  |
    +------+
    |   12 |
    |   16 |
    |   18 |
    +------+
    
    • 限制结果:使用LIMIT关键字

    SELECT * FROM user LIMIT 3表示只获取前面3条。
    SELECT * FROM user LIMIT 2, 2表示返回从第2行开始的2条数据。
    LIMIT 2 OFFSET 2效果与LIMIT 2, 2一样。

    mysql> SELECT * FROM user LIMIT 3;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 小明   |   12 |
    |  2 | 小红   |   16 |
    |  3 | 小李   |   18 |
    +----+--------+------+
    
    mysql> SELECT * FROM user LIMIT 2, 2;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    
    mysql> SELECT * FROM user LIMIT 2 OFFSET 2;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    

    注意
    1、行 0 检索出来的第一行为行0而不是行1。因此, LIMIT 1, 1
    将检索出第二行而不是第一行。
    2、在行数不够时 LIMIT 中指定要检索的行数为检索的最大行
    数。如果没有足够的行(例如,给出 LIMIT 10, 5 ,但只有13行),MySQL将只返回它能返回的那么多行。

    • 使用完全限定的表名或数据库名

    这条语句在功能上等于SELECT name FROM user。(假定都在test数据库中调用)

    mysql> SELECT user.name FROM test.user;
    +--------+
    | name   |
    +--------+
    | 小明   |
    | 小红   |
    | 小李   |
    | 小南   |
    | 小狼   |
    +--------+
    

    排序检索数据

    • 排序数据:SELECT * FROM user ORDER BY age

    根据年龄从小到大排序

    mysql> SELECT * FROM user ORDER BY age;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 小明   |   12 |
    |  2 | 小红   |   16 |
    |  5 | 小狼   |   16 |
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    
    • 按多个列排序: SELECT * FROM user ORDER BY age, name

    先根据年龄排序,再根据名称排序

    mysql> SELECT * FROM user ORDER BY age, name;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 小明   |   12 |
    |  5 | 小狼   |   16 |
    |  2 | 小红   |   16 |
    |  4 | 小南   |   18 |
    |  3 | 小李   |   18 |
    +----+--------+------+
    
    • 倒序:DESC关键字

    mysql> SELECT * FROM user ORDER BY age DESC;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    |  2 | 小红   |   16 |
    |  5 | 小狼   |   16 |
    |  1 | 小明   |   12 |
    +----+--------+------+
    

    过 滤 数 据

    • 使用where子句

    检索所需数据需要指定搜索条件,根据 WHERE 子句中指定的搜索条件能够对数据进行过滤。

    mysql> SELECT * FROM user WHERE age = 18;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    
    • WHERE子句操作符

    操 作 符 说 明
    = 等于
    != 不等于
    > 大于
    >= 大于等于
    < 小于
    <= 小于等于
    BETWEEN 在指定的两个值之间
    • 检查单个值

    mysql> SELECT * FROM user WHERE name = '小李';
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    +----+--------+------+
    
    mysql> SELECT * FROM user WHERE age > 16;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    
    • 不匹配检查

    SELECT * FROM user WHERE age != 16;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 小明   |   12 |
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    
    • 范围检查

    mysql> 
    SELECT * FROM user WHERE age BETWEEN 14 AND 18;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  2 | 小红   |   16 |
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    |  5 | 小狼   |   16 |
    +----+--------+------+
    
    • 空值检查

    mysql> SELECT * FROM user WHERE age IS NULL;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  6 | 空我   | NULL |
    +----+--------+------+
    

    注意:
    1、在创建表时,表设计人员可以指定其中的列是否可以不包含值。在
    一个列不包含值时,称其为包含空值 NULL 。
    2、NULL 无值(no value),它与字段包含 0 、空字符串或仅仅包含
    空格不同。
    3、NULL 与不匹配 在通过过滤选择出不具有特定值的行时,你
    可能希望返回具有 NULL 值的行。但是,不行。因为未知具有
    特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。

    • 组合 WHERE 子句

    逻辑操作符(logical operator),用来联结或改变 WHERE 子句中的子句的关键
    字。
    1、AND操作符
    筛选出年龄大于16并且姓名不等于"小南"的数据

    mysql> SELECT * FROM user WHERE age > 16 AND name != '小南';
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  7 | 大飞   |   23 |
    +----+--------+------+
    

    2、OR操作符
    筛选出年龄等于16或18的数据

    mysql> SELECT * FROM user WHERE age = 16 or age = 18;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  2 | 小红   |   16 |
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    |  5 | 小狼   |   16 |
    |  9 | 杰瑞   |   16 |
    +----+--------+------+
    

    计算次序
    AND操作符的优先级高于OR,使用圆括号明确地分组相应的操作符。

    mysql> SELECT * FROM user WHERE age = 16 or age = 18 AND age > 16;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  2 | 小红   |   16 |
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    |  5 | 小狼   |   16 |
    |  9 | 杰瑞   |   16 |
    +----+--------+------+
    
    mysql> SELECT * FROM user WHERE (age = 16 or age = 18) AND age > 16;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    

    3、IN 操作符
    下面语句等同于SELECT * FROM user WHERE age = 18 OR age = 30

    mysql> SELECT * FROM user WHERE age in (18, 30) ;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  3 | 小李   |   18 |
    |  4 | 小南   |   18 |
    +----+--------+------+
    

    4、NOT 操作符

    mysql> SELECT * FROM user WHERE age NOT IN (18, 16);
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 小明   |   12 |
    |  7 | 大飞   |   23 |
    |  8 | 杰克   |   15 |
    +----+--------+------+
    

    用通配符进行过滤

    LIKE 操作符

    通配符(wildcard) 用来匹配值的一部分的特殊字符。

    1、百分号( % )通配符

    • 最常使用的通配符是百分号( % )。% 表示任何字符出现任意次数(包括0次)。
    • SELECT * FROM user WHERE name LIKE 'to%'。此例子使用了搜索模式 'to%'。在执行这条子句时,将检索任意以 to 起头的词。 % 告诉MySQL接受 to 之后的任意字符,不管它有多少字符。
    • 搜索模式'%uc%' 表示匹配任何位置包含文本uc的值,而不论它之前或之后出现什么字符。
    mysql> SELECT * FROM user WHERE name LIKE 'to%';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 10 | tom  |   22 |
    | 12 | tony |   31 |
    +----+------+------+
    
    mysql> SELECT * FROM user WHERE name LIKE '%uc%';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 11 | duck |   13 |
    | 13 | puck |   11 |
    +----+------+------+
    

    ** 注意NULL** 虽然似乎 % 通配符可以匹配任何东西,但有一个例外,即 NULL 。

    下划线_通配符

    另一个有用的通配符是下划线_。下划线的用途与 % 一样,但下划
    线只匹配单个字符而不是多个字符。

    mysql> SELECT * FROM user WHERE name LIKE 'to__';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 12 | tony |   31 |
    +----+------+------+
    
    mysql> SELECT * FROM user WHERE name LIKE 'to_';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 10 | tom  |   22 |
    +----+------+------+
    

    用正则表达式进行搜索

    • 基本字符匹配

    .) 是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符。

    mysql>  SELECT * FROM user WHERE name REGEXP 'duc';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 11 | duck |   13 |
    +----+------+------+
    
    mysql> SELECT * FROM user WHERE name REGEXP '.uc';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 11 | duck |   13 |
    | 13 | puck |   11 |
    +----+------+------+
    
    • 进行OR匹配

    mysql> SELECT * FROM user WHERE name REGEXP 'duc|puc';
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    | 11 | duck |   13 |
    | 13 | puck |   11 |
    +----+------+------+
    
    • 匹配几个字符之一

    mysql> SELECT * FROM user WHERE name REGEXP '[p|o]ple';
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    | 14 | apple  |   31 |
    | 15 | people |   12 |
    +----+--------+------+
    
    mysql> SELECT * FROM user WHERE name REGEXP '[po]ple';
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    | 14 | apple  |   31 |
    | 15 | people |   12 |
    +----+--------+------+
    

    [] 是另一种形式的 OR 语句。事实上,正则表达式 [po]ple[p|o]ple的缩写,也可以使用后者。

    • 匹配范围

    集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹配数字0到9:[0123456789]。为简化这种类型的集合,可使用 - 来定义一个范围。[0-9]上等同于上述数字列表。
    此外,范围不一定只是数值的, [a-z] 匹配任意字母字符。

    mysql> SELECT * FROM user WHERE name REGEXP '路人[A-Z]';
    +----+---------+------+
    | id | name    | age  |
    +----+---------+------+
    | 16 | 路人A   |   42 |
    | 17 | 路人B   |   42 |
    | 18 | 路人C   |   42 |
    +----+---------+------+
    

    匹配特殊字符

    \\为转义字符。如.表示匹配任意一个字符。若想匹配.本身,则需要转移字符,即\\.表示匹配.。正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

    匹配\ 为了匹配反斜杠(\)字符本身,需要使用 \\\

    • 匹配字符类

    说明
    [:alnum:] 任意字母和数字(同[a-zA-Z0-9])
    [:alpha:] 任意字符(同[a-zA-Z])
    [:blank:] 空格和制表(同[\t])
    [:digit:] 任意数字(同[0-9])
    [:lower:] 任意小写字母(同[a-z])
    [:upper:] 任意大写字母(同[A-Z])
    [:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
    • 匹配多个实例

    元字符 说明
    * 0个或多个匹配
    + 1个或多个匹配(等于{1,})
    ? 0个或1个匹配(等于{0,1}
    {n} 指定数目的匹配
    {n,} 不少于指定数目的匹配
    {n,m} 匹配数目的范围(m不超过255)
    mysql> SELECT * FROM user WHERE name REGEXP '数字[0-9]{5}';
    +----+-------------+------+
    | id | name        | age  |
    +----+-------------+------+
    | 19 | 数字12133   |   12 |
    +----+-------------+------+
    
    mysql> SELECT * FROM user WHERE name REGEXP '数字[:digit:]*';
    +----+-------------+------+
    | id | name        | age  |
    +----+-------------+------+
    | 19 | 数字12133   |   12 |
    | 20 | 数字422     |   12 |
    +----+-------------+------+
    
    • 定位符

    元字符 说明
    ^ 文本的开始
    $ 文本的结尾
    mysql> SELECT * FROM user WHERE name REGEXP '[0-9]+';
    +----+-------------+------+
    | id | name        | age  |
    +----+-------------+------+
    | 19 | 数字12133   |   12 |
    | 20 | 数字422     |   12 |
    | 21 | 13131       |   31 |
    | 22 | 3636ABC     |   32 |
    +----+-------------+------+
    
    mysql> SELECT * FROM user WHERE name REGEXP '^[0-9]+$';
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    | 21 | 13131 |   31 |
    +----+-------+------+
    

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

    相关文章

      网友评论

          本文标题:MySQL必知必会1

          本文链接:https://www.haomeiwen.com/subject/zhcddhtx.html