一、登陆和退出

1. 远程主机

  1. shell> mysql -h host -u user -p
  2. Enter password: ********
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. mysql>

2. 登陆本机

  1. shell> mysql -u user -p

3. 退出mysql

  1. mysql> QUIT

二、输入查询

查询版本号和当前日期

  1. mysql> SELECT VERSION(), CURRENT_DATE;
  2. +-----------+--------------+
  3. | VERSION() | CURRENT_DATE |
  4. +-----------+--------------+
  5. | 5.7.24 | 2018-11-12 |
  6. +-----------+--------------+
  7. 1 row in set (0.01 sec)
  8. mysql>

大小写不敏感

把mysql当计算器用

  1. mysql> SELECT SIN(PI()/4), (4+1)*5;
  2. +--------------------+---------+
  3. | SIN(PI()/4) | (4+1)*5 |
  4. +--------------------+---------+
  5. | 0.7071067811865476 | 25 |
  6. +--------------------+---------+
  7. 1 row in set (0.01 sec)

在一行上输入多个语句。分号结束每一个命令:

  1. mysql> SELECT VERSION(); SELECT NOW();
  2. +-----------+
  3. | VERSION() |
  4. +-----------+
  5. | 5.7.24 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
  8. +---------------------+
  9. | NOW() |
  10. +---------------------+
  11. | 2018-11-13 00:10:14 |
  12. +---------------------+
  13. 1 row in set (0.00 sec)

mysql 通过 查找终止分号;来确定语句的结束位置

  1. mysql> SELECT
  2. -> USER()
  3. -> ,
  4. -> CURRENT_DATE;
  5. +----------------+--------------+
  6. | USER() | CURRENT_DATE |
  7. +----------------+--------------+
  8. | root@localhost | 2018-11-13 |
  9. +----------------+--------------+
  10. 1 row in set (0.00 sec)
  11. mysql> SELECT USER(),CURRENT_DATE;
  12. +----------------+--------------+
  13. | USER() | CURRENT_DATE |
  14. +----------------+--------------+
  15. | root@localhost | 2018-11-13 |
  16. +----------------+--------------+
  17. 1 row in set (0.00 sec)

通过键入以下内容取消该查询:\c

  1. mysql> SELECT
  2. -> USER()
  3. -> \c

三、创建和使用数据库

展示存在的数据库

  1. mysql> SHOW DATABASES;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | falcon |
  7. | mysql |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+

使用数据库

  1. mysql> USE test
  2. Database changed
  1. shell> mysql -h host -u user -p menagerie
  2. Enter password: ********

3.1 创建和选择数据库

  1. mysql> CREATE DATABASE menagerie;
  1. mysql> USE menagerie
  2. Database changed

3.2 创建表

  1. mysql> SHOW TABLES;
  2. Empty set (0.00 sec)

创建表

  1. mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
  2. -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

展示表单:

  1. mysql> SHOW TABLES;
  2. +---------------------+
  3. | Tables_in_menagerie |
  4. +---------------------+
  5. | pet |
  6. +---------------------+
  7. 1 row in set (0.00 sec)

描述表单

  1. mysql> DESCRIBE pet;
  2. +---------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +---------+-------------+------+-----+---------+-------+
  5. | name | varchar(20) | YES | | NULL | |
  6. | owner | varchar(20) | YES | | NULL | |
  7. | species | varchar(20) | YES | | NULL | |
  8. | sex | char(1) | YES | | NULL | |
  9. | birth | date | YES | | NULL | |
  10. | death | date | YES | | NULL | |
  11. +---------+-------------+------+-----+---------+-------+
  12. 6 rows in set (0.01 sec)

3.3 将数据加载到表中

建立表格以后需要:

name owner species sex birth death
Fluffy Harold cat f 1993-02-04
Claws Gwen cat m 1994-03-17
Buffy Harold dog f 1989-05-13
Fang Benny dog m 1990-08-27
Bowser Diane dog m 1979-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11
Whistler Gwen bird 1997-12-09
Slim Benny snake m 1996-04-29

保存为pet.txt

从excel中直接复制到pet.txt,空值用\N 表示

  1. Whistler Gwen bird \N 1997-12-09 \N

3.3.1 导入数据

  1. LOAD DATA LOCAL INFILE 'D:/Temp/pet.txt' INTO TABLE pet;

