Rumah > pangkalan data > tutorial mysql > 总结和Mysql相关的知识

总结和Mysql相关的知识

PHP中文网
Lepaskan: 2017-06-21 16:08:42
asal
798 orang telah melayarinya

获得数据库和表的信息

一般正常的程序员或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 (
Salin selepas log masuk
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Salin selepas log masuk
Salin selepas log masuk
    name CHAR(60) NOT NULL,
Salin selepas log masuk
    PRIMARY KEY (id)
Salin selepas log masuk
Salin selepas log masuk
);
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
CREATE TABLE shirt (
Salin selepas log masuk
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Salin selepas log masuk
Salin selepas log masuk
    style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
Salin selepas log masuk
    color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
Salin selepas log masuk
    owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
Salin selepas log masuk
    PRIMARY KEY (id)
Salin selepas log masuk
Salin selepas log masuk
);
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO person VALUES (NULL, 'Antonio Paz');
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
SELECT @last := LAST_INSERT_ID();
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO shirt VALUES
Salin selepas log masuk
Salin selepas log masuk
(NULL, 'polo', 'blue', @last),
Salin selepas log masuk
(NULL, 'dress', 'white', @last),
Salin selepas log masuk
(NULL, 't-shirt', 'blue', @last);
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
SELECT @last := LAST_INSERT_ID();
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO shirt VALUES
Salin selepas log masuk
Salin selepas log masuk
(NULL, 'dress', 'orange', @last),
Salin selepas log masuk
(NULL, 'polo', 'red', @last),
Salin selepas log masuk
(NULL, 'dress', 'blue', @last),
Salin selepas log masuk
(NULL, 't-shirt', 'white', @last);
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
SELECT * FROM person;
Salin selepas log masuk
+----+---------------------+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
| id | name                |
Salin selepas log masuk
+----+---------------------+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
|  1 | Antonio Paz         |
Salin selepas log masuk
|  2 | Lilliana Angelovska |
Salin selepas log masuk
+----+---------------------+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
SELECT * FROM shirt;
Salin selepas log masuk
+----+---------+--------+-------+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
| id | style   | color  | owner |
Salin selepas log masuk
+----+---------+--------+-------+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
|  1 | polo    | blue   |     1 |
Salin selepas log masuk
|  2 | dress   | white  |     1 |
Salin selepas log masuk
|  3 | t-shirt | blue   |     1 |
Salin selepas log masuk
|  4 | dress   | orange |     2 |
Salin selepas log masuk
|  5 | polo    | red    |     2 |
Salin selepas log masuk
|  6 | dress   | blue   |     2 |
Salin selepas log masuk
|  7 | t-shirt | white  |     2 |
Salin selepas log masuk
+----+---------+--------+-------+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
SELECT s.* FROM person p, shirt s
Salin selepas log masuk
 WHERE p.name LIKE 'Lilliana%'
Salin selepas log masuk
   AND s.owner = p.id
Salin selepas log masuk
   AND s.color <> 'white';
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
+----+-------+--------+-------+
Salin selepas log masuk
Salin selepas log masuk
| id | style | color  | owner |
Salin selepas log masuk
+----+-------+--------+-------+
Salin selepas log masuk
Salin selepas log masuk
|  4 | dress | orange |     2 |
Salin selepas log masuk
|  5 | polo  | red    |     2 |
Salin selepas log masuk
|  6 | dress | blue   |     2 |
Salin selepas log masuk
+----+-------+--------+-------+



我错了,网断了。只好拷贝书上的代码了。
Salin selepas log masuk

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>

Atas ialah kandungan terperinci 总结和Mysql相关的知识. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan