《MySQL必知必会》——读书总结

《MySQL必知必会》——记录_1

1. 基本概念

  • 数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。
  • 表:某种特定类型数据的结构化清单。
  • 列:表中的一个字段。所有表都是由一个或多个列组成的。
  • 行:表中的一个记录。
  • 主键:一列(或一组列),其值能够唯一区分表中每个行。
  • 数据类型:所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。

2.使用MySQL

  • 连接

    C:\Users\admin>mysql -uroot -p
    Enter password: ****
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.6.46 MySQL Community Server (GPL)
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
mysql> use test;
Database changed

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql>
mysql> show columns from user;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | NO   | PRI | NULL    |       |
| username | varchar(255) | YES  |     | NULL    |       |
| password | varchar(255) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql>
  • 关于show语句

    • show status : 用于显示广泛的服务器状态信息。
    • show create databaseshow create table : 分别用来显示创建特定数据库表或表的MySQL语句。
    • show grants :用来显示授予用户(所以用户或特定用户)的安全权限。
    • show errorsshow warnings : 用来显示服务器错误或警告消息。

    进一步了解show , show help 命令可以帮到您哦~

3. 检索数据

select 语句 : 从一个或多个表中检索信息。

  • 检索单个列
mysql> select username from user;
+----------+
| username |
+----------+
| root     |
| root     |
| admin    |
+----------+
3 rows in set (0.00 sec)

mysql>
  • 检索多个列
mysql> select username , password from user;
+----------+----------+
| username | password |
+----------+----------+
| root     | admin    |
| root     | root     |
| admin    | root     |
+----------+----------+
3 rows in set (0.00 sec)

mysql>
  • 检索所有列
mysql> select * from user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | root     | admin    |
|  2 | root     | root     |
|  3 | admin    | root     |
+----+----------+----------+
3 rows in set (0.00 sec)

mysql>

一般,除非你确实需要表中的每个列,否则最好别使用*统配符。虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。

  • 检索不同的行
mysql> select distinct username from user;
+----------+
| username |
+----------+
| root     |
| admin    |
+----------+
2 rows in set (0.01 sec)

mysql>

关键字distinct 指示MySQL只返回不同的值

  • 限制结果
fanmysql> select username from user;
+----------+
| username |
+----------+
| root     |
| root     |
| admin    |
+----------+
3 rows in set (0.00 sec)

mysql> select username from user limit 2;
+----------+
| username |
+----------+
| root     |
| root     |
+----------+
2 rows in set (0.00 sec)

mysql>

关键字limit指示MySQL限制返回结果

mysql> select username from user limit 1,2;
+----------+
| username |
+----------+
| root     |
| admin    |
+----------+
2 rows in set (0.00 sec)

mysql>

解释 : select username from user limit 1,2; 是返回第一行到第二行(行数是从0开始的哦~)

  • 使用完全限定的表名
mysql> select user.username from user;
+----------+
| username |
+----------+
| root     |
| root     |
| admin    |
+----------+
3 rows in set (0.00 sec)

mysql>

4.排序检索数据

  • 排序数据
mysql> select username from user;
+----------+
| username |
+----------+
| root     |
| root     |
| admin    |
+----------+
3 rows in set (0.00 sec)

mysql> select username from user order by username;
+----------+
| username |
+----------+
| admin    |
| root     |
| root     |
+----------+
3 rows in set (0.00 sec)

mysql>

关键字order by指示MySQL对sername列以字母的顺序排序

  • 按多个列排序
mysql> select username ,password from user order by username,password;
+----------+----------+
| username | password |
+----------+----------+
| admin    | root     |
| root     | admin    |
| root     | root     |
+----------+----------+
3 rows in set (0.00 sec)

mysql>
  • 指定排序方向
mysql> select username ,password from user order by username desc;
+----------+----------+
| username | password |
+----------+----------+
| root     | admin    |
| root     | root     |
| admin    | root     |
+----------+----------+
3 rows in set (0.00 sec)

mysql>

数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序。还可以使用order by子句以降序(从A到Z)顺序排序。为了进行降序排序必须指定DESC关键字。

如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

5.过滤数据

  • 使用where子句
mysql> select username ,password from user where username='admin';
+----------+----------+
| username | password |
+----------+----------+
| admin    | root     |
+----------+----------+
1 row in set (0.00 sec)