win编辑器

  1. mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
  2. -> LINES TERMINATED BY '\r\n';

在运行 os x 的 apple 计算机上, 您可能想要使用。LINES TERMINATED BY '\r'

3.3.2 插入语句

  1. mysql> INSERT INTO pet
  2. -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

3.4 操作表格

SELECT 语法:

  1. SELECT what_to_select
  2. FROM which_table
  3. WHERE conditions_to_satisfy;

3.4.1 查询所有数据

  1. mysql> SELECT * FROM pet;
  2. +----------+--------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +----------+--------+---------+------+------------+------------+
  5. | Fluffy | Harold | cat | f | 1993-02-04 | NULL |
  6. | Claws | Gwen | cat | m | 1994-03-17 | NULL |
  7. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  8. | Fang | Benny | dog | m | 1990-08-27 | NULL |
  9. | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
  10. | Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
  11. | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
  12. | Slim | Benny | snake | m | 1996-04-29 | NULL |
  13. | Puffball | Diane | hamster | f | 1999-03-30 | NULL |
  14. +----------+--------+---------+------+------------+------------+

update 语句修复错误记录 :

  1. mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';

3.4.2 查询某行

选择特定行:

  1. mysql> SELECT * FROM pet WHERE name = 'Bowser';
  2. +--------+-------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +--------+-------+---------+------+------------+------------+
  5. | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
  6. +--------+-------+---------+------+------------+------------+

选择特定条件:

  1. mysql> SELECT * FROM pet WHERE birth >= '1998-1-1';
  2. +----------+-------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +----------+-------+---------+------+------------+------------+
  5. | Chirpy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |
  6. | Puffball | Diane | hamster | f | 1999-03-30 | NULL |
  7. +----------+-------+---------+------+------------+------------+

条件and:

  1. mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
  2. +-------+--------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +-------+--------+---------+------+------------+------------+
  5. | Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |
  6. +-------+--------+---------+------+------------+------------+

条件or:

  1. mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
  2. +----------+-------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +----------+-------+---------+------+------------+------------+
  5. | Chirpy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |
  6. | Whistler | Gwen | bird | | 1997-12-09 | 0000-00-00 |
  7. | Slim | Benny | snake | m | 1996-04-29 | 0000-00-00 |
  8. +----------+-------+---------+------+------------+------------+

and 、 or 混合使用:

  1. mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
  2. -> OR (species = 'dog' AND sex = 'f');
  3. +-------+--------+---------+------+------------+------------+
  4. | name | owner | species | sex | birth | death |
  5. +-------+--------+---------+------+------------+------------+
  6. | Claws | Gwen | cat | m | 1994-03-17 | 0000-00-00 |
  7. | Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |
  8. +-------+--------+---------+------+------------+------------+

3.4.3 查询某列

选择某列,按照 ,分隔

  1. mysql> SELECT name`,` birth FROM pet;
  2. +----------+------------+
  3. | name | birth |
  4. +----------+------------+
  5. | name | 0000-00-00 |
  6. | Fluffy | 1993-02-04 |
  7. | Claws | 1994-03-17 |
  8. | Buffy | 1989-05-13 |
  9. | Fang | 1990-08-27 |
  10. | Bowser | 1989-08-31 |
  11. | Chirpy | 1998-09-11 |
  12. | Whistler | 1997-12-09 |
  13. | Slim | 1996-04-29 |
  14. | Puffball | 1999-03-30 |
  15. +----------+------------+

选择动物主人:

  1. mysql> SELECT owner FROM pet;
  2. +--------+
  3. | owner |
  4. +--------+
  5. | owner |
  6. | Harold |
  7. | Gwen |
  8. | Harold |
  9. | Benny |
  10. | Diane |
  11. | Gwen |
  12. | Gwen |
  13. | Benny |
  14. | Diane |
  15. +--------+

使用DISTINCT去重

  1. mysql> SELECT DISTINCT owner FROM pet;
  2. +--------+
  3. | owner |
  4. +--------+
  5. | owner |
  6. | Harold |
  7. | Gwen |
  8. | Benny |
  9. | Diane |
  10. +--------+

