热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql官方文档学习笔记——简易教程

mysql简易教程(官方文档学习笔记)查询版本号mysqlSELECTVERSION(),CURRENT_DATE;----------------------------|

mysql简易教程(官方文档学习笔记)

查询版本号

mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| VERSION() | CURRENT_DATE |
+--------------+--------------+
| 5.7.1-m4-log | 2012-12-25 |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>

分配用户权限

mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';

远程连接

您的数据库只需要创建一次,但您必须在每次开始mysql 会话时选择它。您可以通过发布USE如示例中所示的语句来完成此操作 。或者,您可以在调用mysql时在命令行上选择数据库。只需在您可能需要提供的任何连接参数之后指定其名称即可。例如:

shell> mysql -h host -u user -p menagerie
Enter password: ********

创建数据库

create database python_23_1 charset=utf8;

创建表格

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

插入数据

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

更新数据

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

查询语句

# 条件查询
mysql> SELECT * FROM pet WHERE birth >= '1998-1-1';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+# 条件查询
mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+# 选择字段显示
mysql> SELECT name, birth FROM pet;
+----------+------------+
| name | birth |
+----------+------------+
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Buffy | 1989-05-13 |
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| Chirpy | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim | 1996-04-29 |
| Puffball | 1999-03-30 |
+----------+------------+# 去重
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner |
+--------+
| Benny |
| Diane |
| Gwen |
| Harold |
+--------+mysql> SELECT name, species, birth FROM pet-> WHERE species = 'dog' OR species = 'cat';
+--------+---------+------------+
| name | species | birth |
+--------+---------+------------+
| Fluffy | cat | 1993-02-04 |
| Claws | cat | 1994-03-17 |
| Buffy | dog | 1989-05-13 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
+--------+---------+------------+

查询排序

mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name | birth |
+----------+------------+
| Buffy | 1989-05-13 |
| Bowser | 1989-08-31 |
| Fang | 1990-08-27 |
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Slim | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+# 默认排序顺序是升序排列,最小值排在第一位。要按反向(降序)顺序排序,请将DESC关键字添加到要排序 的列的名称中
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name | birth |
+----------+------------+
| Puffball | 1999-03-30 |
| Chirpy | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim | 1996-04-29 |
| Claws | 1994-03-17 |
| Fluffy | 1993-02-04 |
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| Buffy | 1989-05-13 |
+----------+------------+"""您可以对多个列进行排序,并且可以按不同方向排序不同的列。例如,要按照升序排列动物类型,
然后按降序排列动物类型中的出生日期(首先是最年轻的动物),"""
mysql> SELECT name, species, birth FROM pet-> ORDER BY species, birth DESC;
+----------+---------+------------+
| name | species | birth |
+----------+---------+------------+
| Chirpy | bird | 1998-09-11 |
| Whistler | bird | 1997-12-09 |
| Claws | cat | 1994-03-17 |
| Fluffy | cat | 1993-02-04 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
| Buffy | dog | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim | snake | 1996-04-29 |
+----------+---------+------------+

计算日期

# 要确定每只宠物有多少岁,请使用该 TIMESTAMPDIFF()功能。它的论据是你想要表达结果的单位,
# 以及两个取得差异的日期。以下查询显示了每个宠物的出生日期,当前日期和年数
mysql> SELECT name, birth, CURDATE(),-> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age-> FROM pet;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
+----------+------------+------------+------+

null

# 查询使用death IS NOT NULL而不是death <> NULL因为 NULL是使用通常的比较运算符无法比较的特殊值。
mysql> SELECT name, birth, death,-> TIMESTAMPDIFF(YEAR,birth,death) AS age-> FROM pet WHERE death IS NOT NULL ORDER BY age;
&#43;--------&#43;------------&#43;------------&#43;------&#43;
| name | birth | death | age |
&#43;--------&#43;------------&#43;------------&#43;------&#43;
| Bowser | 1989-08-31 | 1995-07-29 | 5 |
&#43;--------&#43;------------&#43;------------&#43;------&#43;

只显示年份、月份、日期

如果你想知道下个月哪些动物有生日&#xff0c;该怎么办&#xff1f;对于这种计算&#xff0c;年和日是无关紧要的; 你只是想提取birth列的月份部分 。MySQL提供了用于提取日期的部分&#xff0c;如一些功能 YEAR()&#xff0c; MONTH()和 DAYOFMONTH()。 MONTH()这里是合适的功能。要查看它的工作原理&#xff0c;请运行一个简单的查询&#xff0c;以显示两者的值birth和 MONTH(birth)&#xff1a;

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

模式匹配

为了找到名字开头b&#xff1a;

mysql> SELECT * FROM pet WHERE name LIKE &#39;b%&#39;;
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| name | owner | species | sex | birth | death |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;------------&#43;

要查找以下列结尾的名字fy&#xff1a;

mysql> SELECT * FROM pet WHERE name LIKE &#39;%fy&#39;;
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| name | owner | species | sex | birth | death |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;

查找包含以下内容的名称w

mysql> SELECT * FROM pet WHERE name LIKE &#39;%w%&#39;;
&#43;----------&#43;-------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| name | owner | species | sex | birth | death |
&#43;----------&#43;-------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
&#43;----------&#43;-------&#43;---------&#43;------&#43;------------&#43;------------&#43;

要查找包含正好包含五个字符的名称&#xff0c;请使用_模式字符的五个实例&#xff1a;

mysql> SELECT * FROM pet WHERE name LIKE &#39;_____&#39;;
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| name | owner | species | sex | birth | death |
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;

使用正则匹配

以下列表描述了扩展正则表达式的一些特征&#xff1a;

  1. . 匹配任何单个字符。

  2. 一个字符类[...]匹配括号内的任何字符。例如&#xff0c; [abc]匹配a&#xff0c; b或c。要命名一系列字符&#xff0c;请使用短划线。[a-z] 匹配任何字母&#xff0c;而[0-9] 匹配任何数字。

  3. 匹配零个或多个前面的事物的实例。例如&#xff0c;x 匹配任意数量的x字符&#xff0c; [0-9]*匹配任意数量的数字&#xff0c;并.*匹配任意数量的任何数字。

  4. 如果模式匹配正在测试的值中的任何位置&#xff0c;则正则表达式模式匹配会成功。&#xff08;这与LIKE模式匹配不同&#xff0c;只有模式匹配整个值才能成功。&#xff09;

  5. 要锚定一个模式&#xff0c;以便它必须匹配被测试值^的开始或$结束&#xff0c;请在模式的开始或结尾使用。

  6. 为了演示扩展正则表达式的工作原理&#xff0c;LIKE先前显示的 查询在这里被重写以供使用REGEXP。

要查找以名字开头的名字b&#xff0c;请使用 ^以匹配名称的开头&#xff1a;

mysql> SELECT * FROM pet WHERE name REGEXP &#39;^b&#39;;
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| name | owner | species | sex | birth | death |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;------------&#43;

要强制REGEXP比较区分大小写&#xff0c;请使用BINARY 关键字使其中一个字符串成为二进制字符串。该查询仅b在名称的开头匹配小写字母&#xff1a;

SELECT * FROM pet WHERE name REGEXP BINARY &#39;^b&#39;;

要查找以结尾的名字fy&#xff0c;请使用 $以匹配名称的结尾&#xff1a;

mysql> SELECT * FROM pet WHERE name REGEXP &#39;fy$&#39;;
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| name | owner | species | sex | birth | death |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
&#43;--------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;

要查找包含a的名称w&#xff0c;请使用以下查询&#xff1a;

mysql> SELECT * FROM pet WHERE name REGEXP &#39;w&#39;;
&#43;----------&#43;-------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| name | owner | species | sex | birth | death |
&#43;----------&#43;-------&#43;---------&#43;------&#43;------------&#43;------------&#43;
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
&#43;----------&#43;-------&#43;---------&#43;------&#43;------------&#43;------------&#43;

