Java養成計劃----學習打卡第六十四天
內容導航
- 資料庫的相關操作
- 資料庫的匯入
- 查看匯入資料庫中的表
- 查看表中的資料
- 查看表的基本結構【簡化】
- 查看表的結構【詳細】
- 查看mysql資料庫的版本號
- 查詢當前使用的資料庫
- 退出mysql
- SQL查詢陳述句DQL
- 查詢一個表中的某個欄位
- 查詢多個欄位【使用逗號隔開就號】
- 給查詢的欄位起別名【AS】
- 如果起的別名里面有空格怎么辦
- 列參可直接數學運算
Java(打卡第六十四天)
MySQL資料庫
博文不是每天都在發送,但是學習是每天都在進行的,因為不想為寫而學,而是為學而寫
昨天已經進行了MySQL的基本的安裝,還有操作mySQL的命令比如SHOW ,CREATAE ,DESCRIBE,同時了解了分類,Data query language;資料 查詢;SELECT data manipulation language INSERT , DELETE , UPDATE ; data definition language ; CREATE DROP ALTER SHOW ; transaction control language COMMIT ROLLBACK ; data control language GRANT , REVOKE
資料庫的相關操作
資料庫的匯入
我們經常需要將sql檔案給匯入,那么這個時候就使用命令SOURCE + 路徑,注意路徑中不能有中文,這里我為了演示,先將資料庫world使用命令
DROP DATABASE world;
洗掉之后,匯入資料庫
mysql> SOURCE D:\MySQL\Samples and Examples 8.0\Sample Databases\World\world-schema.sql
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
出現上述陳述句就是匯入成功了,這里可以看一下
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| cfengbase |
| company |
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
8 rows in set (0.01 sec)
匯入成功
查看匯入資料庫中的表
就像查看資料庫使用SHOW DATABASES; 當使用USE base_name之后就可以使用
SHOW TABLES;
查看資料庫中有那些表
mysql> SHOW TABLES;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
3 rows in set (0.01 sec)
這里有3張表,第一張表為city表,第二張表為country表,第三張表是countylanguage表
查看表中的資料
增刪查改中的查,是對資料進行的操作,那就是DQL,data query language,使用
SELECT * FROM table_name; //統一執行該陳述句
這里我們查看一下city表格的內容
mysql> SELECT * FROM city;
+------+-----------------------------------+-------------+------------------------+------------+
| ID | Name | CountryCode | District | Population |
+------+-----------------------------------+-------------+------------------------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
| 2 | Qandahar | AFG | Qandahar | 237500 |
| 3 | Herat | AFG | Herat | 186800 |
| 4 | Mazar-e-Sharif | AFG | Balkh | 127800 |
| 5 | Amsterdam | NLD | Noord-Holland | 731200 |
| 6 | Rotterdam | NLD | Zuid-Holland | 593321 |
| 7 | Haag | NLD | Zuid-Holland | 440900 |
| 8 | Utrecht | NLD | Utrecht | 234323 |
| 9 | Eindhoven | NLD | Noord-Brabant | 201843 |
| 10 | Tilburg | NLD | Noord-Brabant | 193238 |
| 11 | Groningen | NLD | Groningen | 172701 |
| 12 | Breda | NLD | Noord-Brabant | 160398 |
| 13 | Apeldoorn | NLD | Gelderland | 153491 |
| 14 | Nijmegen | NLD | Gelderland | 152463 |
| 15 | Enschede | NLD | Overijssel | 149544 |
| 16 | Haarlem | NLD | Noord-Holland | 148772 |
| 17 | Almere | NLD | Flevoland | 142465 |
| 18 | Arnhem | NLD | Gelderland | 138020 |
| 19 | Zaanstad | NLD | Noord-Holland | 135621 |
| 20 | ?s-Hertogenbosch | NLD | Noord-Brabant | 129170 |
| 21 | Amersfoort | NLD | Utrecht | 126270 |
………………………………………………………………………………………………………………………………………………………………
| 4064 | Odessa | USA | Texas | 89293 |
| 4065 | Carson | USA | California | 89089 |
| 4066 | Charleston | USA | South Carolina | 89063 |
| 4067 | Charlotte Amalie | VIR | St Thomas | 13000 |
| 4068 | Harare | ZWE | Harare | 1410000 |
| 4069 | Bulawayo | ZWE | Bulawayo | 621742 |
| 4070 | Chitungwiza | ZWE | Harare | 274912 |
| 4071 | Mount Darwin | ZWE | Harare | 164362 |
| 4072 | Mutare | ZWE | Manicaland | 131367 |
| 4073 | Gweru | ZWE | Midlands | 128037 |
| 4074 | Gaza | PSE | Gaza | 353632 |
| 4075 | Khan Yunis | PSE | Khan Yunis | 123175 |
| 4076 | Hebron | PSE | Hebron | 119401 |
| 4077 | Jabaliya | PSE | North Gaza | 113901 |
| 4078 | Nablus | PSE | Nablus | 100231 |
| 4079 | Rafah | PSE | Rafah | 92020 |
+------+-----------------------------------+-------------+------------------------+------------+
4079 rows in set (0.02 sec)
這張表記錄的是世界主要的城市,第一列是城市的名稱,第二個欄位是城市所處的國家,第三個欄位是城市所處的州【省】
mysql> DESCRIBE country;
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
| Code | char(3) | NO | PRI | | |
| Name | char(52) | NO | | | |
| Continent | enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') | NO | | Asia | |
| Region | char(26) | NO | | | |
| SurfaceArea | float(10,2) | NO | | 0.00 | |
| IndepYear | smallint | YES | | NULL | |
| Population | int | NO | | 0 | |
| LifeExpectancy | float(3,1) | YES | | NULL | |
| GNP | float(10,2) | YES | | NULL | |
| GNPOld | float(10,2) | YES | | NULL | |
| LocalName | char(45) | NO | | | |
| GovernmentForm | char(45) | NO | | | |
| HeadOfState | char(60) | YES | | NULL | |
| Capital | int | YES | | NULL | |
| Code2 | char(2) | NO | | | |
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
15 rows in set (0.01 sec)
mysql> DESCRIBE city;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> DESCRIBE countrylanguage;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| CountryCode | char(3) | NO | PRI | | |
| Language | char(30) | NO | PRI | | |
| IsOfficial | enum('T','F') | NO | | F | |
| Percentage | float(4,1) | NO | | 0.0 | |
+-------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
另外兩張表就不看了,太多資料了,cmd視窗差點爆掉,宏觀上看一下,三者是由關系的
查看表的基本結構【簡化】
上面已經使用過很多次了,就是
DESC table_name;
DESCRIBE table_name;
上面都是使用的全名,這里演示一下簡化
mysql> DESC city;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
查看表的結構【詳細】
查看表的詳細結構
SHOW CREATE TABLE table_name\G;
注意和上面簡化的區別
mysql> SHOW CREATE TABLE city\G;
*************************** 1. row ***************************
Table: city
Create Table: CREATE TABLE `city` (
`ID` int NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Population` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`),
CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
可以看到其實這樣子沒有上面的直觀,但是給出了原始的SQL陳述句
查看mysql資料庫的版本號
之前使用java的命令時就知道 javac -version可以查看jdk的版本號,mysql也提供了查詢命令,那就是select命令
SELECT VERSION();
注意這里帶了一個小括號
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.27 |
+-----------+
1 row in set (0.00 sec)
非常直觀的看到版本時8.0.27
查詢當前使用的資料庫
當操作資料庫時,因為資料過多,或許就會忘記當前使用的資料庫,這里還是使用的SELECT 查詢
SHOW DATABASE();
演示一下,我上面操作很多次,已經找不到USE陳述句了,所以時需要查詢的
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| world |
+------------+
1 row in set (0.00 sec)
使用的時world資料庫,里面是有三張表的
- 額外提醒一下,mysql陳述句是不見分號不終止的,分號代表陳述句的結束
- 同時也可以使用==\c==來終止一條陳述句
所以我們創建表的時候,就不使用分號,換行書寫來達到結構的清晰
退出mysql
這里很簡單,昨天已經提到過了,就是EXIT;
mysql> EXIT;
Bye
這里給大家來一次連續的操作
C:\Users\OMEY-PC>mysql -h localhost -u cfeng -p
Enter password: ************
mysql> SHOW DATABASES;
mysql> USE cfengbase;
mysql> SHOW TABLES;
mysql> DESCRIBE fruits;
mysql> SHOW CREATE TABLE fruits\G;
mysql> SELECT * FROM fruits;
+------+-------------+--------------+---------------+---------------+
| id | fruits_name | fruits_price | fruits_origin | fruits_remark |
+------+-------------+--------------+---------------+---------------+
| 1001 | 葡萄 | 3.7 | 山東 | 紅香妃 |
| 1002 | 蘋果 | 2.8 | 山東 | 紅富士 |
| 1003 | 香蕉 | 6 | 海南 | 小芭蕉 |
+------+-------------+--------------+---------------+---------------+
3 rows in set (0.01 sec)
SQL查詢陳述句DQL
其實上面已經使用到了查詢陳述句了,比如查詢一個表中的所有資料就是使用的DQL
查詢一個表中的某個欄位
SELECT col_name FROM table_name;
這和上面查詢庫中的所有資料是相似的,其實想一想就知道了,因為*代表的就是很多,就是所有的欄位,和java中的關連屬性的數目的表示相同
其中SELECT FROM 都是關鍵字,不區分大小寫,而小寫的col_name和table_name是識別符號,大寫容易識別,但是不要寫錯單詞,演示一下查詢欄位,這里就以fruits表,查詢fruits_name欄位
mysql> SELECT fruits_name FROM fruits;
+-------------+
| fruits_name |
+-------------+
| 葡萄 |
| 蘋果 |
| 香蕉 |
+-------------+
3 rows in set (0.00 sec)
這樣查詢,就可以檢查查詢的量了,一次性顯示所有內容,可能螢屏都顯示不完全
查詢多個欄位【使用逗號隔開就號】
既然查詢一個欄位我們已經知道了,并且查詢所有欄位,也就是整個表的內容也知道
查詢多個欄位就不難推出了
SELECT col_name1,col_name2…… FROM table_name;
這里我們可以先簡單查看表的結構,再查詢表的欄位,這里就同時查詢fruits的name和origin兩個欄位
mysql> DESC fruits;
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| fruits_name | varchar(45) | NO | | NULL | |
| fruits_price | double | NO | | NULL | |
| fruits_origin | varchar(45) | NO | | NULL | |
| fruits_remark | varchar(45) | NO | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> SELECT fruits_name,fruits_origin FROM fruits;
+-------------+---------------+
| fruits_name | fruits_origin |
+-------------+---------------+
| 葡萄 | 山東 |
| 蘋果 | 山東 |
| 香蕉 | 海南 |
+-------------+---------------+
3 rows in set (0.00 sec)
最容易犯的錯誤還是把單詞拼寫錯誤,還可以使用SHOW ERRORS, SHOW WARNINGS;查看具體的錯誤原因和所在的位置
這里可以稍微總結一下
- 查詢一個欄位 SELECT col_name FROM table_name;
- 查詢多個欄位 SELECT col_name1,col_name2,col_name3 …… FROM table_name;
- 查詢所有欄位
- 使用之前的方式,SELECT * FROM table_name; 方便但是效率要低一些,因為這是一個碼,需要解碼成所有的欄位,這是需要時間的,所以實際開發中很少使用
- 直接寫出所有的欄位 推薦使用,但是在自己的DOS視窗快速查詢所有的內容可以使用*
給查詢的欄位起別名【AS】
在查詢的時候,欄位的名字是可以不是原本的名字,比如水果的發源地源表是fruits_origin,這個很長,不方便,起個別名發源地
查詢的時候起別名的方式是AS,注意原來的欄位名并沒有修改
SELECT col_name1,col_name2 AS newname FROM table_name;
這里需要注意,查詢時逗號后面都是欄位名,所以as的前面時欄位名,后面才是欄位的別名
這里演示一下給水果發源地查詢的時候起別名
mysql> SELECT fruits_name,發源地 AS fruits_origin FROM fruits;
ERROR 1054 (42S22): Unknown column '發源地' in 'field list' //報錯,順序錯誤
mysql> SELECT fruits_name,fruits_origin AS 發源地 FROM fruits;
+-------------+--------+
| fruits_name | 發源地 |
+-------------+--------+
| 葡萄 | 山東 |
| 蘋果 | 山東 |
| 香蕉 | 海南 |
+-------------+--------+
3 rows in set (0.00 sec)
SELECT操作是DQL陳述句,不是DML,所以不會改變原來的資料的
這里的AS是可以省略的,但是不能加逗號,上面提到逗號后面都是欄位名,所以系統就會尋找是否有欄位,就會報錯
mysql> SELECT fruits_name 水果名稱 FROM fruits;
+----------+
| 水果名稱 |
+----------+
| 葡萄 |
| 蘋果 |
| 香蕉 |
+----------+
3 rows in set (0.00 sec)
如果起的別名里面有空格怎么辦
如果別名里面有空格,如果按照AS或者省略的方式都會報錯的,系統認為欄位后面是別名,別名后面沒有逗號就會尋找FROM,可是找到的是別名的另外一半,就報錯了
解決的辦法是使用引號括起來,單引號,雙引號都是可以的
SELECT col_name '水果 名稱' FROM table_name;
SELECT col_name "水果 名稱" FROM table_name;
這里還是演示一下使用
mysql> SELECT fruits_name "水果 名稱" FROM fruits;
+------------+
| 水果 名稱 |
+------------+
| 葡萄 |
| 蘋果 |
| 香蕉 |
+------------+
3 rows in set (0.00 sec)
mysql> SELECT fruits_name '水果 名稱' FROM fruits;
+------------+
| 水果 名稱 |
+------------+
| 葡萄 |
| 蘋果 |
| 香蕉 |
+------------+
3 rows in set (0.00 sec)
注意:所有的資料庫中字串是采用單引號括起來的,雙引號有的資料庫用不了
列參可直接數學運算
欄位比如水果的價格,如果都漲價那么就直接做加法,只是加法后如果不起別名,那么欄位名也就會運算
SELECT price+3 FROM fruits;
SELECT price+3 水果價格 FROM fruits;
注意這都是查詢時所做的操作,原來的資料并沒有改變
這里可以示范一下
mysql> SELECT fruits_name 水果名稱,fruits_price FROM fruits;
+----------+--------------+
| 水果名稱 | fruits_price |
+----------+--------------+
| 葡萄 | 3.7 |
| 蘋果 | 2.8 |
| 香蕉 | 6 |
+----------+--------------+
3 rows in set (0.00 sec)
mysql> SELECT fruits_name 水果名稱,fruits_price+3 FROM fruits;
+----------+----------------+
| 水果名稱 | fruits_price+3 |
+----------+----------------+
| 葡萄 | 6.7 |
| 蘋果 | 5.8 |
| 香蕉 | 9 |
+----------+----------------+
3 rows in set (0.00 sec)
mysql> SELECT fruits_name 水果名稱,fruits_price+3 水果新價格 FROM fruits;
+----------+------------+
| 水果名稱 | 水果新價格 |
+----------+------------+
| 葡萄 | 6.7 |
| 蘋果 | 5.8 |
| 香蕉 | 9 |
+----------+------------+
3 rows in set (0.00 sec)
這里起別名如果是中文最好使用單引號括起來,因為中文也是字串,所以就使用單引號
查詢時可以使用as ,數學運算來得到想要的查詢結果,起別名碰到中文和空格加上單引號,查詢時不會改變原資料庫的內容,使用SELECT
今天就先了解簡單查詢,明天會詳細介紹條件查詢和模糊查詢~🌳
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/356823.html
標籤:其他