使用WHERE条件查询

  1. mysql> SELECT name, species, birth FROM pet
  2. -> WHERE species = 'dog' OR species = 'cat';
  3. +--------+---------+------------+
  4. | name | species | birth |
  5. +--------+---------+------------+
  6. | Fluffy | cat | 1993-02-04 |
  7. | Claws | cat | 1994-03-17 |
  8. | Buffy | dog | 1989-05-13 |
  9. | Fang | dog | 1990-08-27 |
  10. | Bowser | dog | 1989-08-31 |
  11. +--------+---------+------------+

3.4.4 排序行

使用ORDER BY ,默认升序

  1. mysql> SELECT name, birth FROM pet ORDER BY birth;
  2. +----------+------------+
  3. | name | birth |
  4. +----------+------------+
  5. | name | 0000-00-00 |
  6. | Buffy | 1989-05-13 |
  7. | Bowser | 1989-08-31 |
  8. | Fang | 1990-08-27 |
  9. | Fluffy | 1993-02-04 |
  10. | Claws | 1994-03-17 |
  11. | Slim | 1996-04-29 |
  12. | Whistler | 1997-12-09 |
  13. | Chirpy | 1998-09-11 |
  14. | Puffball | 1999-03-30 |
  15. +----------+------------+

默认不区分大小写排序,如果要区分使用:

ORDER BY BINARY col_name

BINARY:转换为二进制字符,方便排序

使用ORDER BY ,默认升序,如果降序,添加DESC

  1. mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
  2. +----------+------------+
  3. | name | birth |
  4. +----------+------------+
  5. | Puffball | 1999-03-30 |
  6. | Chirpy | 1998-09-11 |
  7. | Whistler | 1997-12-09 |
  8. | Slim | 1996-04-29 |
  9. | Claws | 1994-03-17 |
  10. | Fluffy | 1993-02-04 |
  11. | Fang | 1990-08-27 |
  12. | Bowser | 1989-08-31 |
  13. | Buffy | 1989-05-13 |
  14. | name | 0000-00-00 |
  15. +----------+------------+

多个列排序:

先按照动物种类升序,然后按照出生日期降序

  1. mysql> SELECT name, species, birth FROM pet
  2. -> ORDER BY species, birth DESC;
  3. +----------+---------+------------+
  4. | name | species | birth |
  5. +----------+---------+------------+
  6. | Chirpy | bird | 1998-09-11 |
  7. | Whistler | bird | 1997-12-09 |
  8. | Claws | cat | 1994-03-17 |
  9. | Fluffy | cat | 1993-02-04 |
  10. | Fang | dog | 1990-08-27 |
  11. | Bowser | dog | 1989-08-31 |
  12. | Buffy | dog | 1989-05-13 |
  13. | Puffball | hamster | 1999-03-30 |
  14. | Slim | snake | 1996-04-29 |
  15. | name | species | 0000-00-00 |
  16. +----------+---------+------------+

3.4.5 ‎日期计算

TIMESTAMPDIFF():时间差函数

  1. mysql> SELECT TIMESTAMPDIFF(YEAR,'1989-08-31',CURDATE());
  2. +--------------------------------------------+
  3. | TIMESTAMPDIFF(YEAR,'1989-08-31',CURDATE()) |
  4. +--------------------------------------------+
  5. | 29 |
  6. +--------------------------------------------+

常用时间函数:

  1. mysql> SELECT NOW(),CURDATE(),CURTIME();
  2. +---------------------+------------+-----------+
  3. | NOW() | CURDATE() | CURTIME() |
  4. +---------------------+------------+-----------+
  5. | 2018-11-13 10:21:28 | 2018-11-13 | 10:21:28 |
  6. +---------------------+------------+-----------+

查询显示每个宠物的出生日期、当前日期,用age做别名

  1. mysql> SELECT name, birth, CURDATE(),
  2. -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
  3. -> FROM pet;
  4. +----------+------------+------------+------+
  5. | name | birth | CURDATE() | age |
  6. +----------+------------+------------+------+
  7. | Fluffy | 1993-02-04 | 2018-11-13 | 25 |
  8. | Claws | 1994-03-17 | 2018-11-13 | 24 |
  9. | Buffy | 1989-05-13 | 2018-11-13 | 29 |
  10. | Fang | 1990-08-27 | 2018-11-13 | 28 |
  11. | Bowser | 1989-08-31 | 2018-11-13 | 29 |
  12. | Chirpy | 1998-09-11 | 2018-11-13 | 20 |
  13. | Whistler | 1997-12-09 | 2018-11-13 | 20 |
  14. | Slim | 1996-04-29 | 2018-11-13 | 22 |
  15. | Puffball | 1999-03-30 | 2018-11-13 | 19 |
  16. +----------+------------+------------+------+