要查找包含正好包含五个字符的名称&#xff0c;请使用 ^$匹配名称的开头和结尾以及.中间的五个实例 &#xff1a;

mysql> SELECT * FROM pet WHERE name REGEXP &#39;^.....$&#39;;
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| name | owner | species | sex | birth | death |
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;

您还可以使用 &#xff08;“ repeat- times ”&#xff09;运算符来编写以前的查询 &#xff1a; {n}n

mysql> SELECT * FROM pet WHERE name REGEXP &#39;^.{5}$&#39;;
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| name | owner | species | sex | birth | death |
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
&#43;-------&#43;--------&#43;---------&#43;------&#43;------------&#43;-------&#43;

使用count计数

mysql> SELECT COUNT(*) FROM pet;
&#43;----------&#43;
| COUNT(*) |
&#43;----------&#43;
| 9 |
&#43;----------&#43;

此前&#xff0c;您检索了拥有宠物的人的姓名。COUNT()如果你想找出每个拥有者有多少宠物&#xff0c;你可以使用&#xff1a;

查询用于GROUP BY将每个记录分组owner。使用的 COUNT()结合 GROUP BY是在各种分组表征您的数据非常有用。以下示例显示了进行动物普查操作的不同方法。

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
&#43;--------&#43;----------&#43;
| owner | COUNT(*) |
&#43;--------&#43;----------&#43;
| Benny | 2 |
| Diane | 2 |
| Gwen | 3 |
| Harold | 2 |
&#43;--------&#43;----------&#43;

每种动物的数量&#xff1a;

mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
&#43;---------&#43;----------&#43;
| species | COUNT(*) |
&#43;---------&#43;----------&#43;
| bird | 2 |
| cat | 2 |
| dog | 3 |
| hamster | 1 |
| snake | 1 |
&#43;---------&#43;----------&#43;

每个性别的动物数量&#xff1a;

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
&#43;------&#43;----------&#43;
| sex | COUNT(*) |
&#43;------&#43;----------&#43;
| NULL | 1 |
| f | 4 |
| m | 4 |
&#43;------&#43;----------&#43;

每种物种和性别组合的动物数量&#xff1a;

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
&#43;---------&#43;------&#43;----------&#43;
| species | sex | COUNT(*) |
&#43;---------&#43;------&#43;----------&#43;
| bird | NULL | 1 |
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
&#43;---------&#43;------&#43;----------&#43;

使用时无需检索整个表格 COUNT()。例如&#xff0c;以前的查询只在狗和猫上执行&#xff0c;看起来像这样&#xff1a;

mysql> SELECT species, sex, COUNT(*) FROM pet-> WHERE species &#61; &#39;dog&#39; OR species &#61; &#39;cat&#39;-> GROUP BY species, sex;
&#43;---------&#43;------&#43;----------&#43;
| species | sex | COUNT(*) |
&#43;---------&#43;------&#43;----------&#43;
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
&#43;---------&#43;------&#43;----------&#43;

或者&#xff0c;如果你只想知道每个性别的动物数量&#xff1a;

mysql> SELECT species, sex, COUNT(*) FROM pet-> WHERE sex IS NOT NULL-> GROUP BY species, sex;
&#43;---------&#43;------&#43;----------&#43;
| species | sex | COUNT(*) |
&#43;---------&#43;------&#43;----------&#43;
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
&#43;---------&#43;------&#43;----------&#43;

多张表

创建表格

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

重txt文件中添加数据 注意&#xff1a;txt文件中的日期必须是&#xff1a; 1993-06-23格式

LOAD DATA LOCAL INFILE &#39;路径/pet.txt&#39; INTO TABLE event;

联表查询

mysql> SELECT pet.name,-> TIMESTAMPDIFF(YEAR,birth,date) AS age,-> remark-> FROM pet INNER JOIN event-> ON pet.name &#61; event.name-> WHERE event.type &#61; &#39;litter&#39;;
&#43;--------&#43;------&#43;-----------------------------&#43;
| name | age | remark |
&#43;--------&#43;------&#43;-----------------------------&#43;
| Fluffy | 2 | 4 kittens, 3 female, 1 male |
| Buffy | 4 | 5 puppies, 2 female, 3 male |
| Buffy | 5 | 3 puppies, 3 female |
&#43;--------&#43;------&#43;-----------------------------&#43;

