美文网首页
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

    1、MySQL使用 启动:net start mysql(windows版) 登录:mysql -u root -...

  • 《MySQL必知必会》学习笔记 目录

    资料《MySQL必知必会》书籍 https://pan.baidu.com/s/1_030_NvjnPcRMEcC...

  • MySql 创建和操纵表

    创建表 更新表 参考书籍: MySQL必知必会

  • 安装MySQL安装包和工具(2018-08-29)

    一、安装mysql安装包和工具 1 准备软件 第1个是MySQL必知必会案例 第2个是MySQL工具:Navica...

  • mysql必知必会

    2018年7月13日笔记 1.数据库的介绍 1.1 什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库...

  • Mysql必知必会

    1.表中的任何列都可以作为主键, 只要它满足以下条件:任意两行都不具有相同的主键值;每一行都必须具有一个主键值( ...

  • MySQL必知必会

    分页 方式1:select * from table order by id limit m, n;该语句的意思为...

  • 《Mysql必知必会》

    厚道的人运气都不会太差,我们永远相信会有美好的事情发生

  • 必知必会 - Mysql

    存储引擎InnoDB InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page...

  • Mysql必知必会!

    数据库 1. 数据库概述 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按...

网友评论

      本文标题:MySQL必知必会1

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