查询同时 按照姓名排序

  1. mysql> SELECT name, birth, CURDATE(),
  2. -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
  3. -> FROM pet ORDER BY name;
  4. +----------+------------+------------+------+
  5. | name | birth | CURDATE() | age |
  6. +----------+------------+------------+------+
  7. | Bowser | 1989-08-31 | 2018-11-13 | 29 |
  8. | Buffy | 1989-05-13 | 2018-11-13 | 29 |
  9. | Chirpy | 1998-09-11 | 2018-11-13 | 20 |
  10. | Claws | 1994-03-17 | 2018-11-13 | 24 |
  11. | Fang | 1990-08-27 | 2018-11-13 | 28 |
  12. | Fluffy | 1993-02-04 | 2018-11-13 | 25 |
  13. | Puffball | 1999-03-30 | 2018-11-13 | 19 |
  14. | Slim | 1996-04-29 | 2018-11-13 | 22 |
  15. | Whistler | 1997-12-09 | 2018-11-13 | 20 |
  16. +----------+------------+------------+------+

查询同时 按照年龄排序

  1. mysql> SELECT name, birth, CURDATE(),
  2. -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
  3. -> FROM pet ORDER BY age;
  4. +----------+------------+------------+------+
  5. | name | birth | CURDATE() | age |
  6. +----------+------------+------------+------+
  7. | Puffball | 1999-03-30 | 2018-11-13 | 19 |
  8. | Chirpy | 1998-09-11 | 2018-11-13 | 20 |
  9. | Whistler | 1997-12-09 | 2018-11-13 | 20 |
  10. | Slim | 1996-04-29 | 2018-11-13 | 22 |
  11. | Claws | 1994-03-17 | 2018-11-13 | 24 |
  12. | Fluffy | 1993-02-04 | 2018-11-13 | 25 |
  13. | Fang | 1990-08-27 | 2018-11-13 | 28 |
  14. | Buffy | 1989-05-13 | 2018-11-13 | 29 |
  15. | Bowser | 1989-08-31 | 2018-11-13 | 29 |
  16. +----------+------------+------------+------+

查询已经死亡的宠物

把默认导入的数值从'0000-00-00' 改成'NUll'

关于NULL

  1. UPDATE pet SET death = NULL WHERE death= 0000-00-00;
  1. mysql> SELECT name, birth, death,
  2. -> TIMESTAMPDIFF(YEAR,birth,death) AS age
  3. -> FROM pet WHERE death IS NOT NULL ORDER BY age;
  4. +--------+------------+------------+------+
  5. | name | birth | death | age |
  6. +--------+------------+------------+------+
  7. | Bowser | 1989-08-31 | 1995-07-29 | 5 |
  8. +--------+------------+------------+------+

MySQL 的一些日期函数:

  1. mysql> SELECT YEAR('1987-01-01');
  2. +--------------------+
  3. | YEAR('1987-01-01') |
  4. +--------------------+
  5. | 1987 |
  6. +--------------------+
  1. mysql> SELECT MONTH('2008-02-03');
  2. +---------------------+
  3. | MONTH('2008-02-03') |
  4. +---------------------+
  5. | 2 |
  6. +---------------------+
  1. mysql> SELECT MONTHNAME('2008-02-03');
  2. +-------------------------+
  3. | MONTHNAME('2008-02-03') |
  4. +-------------------------+
  5. | February |
  6. +-------------------------+

现在是今年的 多少天 多少周

  1. mysql> SELECT DAYOFYEAR(now()),WEEKOFYEAR(now());
  2. +------------------+-------------------+
  3. | DAYOFYEAR(now()) | WEEKOFYEAR(now()) |
  4. +------------------+-------------------+
  5. | 317 | 46 |
  6. +------------------+-------------------+

2008-01-03第多少天,多少周

  1. mysql> SELECT DAYOFYEAR('2008-01-03'),WEEKOFYEAR('2008-01-03');
  2. +-------------------------+--------------------------+
  3. | DAYOFYEAR('2008-01-03') | WEEKOFYEAR('2008-01-03') |
  4. +-------------------------+--------------------------+
  5. | 3 | 1 |
  6. +-------------------------+--------------------------+