这个查询有几点需要注意&#xff1a;

  • 该FROM子句加入两个表&#xff0c;因为查询需要从两者中提取信息。
  • 从多个表合并&#xff08;加入&#xff09;信息时&#xff0c;您需要指定一个表中的记录如何与另一个表中的记录相匹配。这很容易&#xff0c;因为他们都有name专栏。该查询使用一个ON子句根据这些name值匹配两个表中的记录。

    该查询使用一个INNER JOIN来组合这些表。一个INNER JOIN或者从表许可证行当且仅当两个表满> 足所规定的条件&#xff0c;以显示在结果 ON子句。在这个例子中&#xff0c; ON子句指定 name列中的 pet表必须的匹配 name列 event表。如果一个名称出现在一个表中&#xff0c;而另一个不出现&#xff0c;则该行不会出现在结果中&#xff0c;因为该ON 子句中的条件失败。

  • 因为name列出现在两个表中&#xff0c;所以在引用列时必须明确指出哪个表是您的意思。这是通过将表名添加到列名中来完成的。

您不需要有两个不同的表来执行连接。如果要将表中的记录与同一表中的其他记录进行比较&#xff0c;有时将自己的表加入表是非常有用的。例如&#xff0c;要在您的宠物中找到育种配对&#xff0c;您可以将其pet与自己一起加入表以生成候选对的类似物种的男性和女性&#xff1a;

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species-> FROM pet AS p1 INNER JOIN pet AS p2-> ON p1.species &#61; p2.species AND p1.sex &#61; &#39;f&#39; AND p2.sex &#61; &#39;m&#39;;
&#43;--------&#43;------&#43;--------&#43;------&#43;---------&#43;
| name | sex | name | sex | species |
&#43;--------&#43;------&#43;--------&#43;------&#43;---------&#43;
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
| Buffy | f | Bowser | m | dog |
&#43;--------&#43;------&#43;--------&#43;------&#43;---------&#43;

###获取有关数据库和表格的信息

要找出当前选择哪个数据库&#xff0c;请使用以下 DATABASE()功能&#xff1a;

如果你还没有选择任何数据库&#xff0c;结果是 NULL。

mysql> SELECT DATABASE();
&#43;------------&#43;
| DATABASE() |
&#43;------------&#43;
| menagerie |
&#43;------------&#43;

要找出默认数据库包含哪些表&#xff08;例如&#xff0c;当您不确定表的名称时&#xff09;&#xff0c;请使用以下语句&#xff1a;

mysql> SHOW TABLES;
&#43;---------------------&#43;
| Tables_in_menagerie |
&#43;---------------------&#43;
| event |
| pet |
&#43;---------------------&#43;

如果你想了解一张表的结构&#xff0c;这个 DESCRIBE陈述是有用的; 它显示有关每个表格列的信息&#xff1a; 使用desc也可以

mysql> DESCRIBE pet;
&#43;---------&#43;-------------&#43;------&#43;-----&#43;---------&#43;-------&#43;
| Field | Type | Null | Key | Default | Extra |
&#43;---------&#43;-------------&#43;------&#43;-----&#43;---------&#43;-------&#43;
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
&#43;---------&#43;-------------&#43;------&#43;-----&#43;---------&#43;-------&#43;

###批量处理导入导出

您使用 交互式mysql来输入语句并查看结果。你也可以在批处理模式下运行mysql。为此&#xff0c;将要运行的语句放在一个文件中&#xff0c;然后告诉 mysql从文件读取其输入&#xff1a;

shell> mysql

如果你在Windows下运行mysql&#xff0c;并在文件中有一些导致问题的特殊字符&#xff0c;你可以这样做&#xff1a;

C:\> mysql -e "source batch-file"

