學習指南
數據庫
也叫做數據庫管理系統(Database Management System),簡稱DBMS。是由數據庫及其管理軟件組成的系統,用來集中,結構化的管理數據。
數據庫常見名詞:
數據庫(Database)
數據庫管理系統(Database Management System)[簡稱:DBMS]
數據庫管理員(Database Administrator)[簡稱DBA]
數據庫開發人員(Database Developer)[簡稱DBD]
和在linux中一樣,數據庫中也是通過一條條命令來對數據進行操作的。linux中有命令,而MySQL數據庫是通過SQL語句來對其進行操作的,你想玩MySQL,就得先搞明白這是個啥語句。
對於數據庫和數據表,你可以把其當成是一本書和其中的章節。一個數據庫是一本書,數據庫中的每一個數據表都是一個章節,一個章節中可以有若干內容。
安裝MySQL
注:MySQL版本8.0.13
若對mysql安裝不太熟悉,可以轉到==>CentOS7下的MySQL8.0.13版本源碼安裝<==查看
SQL語句
結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。
SQL從功能上可以分爲3部分:數據定義、數據操縱和數據控制。
結構化查詢語言包含6個部分
1、數據查詢語言(DQL):其語句,也稱爲“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出,使用SELECT來實現。
2、數據操作語言(DML):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用於記錄的添加、修改和刪除。
3、事務控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。
4、數據控制語言(DCL):它的語句通過GRANT或REVOKE實現權限控制,確定單個用戶和用戶組對數據庫對象的訪問。
5、數據定義語言(DDL):其語句包括動詞CREATE,ALTER和DROP。在數據庫中創建新表或修改、刪除表(CREAT TABLE 或 DROP TABLE);爲表加入索引等。
6、指針控制語言(CCL):用於對一個或多個表單獨行的操作。
登錄MySQL
注:數據庫版本8.0.13
對於剛安裝完成的MySQL,默認是空密碼登錄,直接輸入mysql即可進入到數據庫中。
mysql
對於這種直接可以登錄的,都設置了相關的路徑優化,要麼把mysql安裝目錄/bin/*在PATH路徑中創建一個軟連接,要麼將其寫入到了/etc/profile文件中的PATH路徑。
對於沒有優化路徑的數據庫,只能通過絕對路徑的方式進入
/usr/local/mysql/bin/mysql
直接exit退出數據庫
mysql> exit
Bye
設置數據庫管理員密碼
爲了安全考慮,我們需要給root設置一個登錄數據庫密碼(root就是數據庫管理員啊),當然對於練習來說,沒有太大的必要,不過命令還是要知道的。
mysqladmin -u root password "test.com"
#命令關鍵字 -u 指定用戶 password "密碼內容"
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
其中有一個警告,說的是在命令行中顯示明文密碼不安全,這個不用管,密碼已經設置成功了。
再次登錄mysql數據庫測試
mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
數據庫拒絕root訪問,在設置完密碼後,空密碼就無法登錄了。
接下來輸入密碼登錄數據庫中
不安全登錄方式:
mysql -u root -ptest.com
mysql: [Warning] Using a password on the command line interface can be insecure.
#每次在命令行中輸入密碼都會輸出不安全警告
相對安全登錄方式:
mysql -u root -p
Enter password:
默認存在數據庫說明
在初始化數據庫後,有四個默認存在的數據庫
mysql> show databases; #查看數據庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
information_schema:數據庫中的信息數據庫,其中保存着關於MySQL服務器所維護的所有其他數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權 限等。
mysql:存儲數據庫中用戶信息,權限信息及mysql需要使用的控制和管理信息。
performance_schema:主要用於收集數據庫服務器性能參數。
sys:sys庫裏面的表、視圖、函數、存儲過程可以使我們更方便、快捷的瞭解到MySQL的一些信息,比如哪些語句使用了臨時表、哪個SQL沒有使用索引、哪個schema中有冗餘索引、查找使用全表掃描的SQL、查找用戶佔用的IO等,sys庫裏這些視圖中的數據,大多是從performance_schema裏面獲得的。目標是把performance_schema的複雜度降低,讓我們更快的瞭解DB的運行情況。
數據庫基礎操作
DDL語句操作
DDL是數據定義語言的縮寫,簡單來說,就是對數據庫內部的對象進行創建,刪除,修改等操作的語言。它和DML語句的最大區別是DML只是對錶內部數據操作,而不涉及表的定義,結構的修改,更不會涉及其他對象。DDL語句更多地由數據庫管理員(DBA)使用,開發人員一般很少使用。
注:數據庫中默認不嚴格區分大小寫
查看幫助
這是功能簡直是健忘者的福音,和linux中使用命令 --help一樣,在linux中也有這個語法幫助。
語法:help 命令
就拿show來說,看看命令可以跟的參數及語法。
mysql> help show;
Name: 'SHOW'
Description:
SHOW has many forms that provide information about databases, tables,
columns, or status information about the server. This section describes
those following:
SHOW {BINARY | MASTER} LOGS
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW CHARACTER SET [like_or_where]
SHOW COLLATION [like_or_where]
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name
SHOW DATABASES [like_or_where]
SHOW ENGINE engine_name {STATUS | MUTEX}
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW EVENTS
SHOW FUNCTION CODE func_name
SHOW FUNCTION STATUS [like_or_where]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW MASTER STATUS
SHOW OPEN TABLES [FROM db_name] [like_or_where]
SHOW PLUGINS
SHOW PROCEDURE CODE proc_name
SHOW PROCEDURE STATUS [like_or_where]
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]
SHOW PROFILES
SHOW RELAYLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW SLAVE HOSTS
SHOW SLAVE STATUS [FOR CHANNEL channel]
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW TABLE STATUS [FROM db_name] [like_or_where]
SHOW [FULL] TABLES [FROM db_name] [like_or_where]
SHOW TRIGGERS [FROM db_name] [like_or_where]
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW WARNINGS [LIMIT [offset,] row_count]
like_or_where:
LIKE 'pattern'
| WHERE expr
If the syntax for a given SHOW statement includes a LIKE 'pattern'
part, 'pattern' is a string that can contain the SQL % and _ wildcard
characters. The pattern is useful for restricting statement output to
matching values.
Several SHOW statements also accept a WHERE clause that provides more
flexibility in specifying which rows to display. See
http://dev.mysql.com/doc/refman/8.0/en/extended-show.html.
URL: http://dev.mysql.com/doc/refman/8.0/en/show.html
查看數據庫
使用show databases即可查看數據庫,後面的;是書寫格式,
mysql> show databases;
查看數據庫的幾種方式
正常查看方式:show databases;
以行的方式查看:show databases \G
也可以在shell環境中查看: mysql -e ‘show databases’ -uroot -ptest.com
-e可以輸入sql語句,使用’'擴住,-u輸入用戶名,-p輸入密碼
對於show命令,從幫助上來看可不止是查看數據庫那麼簡單,查看系統的一些信息都可以使用show命令。
創建數據庫
語法:create database 數據庫名稱;
創建個庫試試看
mysql> create database test;
Query OK, 0 rows affected (0.07 sec)
出現Query OK字樣就表示執行成功,若出現ERROR字樣,你的語句就出現了錯誤。
在對數據庫命名的時候,名稱中不能有特殊符號,例如:!@#¥%……等等,_例外。也不能以純數字命名,而對字母沒有限制。
如果非要帶有特殊字符或純數字的話,可以使用``將其括住,那樣就創建成功了。
mysql> create database `@_@`;
使用特殊符號創建的庫,查看數據庫存放目錄,我所創建的@_@變成了什麼。
ls /data/mysql/data/ #內容只列舉了包含創建庫目錄的一些內容
@0040_@0040 binlog.index ib_logfile0 private_key.pem
@0040_@0040就是我創建的@_@,和在數據庫中的具體名稱不匹配,不建議使用特殊符號。
切換數據庫
語法:use 數據庫名稱;
mysql> use test;
對數據庫的所有操作,都是在進入到數據庫進行的,默認沒有進入任何一個庫中,只能對數據庫進行創建,進入數據庫後,就能添加表,添加數據等數據了。
刪除數據庫
語法:drop database 數據庫名稱;
drop database test;
對於數據的刪除操作需要謹慎使用,以免對數據造成“不可逆”損失,雖說大多數情況下都可以通過二進制文件恢復或通過備份恢復,但誤刪除的恢復還是很麻煩不是,刪除慎用啊!!!
數據表基礎操作
在說明如何創建表之前,要先來了解一下字段類型,類型對於表的創建必不可少,定義了可以存儲什麼類型的數據。
數據類型
數據類型是數據的一種屬性,其可以決定數據的存儲格式,有效範圍和相應的限制。mysql的數據類型包括整數類型,浮點數類型,日期和時間類型,字符串類型和二進制類型。
浮點數型與整數類型和爲一類,字符串類型與二進制類型和爲一類。所以大致可以分爲三類:數值、日期/時間和字符串(字符)類型。
數值類型
類型 | 大小 | 範圍 | 無符號範圍 | 用途 |
---|---|---|---|---|
TINYINT | 1 字節 | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2 字節 | (-32 768,32 767) | (0,65 535) | 大整數值 |
MEDIUMINT | 3 字節 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整數值 |
INT或INTEGER | 4 字節 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
BIGINT | 8 字節 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整數值 |
FLOAT | 4 字節 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 單精度,浮點數值 |
DOUBLE | 8 字節 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 雙精度,浮點數值 |
DECIMAL | 對DECIMAL(M,D) ,如果M>D,爲M+2否則爲D+2 | 依賴於M和D的值 | 依賴於M和D的值 | 小數值 |
日期和時間類型
類型 | 大小 | 範圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3字節 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3字節 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 時間值或持續時間 |
YEAR | 1字節 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8字節 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 |
TIMESTAMP | 4字節 | 1970-01-01 00:00:00/2038,結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和時間值,時間戳 |
字符串類型
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字節 | 定長字符串 |
VARCHAR | 0-65535 字節 | 變長字符串 |
TINYBLOB | 0-255字節 | 不超過 255 個字符的二進制字符串 |
TINYTEXT | 0-255字節 | 短文本字符串 |
BLOB | 0-65 535字節 | 二進制形式的長文本數據 |
TEXT | 0-65 535字節 | 長文本數據 |
MEDIUMBLOB | 0-16 777 215字節 | 二進制形式的中等長度文本數據 |
MEDIUMTEXT | 0-16 777 215字節 | 中等長度文本數據 |
LONGBLOB | 0-4 294 967 295字節 | 二進制形式的極大文本數據 |
LONGTEXT | 0-4 294 967 295字節 | 極大文本數據 |
創建數據表
語法:create table 表名(字符名 類型,字段名 類型,字段名 類型);
在創建表的時候,需要進入到庫中,否則將會報錯,以下是創建一個名爲test_table的表
mysql> use test;
Database changed
mysql> create table test_table(id int(20),name char(20),age int);
對於字段的數據類型,要根據實際情況來自行選擇,拿我創建的age字段來說,其數據類型爲int,一個人的年齡最多也就130歲,而我給的數據類型範圍極大,這就顯得類型極不合適,而且其大小爲4字節,數據越多,越浪費存儲資源。建議將age改爲TINYINT類型即可,最大爲127,大小爲1字節。當然,自己的寶貝疙瘩,想怎麼定義怎麼定義。
也可爲表指定存儲引擎和字符集在插入語法後面添加即可。
例如:指定存儲引擎爲InnoDB,字符集爲utf8
mysql> create table test2(id int(10),name char(20),age int) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.10 sec)
其實默認存儲引擎和字符集就是InnoDB和utf8,使用show create table 表名即可查看。
查看數據表
使用使用show tables即可查看庫中的表
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test_table |
+----------------+
1 row in set (0.00 sec)
使用desc 表名來查看錶的結構
mysql> desc test_table;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(20) | YES | | NULL | |
| name | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
使用show create table 表名可查看創建表執行了哪些命令
mysql> show create table test_table;
修改數據表
修改表名
語法:alter table 表名 rename 新表名;
將創建的test_table表改爲hahaha
mysql> alter table test_table rename hahaha;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| hahaha |
+----------------+
1 row in set (0.00 sec)
修改表的字段類型
語法:alter table 表名 modify 要修改的字段名要修改的類型;
先看看原有表中的字段類型
mysql> desc hahaha;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(20) | YES | | NULL | |
| name | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
修改字段name的char(20)字段類型爲char(10)
mysql> alter table hahaha modify name char(10);
Query OK, 0 rows affected (0.46 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次查看錶的結構
mysql> desc hahaha;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(20) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
修改表中的字段類型和字段名稱
語法:alter table 表名 change 原字段名 新字段名 新字段類型;
將字段id名稱改爲uid,新字段類型改爲int(11)
mysql> alter table hahaha change id uid int(11);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次查看數據表結構
mysql> desc hahaha;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
CHANGE 和MODIFY的區別:
CHANGE 對列進行重命名和更改列的類型,需給定舊的列名稱和新的列名稱、當前的類型。 MODIFY 可以改變列的類型,此時不需要重命名(不需給定新的列名稱)。
在表中添加字段
語法:alter table 表名 add字段名 字段類型;
在hahaha表中添加sex字段
mysql> alter table hahaha add sex enum('M','W');
這個enum字段類型是枚舉,用於限定值的取值範圍,只能在值中選擇一個,是男不是女,是女不是男。
查看錶結構
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
sex字段就添加進去了,其類型爲enum。
在表中第一列添加字段
mysql> alter table hahaha add id int(10) first;
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
在指定字段位置後面添加字段
語法:alter table 表名 add 字段 字段類型 after 指定字段位置;
先看看現在的表結構
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
sex後面添加一個test字段,字段類型爲char(10)
mysql> alter table hahaha add test char(10) after sex;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次查看錶結構
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
| test | char(10) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
刪除數據表
刪除表中字段
語法:alter table 表名 drop 字段名;
將表hahaha中的test字段刪除
mysql> alter table hahaha drop test;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
刪除數據表
格式:drop table 表名;
把我們創建的hahaha表刪除
mysql> drop table hahaha;
Query OK, 0 rows affected (0.36 sec)
查看數據庫中的表
mysql> show tables;
Empty set (0.00 sec)
本來就一個表,刪除了之後什麼都沒得了,還是那句話,刪除操作慎用。
if exists和if no exists
這是個if語句,功能如其名稱,如果存在則執行什麼操作,如果不存在則執行什麼操作,可以避免創建或刪除數據庫時產生的報錯。
語法:創建或刪除語句 if [not] exists 數據庫名稱
如果hahaha數據庫不存在則創建
mysql> create database if not exists hahaha;
Query OK, 1 row affected (0.14 sec)
如果hahaha數據庫存在則刪除
mysql> drop database if exists hahaha;
Query OK, 0 rows affected (0.11 sec)
表中數據操作
DML語句操作
DML操作是指對數據庫中表記錄的操作,主要包括表記錄的插入(insert),更新(update),刪除(delete)和查詢(select),是開發人員日常使用最爲頻繁的操作
插入記錄
語法:insert into 表名 values(字段值1,字段值2,字段值3);
重新創建一個表,用於說明插入字段
mysql> create table staff(id int(20),name char(40),age int);
在其中添加一條記錄
insert into staff values(1,'張三',21);
字符串類型字段在插入的時候需要加上引號,要不然就會輸出錯誤。
也可同時插入多條記錄
語法:insert into 表名 values(記錄1),(記錄2)
mysql> insert into staff values(2,'李四',22),(3,'王五',23);
或者分開插入表記錄
語法:insert into 表名(字段1,字段2)values(值1,值2)
mysql> insert into staff (id,name,age)values(4,'趙六',24);
查詢記錄
DQL語句
數據檢索語句,通過select來檢索數據表中的記錄。
語法:select * from 表名稱
注:*號表示表中所有的字段,可將其換成指定字段
有兩種查詢方式,1)是進入數據庫中查詢
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 趙六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
2)在其他庫中查詢表,在剛進入數據庫管理系統中,默認是沒有進入任何庫中的。直接使用select * from staff會產生報錯。
mysql> select * from staff;
ERROR 1046 (3D000): No database selected
這個情況,將表名部分修改一下就OK了。
修改後語法:select * from 庫名稱.表名稱
我們使用那種語法試試看
mysql> select * from test.staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 趙六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
這樣就OK了。
剛纔單獨說明了*是查看所有字段,可以單獨查詢字段記錄。
mysql> select id from test.staff;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
除非有特殊需求,通常情況下都是查看全部記錄,當然,輸入字段也可實現效果,只不過比較麻煩。
mysql> select id,name,age from test.staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 趙六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
使用select還可以查詢數據庫系統信息,例如:登錄用戶,系統時間等等。
例如:查看時間,用戶和數據庫
mysql> select now(),user(),database();
+---------------------+----------------+------------+
| now() | user() | database() |
+---------------------+----------------+------------+
| 2020-04-18 16:05:54 | root@localhost | test |
+---------------------+----------------+------------+
1 row in set (0.00 sec)
查詢當前日期:select curdate();
查詢當前時間:select curtime();
查詢數據庫版本:select version();
更新記錄
語法:update 表名 set 新字段=新值 where 原字段=原值
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 趙六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
結合實例你就理解如何使用了,例如將id爲1記錄的age更新爲31。
mysql> update staff set age=31 where id=1;
update:語句關鍵字
staff:表名
set:語句關鍵字
age=31:更新字段
where:條件
id=1:原字段
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 31 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 趙六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
再次查看,字段已經更新了,如果不指定條件,則會對所有記錄的字段進行更改。
例如:將所有記錄的age字段改爲18
mysql> update staff set age=18;
Query OK, 4 rows affected (0.11 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 18 |
| 2 | 李四 | 18 |
| 3 | 王五 | 18 |
| 4 | 趙六 | 18 |
+------+--------+------+
4 rows in set (0.00 sec)
同時更新多個字段的值
在set後面寫入更新字段即可,使用,分隔
將趙六的id改爲233,age改爲23
mysql> update staff set id=233,age=23 where name='趙六';
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 18 |
| 2 | 李四 | 18 |
| 3 | 王五 | 18 |
| 233 | 趙六 | 23 |
+------+--------+------+
4 rows in set (0.00 sec)
刪除記錄
語法:delete from 表名 where 字段=值
注:這個其中的where是條件的意思,由你指定刪除什麼條件的字段,此項可以省略,則會刪除所有記錄。
刪除id爲233的記錄
mysql> delete from staff where id=233;
Query OK, 1 row affected (0.05 sec)
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 18 |
| 2 | 李四 | 18 |
| 3 | 王五 | 18 |
+------+--------+------+
3 rows in set (0.00 sec)
刪除所有記錄
mysql> delete from staff ;
Query OK, 3 rows affected (0.01 sec)
mysql> select * from staff;
Empty set (0.00 sec)
命令總結
主要命令 | 作用 |
---|---|
show | 查詢系統信息 |
create | 創建庫和表 |
use | 進入數據庫 |
drop | 刪除庫和表 |
alter | 修改數據表 |
desc | 查詢表結構 |
insert | 插入記錄 |
select | 查詢記錄 |
update | 修改記錄 |
delete | 刪除記錄 |