查询宠物出生月

  1. mysql> SELECT name, birth, MONTH(birth) FROM pet;
  2. +----------+------------+--------------+
  3. | name | birth | MONTH(birth) |
  4. +----------+------------+--------------+
  5. | Fluffy | 1993-02-04 | 2 |
  6. | Claws | 1994-03-17 | 3 |
  7. | Buffy | 1989-05-13 | 5 |
  8. | Fang | 1990-08-27 | 8 |
  9. | Bowser | 1989-08-31 | 8 |
  10. | Chirpy | 1998-09-11 | 9 |
  11. | Whistler | 1997-12-09 | 12 |
  12. | Slim | 1996-04-29 | 4 |
  13. | Puffball | 1999-03-30 | 3 |
  14. +----------+------------+--------------+

查询5月出生的宠物

  1. mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
  2. +-------+------------+
  3. | name | birth |
  4. +-------+------------+
  5. | Buffy | 1989-05-13 |
  6. +-------+------------+

2018-05-01 添加1天

  1. mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
  2. +---------------------------------------+
  3. | DATE_ADD('2018-05-01',INTERVAL 1 DAY) |
  4. +---------------------------------------+
  5. | 2018-05-02 |
  6. +---------------------------------------+

查询下个月是哪个月

  1. mysql> SELECT MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
  2. +---------------------------------------------+
  3. | MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) |
  4. +---------------------------------------------+
  5. | 12 |
  6. +---------------------------------------------+

查询即将生日的宠物,距离目前最近的一个月

  • 方法1:当前月份+1个月
  1. mysql> SELECT name, birth FROM pet
  2. -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
  3. +----------+------------+
  4. | name | birth |
  5. +----------+------------+
  6. | Whistler | 1997-12-09 |
  7. +----------+------------+
  • 方法2:当前月份取余+1
  1. mysql> SELECT name, birth FROM pet
  2. -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
  3. +----------+------------+
  4. | name | birth |
  5. +----------+------------+
  6. | Whistler | 1997-12-09 |
  7. +----------+------------+
  • MOD(12, 5)
  1. mysql> SELECT MOD(12, 5);
  2. +------------+
  3. | MOD(12, 5) |
  4. +------------+
  5. | 2 |
  6. +------------+

3.4.6 使用空值

NULL value :a missing unknown value,要和其他值区别对待

测试NULL,使用

  1. mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
  2. +-----------+---------------+
  3. | 1 IS NULL | 1 IS NOT NULL |
  4. +-----------+---------------+
  5. | 0 | 1 |
  6. +-----------+---------------+
  1. mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
  2. +-----------+---------------+------------+----------------+
  3. | 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
  4. +-----------+---------------+------------+----------------+
  5. | 0 | 1 | 0 | 1 |
  6. +-----------+---------------+------------+----------------+

不能使用算术笔记用算符判断null

  1. =, <, or <>

3.4.7 匹配方式

  1. 标准的 sql 模式匹配
  2. 正则表达式的模式匹配
  3. 默认不区分大小写

标准匹配

使用:

查找b开头的名字:

  1. mysql> SELECT * FROM pet WHERE name LIKE 'b%';
  2. +--------+--------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +--------+--------+---------+------+------------+------------+
  5. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  6. | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
  7. +--------+--------+---------+------+------------+------------+

查找fy结尾的名字:

  1. mysql> SELECT * FROM pet WHERE name LIKE '%fy';
  2. +--------+--------+---------+------+------------+-------+
  3. | name | owner | species | sex | birth | death |
  4. +--------+--------+---------+------+------------+-------+
  5. | Fluffy | Harold | cat | f | 1993-02-04 | NULL |
  6. | Buffy | Harold | dog | f | 1989-05-13 | NULL |

查找名字包含一个w:

  1. mysql> SELECT * FROM pet WHERE name LIKE '%w%';
  2. +----------+-------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +----------+-------+---------+------+------------+------------+
  5. | Claws | Gwen | cat | m | 1994-03-17 | NULL |
  6. | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
  7. | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
  8. +----------+-------+---------+------+------------+------------+

