MySQL數據庫(命令行操作)

登錄數據庫

1.在MySQL安裝目錄下的的bin目錄打開命令行界面(可按住shift再鼠標左擊)。
2.輸入mysql -u數據庫用戶名 -p命令。
3.輸入密碼登錄數據庫。


常用命令

SHOW DATABASES //顯示所有已創建的數據庫
USE db_name //進入某個數據庫
CREATE DATABASE db_name //創建一個數據庫
DROP DATABASE db_name //刪除某個數據庫
SHOW TABLES //顯示當前數據庫下所有的表
DESC tb_name //查看某個表各個字段的描述信息
SHOW CREATE TABLE tb_name //查看創建某個表時的信息
\T 某個文件  //將命令行下所有的信息輸出到指定文件中
\t  //關閉輸出日志功能

建表語句

CREATE TABLE [IF NOT EXISTS] tb_name(字段 描述)[ENGINE=INNODB(默認)|MyISAM] [CHARSET=utf-8(默認)];

CREATE TABLE IF NOT EXISTS user(
id int primary key auto_increment,
username varchar(20) not null unique,
passward varchar(20) not null,
addr varchar(10),
age tinyint,
sex enum('男','女','保密')
);
圖片.png

插值操作

INSERT INTO user VALUES(1,'張三','1000','北京',16,'男');
INSERT INTO user(username,passward,age,sex) VALUES('張三豐','12345',22,'男');
圖片.png

修改操作

對某個字段的屬性進行操作
語句格式
ALTER TABLE tb_name [MODIFY] [ADD] [DROP] [ALTER] [CHANGE]

DROP:刪除某個字段、索引等
ADD:添加某個字段、索引等
MODIFY:修改某個字段的數據類型
CHANGE:重命名列(要求數據類型一致)或修改某個字段的類型
ALTER:用于設置或刪除默認值(DROP DEFAULT|SET DEFAULT '')

MODIFY與CHANGE的區別
CHANGE修改列名:


圖片.png

CHANGE修改數據類型:


圖片.png

MODIFY修改數據類型
圖片.png

更新操作

對表中數據進行更新操作
語句格式
UPDATE tb_name SET 字段名=值 [WHERE] [ORDER BY] [LIMIT]
LIMIT后只能有一個參數,表示更新前幾條記錄。

UPDATE user SET age=13;

圖片.png

注意不能添加TABLE字段,否則報錯


刪除操作

語句格式:DELETE FROM tb_name [WHERE 條件] [ORDER BY 字段] [LIMIT 限制條數]
LIMIT后只能有一個參數,表示刪除前幾條記錄

DELETE FROM user WHERE id=11;

圖片.png

徹底清空數據表(自增長值也會恢復初始值):TRUNCATE [TABLE] tb_name


查詢操作

單表查詢

語句格式:
SELECT 字段名稱 FROM tb_name [WHERE] [GROUP BY [WITH ROLLUP]] [HAVING] [ORDER BY] [LIMIT]

WHERE:條件查詢
IN(10,20),BETWEEN .. AND ..:區間篩選
LIKE,NOT LIKE :模糊查詢,%表示有一個或多個字符,_表示有一個字符
AND OR > < = != <=>(可以篩選出NULL值):邏輯運算

原始數據


圖片.png

區間篩選:


圖片.png

模糊查詢:
圖片.png
GROUP BY:對查詢結果進行分組,但只會顯示每個分組中的第一條數據內容;
通過GROUP_CONCAT(字段名稱) 可以得到每個分組中具體的數據信息
COUNT(字段名)可以統計總數;
MAX(字段名)可以篩選出最大值;
MIN(字段名)可以篩選出最小值;
AVG(字段名)可以計算出平均值;
SUM(字段名)可以計算出總和;
配合AS 別名 使結果更加直觀;
WITH ROLLUP 語句可以在結果末尾增加一行對所有數據進行統計。

分組查詢:
SELECT sex,GROUP_CONCAT(username) AS username,COUNT(*) AS user,
MAX(age) AS max_age,MIN(age) AS min_age,AVG(age) AS avg_age,SUM(age) AS sum_age FROM user WHERE id<5 GROUP BY sex WITH ROLLUP;


圖片.png
HAVING:對分組后的結果進行二次篩選,用法與WHERE用法基本相同。

SELECT id,GROUP_CONCAT(username) AS username,addr FROM user WHERE id<5 GROUP BY sex HAVING addr='上海' OR addr='北京';


圖片.png
ORDER BY:對查詢結果結果進行排序
DESC:降序     ASC:升序(默認)  NULL值最小  RAND()可以提取隨機記錄
可以使用多個字段的升降序組合在一起,當第一個字段值排序后出現相同值時按第二個字段的排序方法排序。
圖片.png
LIMIT:限制顯示條數
LIMIT 顯示條數
LIMIT 偏移量,顯示條數(可實現分頁功能,第一條記錄的偏移量為0)
圖片.png