mysql>
  • where子句操作符
操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between 在指定的两个值之间
  • 检查单个值
mysql> select id , username ,password from user where id = 3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  3 | admin    | root     |
+----+----------+----------+
1 row in set (0.00 sec)

mysql>
mysql> select id , username ,password from user where id < 5;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  0 | word     | 321      |
|  1 | root     | admin    |
|  2 | root     | root     |
|  3 | admin    | root     |
|  4 | hello    | 123      |
+----+----------+----------+
5 rows in set (0.00 sec)

mysql> select id , username ,password from user where id < 3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  0 | word     | 321      |
|  1 | root     | admin    |
|  2 | root     | root     |
+----+----------+----------+
3 rows in set (0.00 sec)

mysql>
mysql> select id , username ,password from user where id <= 3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  0 | word     | 321      |
|  1 | root     | admin    |
|  2 | root     | root     |
|  3 | admin    | root     |
+----+----------+----------+
4 rows in set (0.00 sec)

mysql>
  • 不匹配检查
mysql> select id , username ,password from user where id <> 3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  0 | word     | 321      |
|  1 | root     | admin    |
|  2 | root     | root     |
|  4 | hello    | 123      |
+----+----------+----------+
4 rows in set (0.00 sec)

mysql>
  • 范围值检查
mysql> select id , username ,password from user where id between 1 and 4;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | root     | admin    |
|  2 | root     | root     |
|  3 | admin    | root     |
|  4 | hello    | 123      |
+----+----------+----------+
4 rows in set (0.00 sec)

mysql>
  • 空值检查

null 无值,它域字段包含0、空字符串或仅仅包含空格不同。

mysql> select username from user where password is null;
+----------+
| username |
+----------+
| haha     |
+----------+
1 row in set (0.00 sec)

mysql>

6. 数据过滤

  • and操作符

and 用在where子句中的关键字,用来指示检索满足所有给定的条件的行

mysql> select id,username from user where id=3 and username='admin';
+----+----------+
| id | username |
+----+----------+
|  3 | admin    |
+----+----------+
1 row in set (0.00 sec)

mysql>
  • or操作符

or 用在where子句中的关键字,用来指示检索满足所有给定条件的行。

mysql> select id,username from user where id=3 or username='hello';
+----+----------+
| id | username |
+----+----------+
|  3 | admin    |
|  4 | hello    |
+----+----------+
2 rows in set (0.00 sec)

mysql>
  • in操作符

in 操作符用来指定条件范围,范围中的每个条件都可以进行匹配

mysql> select id,username from user where id in (1,5);
+----+----------+
| id | username |
+----+----------+
|  1 | root     |
|  5 | haha     |
+----+----------+
2 rows in set (0.00 sec)

mysql>
mysql> select id,username from user where id  not in (1,5);
+----+----------+
| id | username |
+----+----------+
|  0 | word     |
|  2 | root     |
|  3 | admin    |
|  4 | hello    |
+----+----------+
4 rows in set (0.00 sec)

mysql>

in操作符的优点

  • 在使用合法的选项清单时,in操作符的语法更清楚且更直观。
  • 在使用in时,计算的次序更容易管理(因为使用的操作符更少)
  • in操作符一般比or操作符清单执行更快
  • in的最大优点是可以包含其他的select语句,使得能够更动态地建立where子句。

7.使用通配符进行过滤

  • like操作符

    • 百分号(%)通配符

    %表示任何字符出现任意次数

    mysql> select username from user where username like 'h%';
    +----------+
    | username |
    +----------+
    | hello    |
    | haha     |
    +----------+
    2 rows in set (0.00 sec)
    
    mysql>
    

    区分大小写 根据MySQL的配置方式,搜索可以是区分大小写的。

    • 下划线(_)通配符
    mysql> select username from user where username like 'h_llo';
    +----------+
    | username |
    +----------+
    | hello    |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> select username from user where username like 'h__lo';
    +----------+
    | username |
    +----------+
    | hello    |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> select username from user where username like 'h___o';
    +----------+
    | username |
    +----------+
    | hello    |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> select username from user where username like 'h____';
    +----------+
    | username |
    +----------+
    | hello    |
    +----------+
    1 row in set (0.00 sec)
    
    mysql>
    

    与%能匹配0个字符不一样,_总是匹配一个字符,不能多也不能少。

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务