查找名字是5个字符的:

  1. mysql> SELECT * FROM pet WHERE name LIKE '_____';
  2. +-------+--------+---------+------+------------+-------+
  3. | name | owner | species | sex | birth | death |
  4. +-------+--------+---------+------+------------+-------+
  5. | Claws | Gwen | cat | m | 1994-03-17 | NULL |
  6. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  7. +-------+--------+---------+------+------------+-------+

正则匹配

使用:

RLIKE NOT RLIKE 和上述等价

查找b开头的名字:

  1. mysql> SELECT * FROM pet WHERE name REGEXP '^b';
  2. +--------+--------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +--------+--------+---------+------+------------+------------+
  5. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  6. | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
  7. +--------+--------+---------+------+------------+------------+

若要强制regexp比较区分大小写, 请使用binary关键字将其中一个字符串设置为二进制字符串。

匹配名称由小写:b开头

  1. SELECT * FROM pet WHERE name REGEXP BINARY '^b';

查找fy结尾的名字:

  1. mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
  2. +--------+--------+---------+------+------------+-------+
  3. | name | owner | species | sex | birth | death |
  4. +--------+--------+---------+------+------------+-------+
  5. | Fluffy | Harold | cat | f | 1993-02-04 | NULL |
  6. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  7. +--------+--------+---------+------+------------+-------+

查找名字包含一个w:

  1. mysql> SELECT * FROM pet WHERE name REGEXP 'w';
  2. +----------+-------+---------+------+------------+------------+
  3. | name | owner | species | sex | birth | death |
  4. +----------+-------+---------+------+------------+------------+
  5. | Claws | Gwen | cat | m | 1994-03-17 | NULL |
  6. | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
  7. | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
  8. +----------+-------+---------+------+------------+------------+

查找名字是5个字符的

  1. mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
  2. +-------+--------+---------+------+------------+-------+
  3. | name | owner | species | sex | birth | death |
  4. +-------+--------+---------+------+------------+-------+
  5. | Claws | Gwen | cat | m | 1994-03-17 | NULL |
  6. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  7. +-------+--------+---------+------+------------+-------+

或者^.{5}$^开头$结尾

  1. mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
  2. +-------+--------+---------+------+------------+-------+
  3. | name | owner | species | sex | birth | death |
  4. +-------+--------+---------+------+------------+-------+
  5. | Claws | Gwen | cat | m | 1994-03-17 | NULL |
  6. | Buffy | Harold | dog | f | 1989-05-13 | NULL |
  7. +-------+--------+---------+------+------------+-------+

3.4.8 统计行

COUNT(*) 统计函数

统计行数

  1. mysql> SELECT COUNT(*) FROM pet;
  2. +----------+
  3. | COUNT(*) |
  4. +----------+
  5. | 9 |
  6. +----------+

统计每个人有多少只宠物

  1. mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
  2. +--------+----------+
  3. | owner | COUNT(*) |
  4. +--------+----------+
  5. | Benny | 2 |
  6. | Diane | 2 |
  7. | Gwen | 3 |
  8. | Harold | 2 |
  9. +--------+----------+

统计每种动物的数量:

  1. mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
  2. +---------+----------+
  3. | species | COUNT(*) |
  4. +---------+----------+
  5. | bird | 2 |
  6. | cat | 2 |
  7. | dog | 3 |
  8. | hamster | 1 |
  9. | snake | 1 |

统计物种性别:

  1. mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
  2. +------+----------+
  3. | sex | COUNT(*) |
  4. +------+----------+
  5. | NULL | 1 |
  6. | f | 4 |
  7. | m | 4 |
  8. +------+----------+

物种和性别的组合:

  1. mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
  2. +---------+------+----------+
  3. | species | sex | COUNT(*) |
  4. +---------+------+----------+
  5. | bird | NULL | 1 |
  6. | bird | f | 1 |
  7. | cat | f | 1 |
  8. | cat | m | 1 |
  9. | dog | f | 1 |
  10. | dog | m | 2 |
  11. | hamster | f | 1 |
  12. | snake | m | 1 |
  13. +---------+------+----------+

只针对某个字段筛选,不用筛选整行

选择cat 和 dog种类,按照性别物种组合

  1. mysql> SELECT species, sex, COUNT(*) FROM pet
  2. -> WHERE species = 'dog' OR species = 'cat'
  3. -> GROUP BY species, sex;
  4. +---------+------+----------+
  5. | species | sex | COUNT(*) |
  6. +---------+------+----------+
  7. | cat | f | 1 |
  8. | cat | m | 1 |
  9. | dog | f | 1 |
  10. | dog | m | 2 |
  11. +---------+------+----------+

列出已知动物性别:

  1. mysql> SELECT species, sex, COUNT(*) FROM pet
  2. -> WHERE sex IS NOT NULL
  3. -> GROUP BY species, sex;
  4. +---------+------+----------+
  5. | species | sex | COUNT(*) |
  6. +---------+------+----------+
  7. | bird | f | 1 |
  8. | cat | f | 1 |
  9. | cat | m | 1 |
  10. | dog | f | 1 |
  11. | dog | m | 2 |
  12. | hamster | f | 1 |
  13. | snake | m | 1 |
  14. +---------+------+----------+

ONLY_FULL_GROUP_BY

  1. mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';-- 启用
  1. mysql> SELECT owner, COUNT(*) FROM pet;
  2. ERROR 1140 (42000):

ONLY_FULL_GROUP_BY 关闭后,结果不确定,系统随意添加一个值,最好关闭

  1. mysql> SET sql_mode = ''; -- 关闭
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> SELECT owner, COUNT(*) FROM pet;
  4. +--------+----------+
  5. | owner | COUNT(*) |
  6. +--------+----------+
  7. | Harold | 9 |
  8. +--------+----------+
  9. mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
  10. +--------+----------+
  11. | owner | COUNT(*) |
  12. +--------+----------+
  13. | Benny | 2 |
  14. | Diane | 2 |
  15. | Gwen | 3 |
  16. | Harold | 2 |
  17. +--------+----------+

3.4.9 使用多个表

此表格跟踪记录你的宠物,当你想记录他们的信息,比如看兽医、生幼崽、买玩具等事件,就需要另外一个表单记录,需要如下信息:

  • 宠物名称:name
  • 事件日期:date
  • 事件类型:type
  • 事件描述:emark

CREATE ABLE

创建表一个符合上述要素的表单:

  1. mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
  2. -> type VARCHAR(15), remark VARCHAR(255));

将下述内容存储为event.txt

name date type remark
Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1994-06-19 litter 3 puppies, 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
Whistler 1998-12-09 birthday First birthday

导入内容到表单

  1. mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

假设:想知道每个宠物下崽时的年龄,宠物妈妈下崽时间在event表单,但是,出生日期在pet表单,所以要同时查询2个表单。

  1. mysql> SELECT pet.name,
  2. -> TIMESTAMPDIFF(YEAR,birth,date) AS age,
  3. -> remark
  4. -> FROM pet INNER JOIN event
  5. -> ON pet.name = event.name
  6. -> WHERE event.type = 'litter';
  7. +--------+------+------------------------------+
  8. | name | age | remark |
  9. +--------+------+------------------------------+
  10. |Fluffy | 2 | 4 kittens, 3 female, 1 male
  11. |Buffy | 4 | 5 puppies, 2 female, 3 male
  12. | 5 | 3 puppies, 3 female
  13. +--------+------+------------------------------+

jion表单:

  • 是为从两张表获取信息
  • 需要指定匹配规则,上述例子都有'name'
  • 需要指定前缀ON pet.name = event.name

表的自身连接

宠物的雌雄配对:

  1. mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
  2. -> FROM pet AS p1 INNER JOIN pet AS p2
  3. -> ON p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
  4. +--------+------+--------+------+---------+
  5. | name | sex | name | sex | species |
  6. +--------+------+--------+------+---------+
  7. | Fluffy | f | Claws | m | cat |
  8. | Buffy | f | Fang | m | dog |
  9. | Buffy | f | Bowser | m | dog |
  10. +--------+------+--------+------+---------+

3.4 获取数据库和表的信息

查看目前使用的数据库

  1. mysql> SELECT DATABASE();
  2. +------------+
  3. | DATABASE() |
  4. +------------+
  5. | menagerie |
  6. +------------+

查看表

  1. mysql> SHOW TABLES;
  2. +---------------------+
  3. | Tables_in_menagerie |
  4. +---------------------+
  5. | event |
  6. | pet |
  7. +---------------------+

