登錄數據庫
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('男','女','保密')
);
插值操作
INSERT INTO user VALUES(1,'張三','1000','北京',16,'男');
INSERT INTO user(username,passward,age,sex) VALUES('張三豐','12345',22,'男');
修改操作
對某個字段的屬性進行操作
語句格式
ALTER TABLE tb_name [MODIFY] [ADD] [DROP] [ALTER] [CHANGE]
DROP:刪除某個字段、索引等
ADD:添加某個字段、索引等
MODIFY:修改某個字段的數據類型
CHANGE:重命名列(要求數據類型一致)或修改某個字段的類型
ALTER:用于設置或刪除默認值(DROP DEFAULT|SET DEFAULT '')
MODIFY與CHANGE的區別
CHANGE修改列名:
CHANGE修改數據類型:
MODIFY修改數據類型
更新操作
對表中數據進行更新操作
語句格式
UPDATE tb_name SET 字段名=值 [WHERE] [ORDER BY] [LIMIT]
LIMIT后只能有一個參數,表示更新前幾條記錄。
UPDATE user SET age=13;
注意不能添加TABLE字段,否則報錯
刪除操作
語句格式:DELETE FROM tb_name [WHERE 條件] [ORDER BY 字段] [LIMIT 限制條數]
LIMIT后只能有一個參數,表示刪除前幾條記錄
DELETE FROM user WHERE id=11;
徹底清空數據表(自增長值也會恢復初始值):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值):邏輯運算
原始數據
區間篩選:
模糊查詢:
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;
HAVING:對分組后的結果進行二次篩選,用法與WHERE用法基本相同。
SELECT id,GROUP_CONCAT(username) AS username,addr FROM user WHERE id<5 GROUP BY sex HAVING addr='上海' OR addr='北京';
ORDER BY:對查詢結果結果進行排序
DESC:降序 ASC:升序(默認) NULL值最小 RAND()可以提取隨機記錄
可以使用多個字段的升降序組合在一起,當第一個字段值排序后出現相同值時按第二個字段的排序方法排序。
LIMIT:限制顯示條數
LIMIT 顯示條數
LIMIT 偏移量,顯示條數(可實現分頁功能,第一條記錄的偏移量為0)
多表查詢
原始數據
通過不同表中具有相同意義的字段將不同表連接起來
內連接查詢
(顯示兩個表中符合連接條件的記錄):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;
外連接查詢
SELECT user.id,username,proname FROM user LEFT JOIN province ON user.proID=province.id;
聯合查詢
把多個表中的記錄統計輸出
用法: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實現子查詢
與比較運算符的結合使用
可以使用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次
外鍵(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);
外鍵約束的參照操作
NOT ACTION、RESTRICT:默認形式,拒絕對父表的刪除和更新操作;
CASCADE:從父表更新或刪除時自動刪除或更新子表中匹配的行;
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE ON UPDATE CASCADE
SET NULL:從父表更新或刪除時將子表的外鍵列設為NULL(外鍵列沒有指定為NOT NULL);
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE SET NULL ON UPDATE SET NULL
MySQL函數庫
數學函數庫
字符串函數庫
日期時間函數
條件判斷函數和系統函數
其他常用函數
索引
建表時創建索引:
[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