目录
获得数据库和表的信息
常用查询的例子
列的最大值
拥有某个列的最大值的行
列的最大值:按组
拥有某个字段的组间最大值的行
使用用户变量
使用外键
首页 数据库 mysql教程 总结和Mysql相关的知识

总结和Mysql相关的知识

Jun 21, 2017 pm 04:08 PM
mysql 学习 笔记

获得数据库和表的信息

一般正常的程序员或DBA都会在敲代码的时候突然想到这样的一系列问题:我是谁?我在哪?我在干什么? 我的数据库呢?我的表呢?我表怎么创建的?我该怎么办呢?你可能会想到SHOW DATABASES; 命令。But, 这个命令是列出由mysql管理的databases. 不是知道我再哪的命令。到底哪个命令是呢?

 

 

我左某人在翻阅上古的典籍的时候查到这样的一个命令:

SELECT DATABASE();

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

mysql>

 

 

显而易见,这是一个告诉我我再哪个数据库的命令。然后肯定会有一群二五仔问:我要是没有进入任何数据库那会显示什么呢?

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

mysql>

当然是NULL了,还能有什么?

 

 

现在,我们找到了正在使用的数据库(test) 。然后,该找要找的表了,比如说(pet)。 根据古籍上面的记载应该使用如下的命令:

SHOW TABLES;

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| event          |
| pet            |
+----------------+
2 rows in set (0.00 sec)

mysql>

 

 

And then I want to know 表的结构。What should I do?

DESCRIBE pet;

mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| 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    |       |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql>

 

 

老司机一般都简写成

DESC pet;

Field 表示列名字

Type表示列的数据类型

Null表示能否为NULL

Key表示是否被索引

Default表示字段的默认值

如果表有索引,SHOW INDEX FROM tbl_name 显示索引的信息。

 

 

常用查询的例子

 

 

在搞事情之前,肯定要先建一个表:假定有一个表(shop)来存储某商人()的每件物品()的价格()。(物品、商人作为主键)

操作如下:

mysql> CREATE TABLE shop(
   -> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
   -> dealer CHAR(20) DEFAULT '' NOT NULL,
   -> price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
   -> PRIMARY KEY(article, dealer));
Query OK, 0 rows affected (0.56 sec)

mysql>

然后插入一些数据:

mysql> INSERT INTO shop VALUES
   -> (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),
   -> (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
Query OK, 7 rows affected (0.24 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql>

查看一下表:

mysql> SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    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 |
+---------+--------+-------+
7 rows in set (0.00 sec)

mysql>

 

然后我们就可以学习后面的内容了


列的最大值

 

 

举例:在shop中的最大的物品号?

操作如下:

SELECT MAX(article) FROM shop;

mysql> SELECT MAX(article) FROM shop;
+--------------+
| MAX(article) |
+--------------+
|            4 |
+--------------+
1 row in set (0.00 sec)

mysql>

 

 

举例:找最贵的商品

操作如下:

SELECT MAX(price) FROM shop;

mysql> SELECT MAX(price) FROM shop;
+------------+
| MAX(price) |
+------------+
|      19.95 |
+------------+
1 row in set (0.00 sec)

mysql>

知道MAX()函数是干啥的了吧。

 

 

拥有某个列的最大值的行

 

 

栗子:查询最贵的商品的信息

操作如下:

SELECT * FROM shop WHERE price = (SELECT MAX(price) FROM shop);

mysql> SELECT * FROM shop
   -> WHERE price =
   -> (SELECT MAX(price) FROM shop);
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0004 | D      | 19.95 |
+---------+--------+-------+
1 row in set (0.00 sec)

mysql>

还有一种操作:

SELECT * FROM shop ORDER BY price DESC LIMIT 1;

mysql> SELECT * FROM shop
   -> ORDER BY price DESC
   -> LIMIT 1;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0004 | D      | 19.95 |
+---------+--------+-------+
1 row in set (0.00 sec)

mysql>

前者是一个嵌套查询,后者是根据价格排序只显示一个。

 

 

列的最大值:按组

 

 

栗子:每项物品(article)的最高价格是多少?

操作如下:

SELECT article, MAX(price) AS price FROM shop GROUP BY article;

mysql> SELECT article, MAX(price) AS price
   -> FROM shop
   -> GROUP BY article;
+---------+-------+
| article | price |
+---------+-------+
|    0001 |  3.99 |
|    0002 | 10.99 |
|    0003 |  1.69 |
|    0004 | 19.95 |
+---------+-------+
4 rows in set (0.00 sec)

mysql>

 

 

拥有某个字段的组间最大值的行

 

 

并不明白标题是啥意思。。。。

栗子:对每项物品,找出最贵价格的物品的经销商。

操作如下:

SELECT article, dealer, price
FROM shop s1
WHERE price = (SELECT MAX(price)
FROM shop s2
WHERE s1.article = s2.article);

mysql> SELECT article, dealer, price
   -> FROM shop s1
   -> WHERE price = (SELECT MAX(s2.price)
   -> FROM shop s2
   -> WHERE s1.article = s2.article);
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0001 | B      |  3.99 |
|    0002 | A      | 10.99 |
|    0003 | C      |  1.69 |
|    0004 | D      | 19.95 |
+---------+--------+-------+
4 rows in set (0.00 sec)

这里书上没写为什么,自己也不是十分理解。求懂的大佬在评论区讲解●﹏●。

 

 

使用用户变量

 

 

栗子:找出价格最高或最低的物品

操作如下:

SELECT @min_price:=MIN(price), @max_price:=MAX(price) FORM shop;

SELECT * FROM shop WHERE price = @min_price OR price = @max_price;

mysql> SELECT @min_price:=MIN(price), @max_price:=MAX(price) FROM shop;
+------------------------+------------------------+
| @min_price:=MIN(price) | @max_price:=MAX(price) |
+------------------------+------------------------+
|                   1.25 |                  19.95 |
+------------------------+------------------------+
1 row in set (0.13 sec)

mysql> SELECT * FROM shop WHERE price=@min_price OR price = @max_price;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0003 | D      |  1.25 |
|    0004 | D      | 19.95 |
+---------+--------+-------+
2 rows in set (0.09 sec)

mysql>

关于用户变量后面会有的,好奇的鸨鸨可以百度。

 

 

使用外键

 

 

多说无意 直接上操作, 上面有一个传送门,讲的很不错了。

 

 

 

CREATE TABLE person (
登录后复制
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
登录后复制
登录后复制
    name CHAR(60) NOT NULL,
登录后复制
    PRIMARY KEY (id)
登录后复制
登录后复制
);
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
CREATE TABLE shirt (
登录后复制
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
登录后复制
登录后复制
    style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
登录后复制
    color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
登录后复制
    owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
登录后复制
    PRIMARY KEY (id)
登录后复制
登录后复制
);
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
INSERT INTO person VALUES (NULL, 'Antonio Paz');
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
SELECT @last := LAST_INSERT_ID();
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
INSERT INTO shirt VALUES
登录后复制
登录后复制
(NULL, 'polo', 'blue', @last),
登录后复制
(NULL, 'dress', 'white', @last),
登录后复制
(NULL, 't-shirt', 'blue', @last);
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
SELECT @last := LAST_INSERT_ID();
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
INSERT INTO shirt VALUES
登录后复制
登录后复制
(NULL, 'dress', 'orange', @last),
登录后复制
(NULL, 'polo', 'red', @last),
登录后复制
(NULL, 'dress', 'blue', @last),
登录后复制
(NULL, 't-shirt', 'white', @last);
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
SELECT * FROM person;
登录后复制
+----+---------------------+
登录后复制
登录后复制
登录后复制
| id | name                |
登录后复制
+----+---------------------+
登录后复制
登录后复制
登录后复制
|  1 | Antonio Paz         |
登录后复制
|  2 | Lilliana Angelovska |
登录后复制
+----+---------------------+
登录后复制
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
SELECT * FROM shirt;
登录后复制
+----+---------+--------+-------+
登录后复制
登录后复制
登录后复制
| id | style   | color  | owner |
登录后复制
+----+---------+--------+-------+
登录后复制
登录后复制
登录后复制
|  1 | polo    | blue   |     1 |
登录后复制
|  2 | dress   | white  |     1 |
登录后复制
|  3 | t-shirt | blue   |     1 |
登录后复制
|  4 | dress   | orange |     2 |
登录后复制
|  5 | polo    | red    |     2 |
登录后复制
|  6 | dress   | blue   |     2 |
登录后复制
|  7 | t-shirt | white  |     2 |
登录后复制
+----+---------+--------+-------+
登录后复制
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
SELECT s.* FROM person p, shirt s
登录后复制
 WHERE p.name LIKE 'Lilliana%'
登录后复制
   AND s.owner = p.id
登录后复制
   AND s.color <> 'white';
登录后复制
 <br>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
+----+-------+--------+-------+
登录后复制
登录后复制
| id | style | color  | owner |
登录后复制
+----+-------+--------+-------+
登录后复制
登录后复制
|  4 | dress | orange |     2 |
登录后复制
|  5 | polo  | red    |     2 |
登录后复制
|  6 | dress | blue   |     2 |
登录后复制
+----+-------+--------+-------+



我错了,网断了。只好拷贝书上的代码了。
登录后复制

mysql> show create table shirt\G
*************************** 1. row ***************************
      Table: shirt
Create Table: CREATE TABLE `shirt` (
 `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
 `style` enum('t-shirt','polo','dress') NOT NULL,
 `color` enum('red','blue','orange','white','black') NOT NULL,
 `owner` smallint(5) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
1 row in set (0.01 sec)

mysql>

以上是总结和Mysql相关的知识的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql:简单的概念,用于轻松学习 mysql:简单的概念,用于轻松学习 Apr 10, 2025 am 09:29 AM

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

phpmyadmin怎么打开 phpmyadmin怎么打开 Apr 10, 2025 pm 10:51 PM

可以通过以下步骤打开 phpMyAdmin:1. 登录网站控制面板;2. 找到并点击 phpMyAdmin 图标;3. 输入 MySQL 凭据;4. 点击 "登录"。

navicat premium怎么创建 navicat premium怎么创建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 创建数据库:连接到数据库服务器并输入连接参数。右键单击服务器并选择“创建数据库”。输入新数据库的名称和指定字符集和排序规则。连接到新数据库并在“对象浏览器”中创建表。右键单击表并选择“插入数据”来插入数据。

MySQL:世界上最受欢迎的数据库的简介 MySQL:世界上最受欢迎的数据库的简介 Apr 12, 2025 am 12:18 AM

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

navicat怎么新建连接mysql navicat怎么新建连接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通过以下步骤新建 MySQL 连接:打开应用程序并选择“新建连接”(Ctrl N)。选择“MySQL”作为连接类型。输入主机名/IP 地址、端口、用户名和密码。(可选)配置高级选项。保存连接并输入连接名称。

redis怎么使用单线程 redis怎么使用单线程 Apr 10, 2025 pm 07:12 PM

Redis 使用单线程架构,以提供高性能、简单性和一致性。它利用 I/O 多路复用、事件循环、非阻塞 I/O 和共享内存来提高并发性,但同时存在并发性受限、单点故障和不适合写密集型工作负载的局限性。

为什么要使用mysql?利益和优势 为什么要使用mysql?利益和优势 Apr 12, 2025 am 12:17 AM

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

MySQL和SQL:开发人员的基本技能 MySQL和SQL:开发人员的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

See all articles