Mysql學習筆記008

来源:http://www.cnblogs.com/zuosy/archive/2017/06/01/6927985.html
-Advertisement-
Play Games

獲得資料庫和表的信息 一般正常的程式員或DBA都會在敲代碼的時候突然想到這樣的一系列問題:我是誰?我在哪?我在乾什麼? 我的資料庫呢?我的表呢?我表怎麼創建的?我該怎麼辦呢?你可能會想到SHOW DATABASES; 命令。But, 這個命令是列出由mysql管理的databases. 不是知道我再 ...


獲得資料庫和表的信息

 

 

一般正常的程式員或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)
);
 
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)
);
 
INSERT INTO person VALUES (NULL, 'Antonio Paz');
 
SELECT @last := LAST_INSERT_ID();
 
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);
 
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
 
SELECT @last := LAST_INSERT_ID();
 
INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', @last),
(NULL, 'polo', 'red', @last),
(NULL, 'dress', 'blue', @last),
(NULL, 't-shirt', 'white', @last);
 
SELECT * FROM person;
+----+---------------------+
| id | name                |
+----+---------------------+
|  1 | Antonio Paz         |
|  2 | Lilliana Angelovska |
+----+---------------------+
 
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 |
+----+---------+--------+-------+
 
 
SELECT s.* FROM person p, shirt s
 WHERE p.name LIKE 'Lilliana%'
   AND s.owner = p.id
   AND s.color <> 'white';
 
+----+-------+--------+-------+
| 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>

 

外鍵其實沒啥講的,也就一篇博客的事兒(手動滑稽)

 

to be continued...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從.netCore開源項目來看,eShopOnContainers來說,它的部署是跨平臺的,可以部署在linux,docker上,在linux上運行它也可以寫一些集成的小腳本,這是微信工程師為我們提供一個部署發佈方案的SH腳本 上面的解決主要體現了發佈時用的一些命令,如數組,遍歷,條件語句,刪除文件 ...
  • 參考 http://www.cnblogs.com/zhaopengcheng/p/6017855.html 使用x11vnc作為vncserver端 1 安裝x11vnc 2 生成密碼 3 開啟服務 ps:之前遇到了用vnc-viewer連接,鍵盤Caps Lock和小鍵盤錯位的問題,加上選項 然 ...
  • 1. 常用命令 ...
  • 今天使用find命令查找刪除文件時,遇到下麵錯誤,這個是因為在{}和\之間必須要有空格,否則會報上面的錯。 以前都沒有註意到這個細節,特此記錄一下。 [root@DB-Server full]# find . -maxdepth 1 -type d -mtime +3 -exec rm -rf {} ...
  • SELECT * FROM (SELECT a.*,rownum row_num FROM (SELECT etpcode,etpename FROM tetp c ORDER BY c.etpcode DESC ) a ) b WHERE b.row_num BETWEEN 1 AND 2 ...
  • 最近在編寫一個小型基於的jsp系統開發。掌握資料庫一直感覺還不錯。但是今天就出現了一個問題困擾我大半天。後來本來準備睡覺,但是覺得今天不解決這個問題恐怕晚上是“徹夜難眠啊”!!於是打開電腦,又開始搗騰。遇到問題首先去網上search了一下。但是大多數的結果只能說:只能遠看而不能解決我的問題。 首先我 ...
  • ORACLE體繫結構包括:實例(Instance),資料庫文件,用戶進程(User process),伺服器進程以及其他文件。 1.ORACLE實例(instance) 1).要訪問資料庫必須先啟動實例,實例啟動時先分配記憶體區,然後再啟動後臺進程,後他進程執行資料庫的輸入,輸出以及監控其他進程。 在 ...
  • 今天在虛擬機上掛載光碟時提示: [root@primary dev]# mount /dev/cdrom /mnt/cdrom mount: you must specify the filesystem type 處理方法: 虛擬機-〉setting->cd/dvd-〉device status- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...