如果您需要在命令行中指定连接参数&#xff0c;则该命令可能如下所示&#xff1a;

shell> mysql -h host -u user -p Enter password: ********

当你以这种方式使用mysql时&#xff0c;你正在创建一个脚本文件&#xff0c;然后执行脚本。

如果您希望脚本继续运行&#xff0c;即使其中的某些语句出现错误&#xff0c;您也应该使用 --force命令行选项。

为什么要使用脚本&#xff1f;这有几个原因&#xff1a;

  • 如果您反复运行查询&#xff08;例如每天或每周&#xff09;&#xff0c;将其作为脚本可以避免每次执行时重新输入查询。
  • 您可以通过复制和编辑脚本文件从现有的查询生成新的查询。
  • 批处理模式在开发查询时也很有用&#xff0c;特别是对于多行语句或多语句序列。如果你犯了一个错误&#xff0c;你不必重新键入一切。只需编辑你的脚本来纠正错误&#xff0c;然后告诉mysql再次执行它。
  • 如果您的查询产生大量输出&#xff0c;则可以通过传呼机运行输出&#xff0c;而不是通过滚动屏幕的顶部来滚动输出&#xff1a;

shell> mysql

  • 您可以捕获文件中的输出进行进一步处理&#xff1a;

shell> mysql mysql.out

  • 您可以将脚本分发给其他人&#xff0c;以便他们也可以运行这些语句。
  • 有些情况下不允许交互式使用&#xff0c;例如&#xff0c;当您从cron作业运行查询时。在这种情况下&#xff0c;您必须使用批处理模式。

在批处理模式下 运行mysql时&#xff0c;默认输出格式与交互式使用时不同&#xff08;更简洁&#xff09; 。例如&#xff0c;SELECT DISTINCT species FROM pet当mysql以交互方式运行时&#xff0c;输出如下所示 &#xff1a;

&#43;---------&#43;
| species |
&#43;---------&#43;
| bird |
| cat |
| dog |
| hamster |
| snake |
&#43;---------&#43;

在批处理模式下&#xff0c;输出如下所示&#xff1a;

species
bird
cat
dog
hamster
snake

如果您想以批处理模式获得交互式输出格式&#xff0c;请使用mysql -t。要向输出回显执行的语句&#xff0c;请使用mysql -v。

您还可以使用命令或 命令从mysql提示符使用脚本&#xff1a; source.

mysql> source filename;
mysql> \. filename

常见查询的例子

启动命令行工具mysql并选择一个数据库&#xff1a;

shell> mysql your-database-name

您可以使用以下语句创建并填充示例表&#xff1a;