查看表结构

  1. mysql> DESCRIBE pet;
  2. +---------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +---------+-------------+------+-----+---------+-------+
  5. | name | varchar(20) | YES | | NULL | |
  6. | owner | varchar(20) | YES | | NULL | |
  7. | species | varchar(20) | YES | | NULL | |
  8. | sex | char(1) | YES | | NULL | |
  9. | birth | date | YES | | NULL | |
  10. | death | date | YES | | NULL | |
  11. +---------+-------------+------+-----+---------+-------+

3.5 批处理模式

在mysql内运行脚本:

  1. mysql> source filename;
  2. mysql> \. filename

来源MySQL官网

MySQL入门(参考官网)的更多相关文章

  1. MySql.Data.dll官网下载

    Mysql.Data.dll官网下载 在项目开发中链接MySQL数据库经常要用到Mysql.Data.dll,网上虽然有很多,但是还是比较信赖官网的 今天就从官网下载一次记录一下过程 1.下载地址 官 ...

  2. github--hello,world(参考官网)

    官网:https://guides.github.com/activities/hello-world/ 一共分为5步. 1.为你的项目新建仓库(repository): 2.新建分支(branch) ...

  3. Jmeter入门1 官网下载及安装

    1  Jmeter运行需要java环境.首先需要安装JDK. 图标是这样的:  2 下载apache-jmeter包. jmeter官网:http://jmeter.apache.org/ 3  解压 ...

  4. mysql的优化:官网地址

    http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#index-merge-optimization

  5. centos7 mysql 5.7 官网下载tar安装

    https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下载好上传到服务器,解压后以此安装 libs,client,server三个rpm r ...

  6. mysql官网下载对应的mysql包

    1.  在百度搜索mysql,点击mysql官网上下载mysql的地址 在url直接输入mysql的下载地址也可以:https://dev.mysql.com/downloads/mysql/ 如图: ...

  7. 【Spark深入学习 -16】官网学习SparkSQL

    ----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSess ...

  8. Bootstrap--模仿官网写一个页面

    本文参考Bootstrap官方文档写了简单页面来熟悉Bootstrap的栅格系统.常用CSS样.Javascript插件和部分组件. 以下html代码可以直接复制本地运行: BootstrapPage ...

  9. MySQL入门——在Linux下安装和卸载MySQL

    MySQL入门——在Linux下安装和卸载MySQL 摘要:本文主要学习了如何在Linux系统中安装和卸载MySQL数据库. 查看有没有安装过MySQL 使用命令查看有没有安装过: [root@loc ...

随机推荐

  1. Redis数据过期策略详解

    http://www.cnblogs.com/xuliangxing/p/7151812.html 本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用 ...

  2. Docker(2):使用Dockerfile创建支持SSH服务的镜像

    1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...

  3. 013_实践HTTP206状态:部分内容和范围请求

    HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了".HTTP/1.1 200 OK是HTTP请求成功后的标准响应,当你在浏览器中打开www. ...

  4. linux目录2

    19.linux注释多行 20.防火墙 21.创建逻辑卷 22.两台主机,ssh端口不同,如何拷贝文件    

  5. Web前端知识点记录

    一.HTML的加载顺序 浏览器边下载HTML,边解析HTML代码,二者是从上往下同步进行的 先解析<head>中的代码,在<head>中遇到了<script>标签, ...

  6. c++ cout、cin、endl

    cout是标准输出流对象,<<是输出操作符:cin是标准输入流对象,>>是输入操作符:endl是换行符操作符.他们都属于C++标准库,所以都在std的名字空间里.所以要在开头写 ...

  7. 装饰器模式以及Laravel框架下的中间件应用

    Laravel框架的中间件使用:从请求进来到响应返回,经过中间件的层层包装,这种场景很适合用到一种设计模式---装饰器模式. 装饰器模式的作用,多种外界因素改变对象的行为.使用继承的方式改变行为不太被 ...

  8. Java面试准备之探究源码

    摘要:之前虽然对集合框架一些知识点作了总结,但是想想面试可能会问源码,于是又大致研究了一下集合框架的一些实现类的源码,在此整理一下. 一.集合框架 二.深究实现类 1.ArrayList源码实现 Ar ...

  9. python多线程和多进程

    1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发 ...

  10. ESXI 6.5安装详细步骤

    网址:http://blog.51cto.com/laotang6/2044861 ESXi是专为运行虚拟机.最大限度降低配置要求和简化部署而设计.只需几分钟时间,客户便可完成从安装到运行虚拟机的全过 ...