多表查詢

原始數據


圖片.png

圖片.png

通過不同表中具有相同意義的字段將不同表連接起來

內連接查詢

(顯示兩個表中符合連接條件的記錄):INNER JOIN
通過ON連接條件

外連接查詢

左外連接:LEFT [OUTER] JOIN 顯示左表的全部記錄及右表中符合連接條件的記錄。
右外連接:RIGHT [OUTER] JOIN 顯示右表的全部記錄及左表中符合連接條件的記錄。

內連接查詢

SELECT user.id,username,proname FROM user [INNER|CROSS] JOIN province ON user.proID=province.id;
圖片.png

外連接查詢

SELECT user.id,username,proname FROM user LEFT JOIN province ON user.proID=province.id;
圖片.png

聯合查詢

把多個表中的記錄統計輸出
用法:SELECT 字段名 FROM 表名 UNION [ALL] SELECT 字段名 FROM 表名;
UNION ALL:輸出所有記錄
UNION:去除重復的記錄

子查詢

使用[NOT] IN()實現子查詢
使用各種比較運算符實現子查詢>、<、>=、<=、<>、!=、<=>
使用[NOT] EXISTS()實現子查詢
例:SELECT id,username FROM employee WHERE EXISTS (SELECT id FROM department);
使用ANY|SOME或者ALL實現子查詢
與比較運算符的結合使用


圖片.png

可以使用INSERT INTO tb_name(字段名稱) SELECT 字段 FROM tb_name將查詢出來的數據直接插入表中,也可以在建表語句后加上SELECT 語句將查詢結果寫入表中。

正則表達式查詢

通過REGEXP '匹配規則' 來使用

常用規則
^:匹配字符串開始的部分(^a)
$:匹配字符串結束的部分(a$)
.:代表字符串中的任意一個字符,包括回車和換行
[字符集合]:匹配字符集合中的任意一個字符([abc]、[a-z])
[^字符集合]:匹配除字符集合外中的任意一個字符
a|b|c:匹配a、b、c中的任意一個字符串
*:匹配0個1個或多個其前面的字符(a*)
+:匹配1個或多個其前面的字符(a+)
String{N}:字符串出現N次
字符串{M,N}:字符串最少出現M次,最多N次
圖片.png

外鍵(FOREIGN KEY)

主表與子表的存儲引擎必須為INNODB,外鍵列和參照列必須具有相同的數據類型,并且必須創建索引
外鍵創建
ALTER TABLE tb_name ADD [CONSTRAINT 外鍵名] FOREIGN KEY(外鍵列) REFERENCES department(參照列)
外鍵刪除
ALTER TABLE tb_name DROP FOREIGN KEY 外鍵名

CREATE TABLE IF NOT EXISTS department(
id smallint unsigned primary key auto_increment,
depName varchar(30) unique
);

INSERT INTO department(depName) VALUES('學風部'),
('社踐部'),
('外聯部'),
('體育部'),
('網宣部');

CREATE TABLE IF NOT EXISTS employee(
id smallint unsigned auto_increment primary key,
username varchar(30) not null unique,
depId smallint unsigned,
[CONSTRAINT 外鍵名]FOREIGN KEY(depId) REFERENCES department(id)
);

INSERT INTO employee(username,depId) VALUES('小明',1),
('小紅',2),
('小王',3),
('張三',4),
('李四',5),
('王五',1);
圖片.png

圖片.png

圖片.png

外鍵約束的參照操作

NOT ACTION、RESTRICT:默認形式,拒絕對父表的刪除和更新操作;
CASCADE:從父表更新或刪除時自動刪除或更新子表中匹配的行;
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE ON UPDATE CASCADE


圖片.png

圖片.png

SET NULL:從父表更新或刪除時將子表的外鍵列設為NULL(外鍵列沒有指定為NOT NULL);
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE SET NULL ON UPDATE SET NULL


圖片.png

MySQL函數庫

數學函數庫

圖片.png

字符串函數庫

圖片.png

圖片.png

日期時間函數

圖片.png

圖片.png

圖片.png

條件判斷函數和系統函數

圖片.png

圖片.png

其他常用函數

圖片.png

圖片.png

索引

建表時創建索引:
[UNIQUE|FULLTEXT|SPATIAL] KEY|INDEX 索引名(字段名)
在已存在的表上創建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名稱 ON tb_name {字段名稱[(長度)] }
ALTER TABLE tb_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名稱(字段名稱[(長度)]);
刪除索引
DROP INDEX 索引名稱 ON tb_name

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。