CREATE TABLE shop (article INT(4) UNSIGNED ZEROFILL DEFAULT &#39;0000&#39; NOT NULL,dealer CHAR(20) DEFAULT &#39;&#39; NOT NULL,price DOUBLE(16,2) DEFAULT &#39;0.00&#39; NOT NULL,PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES(1,&#39;A&#39;,3.45),(1,&#39;B&#39;,3.99),(2,&#39;A&#39;,10.99),(3,&#39;B&#39;,1.45),(3,&#39;C&#39;,1.69),(3,&#39;D&#39;,1.25),(4,&#39;D&#39;,19.95);

发表声明后&#xff0c;表格应具有以下内容

SELECT * FROM shop;&#43;---------&#43;--------&#43;-------&#43;
| article | dealer | price |
&#43;---------&#43;--------&#43;-------&#43;
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
&#43;---------&#43;--------&#43;-------&#43;

列的最大值

SELECT MAX(article) AS article FROM shop;&#43;---------&#43;
| article |
&#43;---------&#43;
| 4 |
&#43;---------&#43;

查询指定字段最大值的行

SELECT article, dealer, price
FROM shop
WHERE price&#61;(SELECT MAX(price) FROM shop);&#43;---------&#43;--------&#43;-------&#43;
| article | dealer | price |
&#43;---------&#43;--------&#43;-------&#43;
| 0004 | D | 19.95 |
&#43;---------&#43;--------&#43;-------&#43;

其他解决方案是使用a LEFT JOIN或按照价格降序对所有行进行排序&#xff0c;并使用MySQL特定的LIMIT子句仅获得第一行&#xff1a;

# 左连接查询
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.price WHERE s2.article IS NULL;# 排序
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;

查找每篇文章的最高价格。

SELECT article, MAX(price) AS price
FROM shop
GROUP BY article;&#43;---------&#43;-------&#43;
| article | price |
&#43;---------&#43;-------&#43;
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
&#43;---------&#43;-------&#43;

对于每篇文章&#xff0c;找到价格最昂贵的经销商或经销商。

SELECT article, dealer, price
FROM shop s1
WHERE price&#61;(SELECT MAX(s2.price)FROM shop s2WHERE s1.article &#61; s2.article);&#43;---------&#43;--------&#43;-------&#43;
| article | dealer | price |
&#43;---------&#43;--------&#43;-------&#43;
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
&#43;---------&#43;--------&#43;-------&#43;

  • 上面的让人难以理解,这个更容易理解一点

SELECT article, dealer, price
FROM shop s1
WHERE price in (select max(price) from shop group by article);

####使用自定定义的变量

要查找价格最高和最低的商品&#xff0c;可以这样做&#xff1a;

mysql> SELECT &#64;min_price:&#61;MIN(price),&#64;max_price:&#61;MAX(price) FROM shop;
&#43;------------------------&#43;------------------------&#43;
| &#64;min_price:&#61;MIN(price) | &#64;max_price:&#61;MAX(price) |
&#43;------------------------&#43;------------------------&#43;
| 1.25 | 19.95 |
&#43;------------------------&#43;------------------------&#43;
1 row in set (0.01 sec)mysql> SELECT * FROM shop WHERE price&#61;&#64;min_price OR price&#61;&#64;max_price;
&#43;---------&#43;--------&#43;-------&#43;
| article | dealer | price |
&#43;---------&#43;--------&#43;-------&#43;
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
&#43;---------&#43;--------&#43;-------&#43;
2 rows in set (0.00 sec)

###每天计算访问次数

以下示例显示了如何使用位组函数来计算用户访问网页每月的天数

CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,day INT(2) UNSIGNED ZEROFILL);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),(2000,2,23),(2000,2,23);

要确定这些访问在每个月中有多少天不同&#xff0c;请使用以下查询&#xff1a;

mysql> select * from t1;
&#43;------&#43;-------&#43;------&#43;
| year | month | day |
&#43;------&#43;-------&#43;------&#43;
| 2000 | 01 | 01 |
| 2000 | 01 | 20 |
| 2000 | 01 | 30 |
| 2000 | 02 | 02 |
| 2000 | 02 | 23 |
| 2000 | 02 | 23 |
&#43;------&#43;-------&#43;------&#43;
6 rows in set (0.00 sec)SELECT year,month,BIT_COUNT(BIT_OR(1<| year | month | days |
&#43;------&#43;-------&#43;------&#43;
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
&#43;------&#43;-------&#43;------&#43;

转:https://juejin.im/post/5ae87640f265da0ba60f96ca



推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • MySQL 数据库基础学习 一、SQL的作用及分类 二、数据类型 三、存储引擎  (建库建表、数据插入等))
    MySQL 数据库基础学习 一、SQL的作用及分类 二、数据类型 三、存储引擎 (建库建表、数据插入等)) ... [详细]
  • 本文介绍了如何使用Python正则表达式匹配MATLAB的函数语法,包括多行匹配和跨行签名的处理方法。同时,作者还分享了自己遇到的问题和解决方案。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • python中使用正则表达式的步骤:1.导入re模块:importre2.初始化一个Regex对象:re.compile()3.刚刚创建的 ... [详细]
  • 搭建线上服务器环境,分享一下我安装MySql的步骤,也替大家踩踩坑!一、检查服务器是否已经安装MySqlrpm-qa|grepmysql如 ... [详细]
author-avatar
夏乐迎1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有