博客說明mysql
文章所涉及的資料來自互聯網整理和我的總結,意在於我的學習和經驗彙總,若有什麼地方侵權,請聯繫本人刪除,謝謝!程序員
Structured Query Language:結構化查詢語言sql
SQL 語句能夠單行或多行書寫,以分號結尾。數據庫
可以使用空格和縮進來加強語句的可讀性。安全
MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。函數
3 種註釋學習
單行註釋: -- 註釋內容 或 # 註釋內容(mysql 特有)code
多行註釋: /* 註釋 */對象
C(Create):建立排序
R(Retrieve):查詢
U(Update):修改
D(Delete):刪除
使用數據庫
C(Create):建立
語法:
create table 表名( 列名1 數據類型1, 列名2 數據類型2, .... 列名n 數據類型n );
int:整數類型
double:小數類型
date:日期,只包含年月日,yyyy-MM-dd
datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
timestamp:時間錯類型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
varchar:字符串
C(Create):建立表
create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp );
複製表:create table 表名 like 被複制的表名;
R(Retrieve):查詢
U(Update):修改
D(Delete):刪除
語法:
注意:
select * from 表名;
select 字段列表 from 表名列表 where 條件列表 group by 分組字段 having 分組以後的條件 order by 排序 limit 分頁限定
多個字段的查詢
select 字段名1,字段名2... from 表名;
去除重複:
計算列
起別名:
>、< 、<= 、>= 、= 、<>
3. 案例
-- 查詢年齡大於20歲 SELECT * FROM student WHERE age > 20; SELECT * FROM student WHERE age >= 20; -- 查詢年齡等於20歲 SELECT * FROM student WHERE age = 20; -- 查詢年齡不等於20歲 SELECT * FROM student WHERE age != 20; SELECT * FROM student WHERE age <> 20; -- 查詢年齡大於等於20 小於等於30 SELECT * FROM student WHERE age >= 20 && age <=30; SELECT * FROM student WHERE age >= 20 AND age <=30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查詢年齡22歲,18歲,25歲的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25 SELECT * FROM student WHERE age IN (22,18,25); -- 查詢英語成績爲null SELECT * FROM student WHERE english = NULL; -- 不對的。null值不能使用 = (!=) 判斷 SELECT * FROM student WHERE english IS NULL; -- 查詢英語成績不爲null SELECT * FROM student WHERE english IS NOT NULL; -- 查詢姓馬的有哪些? like SELECT * FROM student WHERE NAME LIKE '馬%'; -- 查詢姓名第二個字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查詢姓名是3個字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查詢姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%';
語法:order by 子句
排序方式:
注意:
將一列數據做爲一個總體,進行縱向的計算。
注意:聚合函數的計算,排除null值。
解決方案:
語法:group by 分組字段;
注意:
分組以後查詢的字段:分組字段、聚合函數
where 和 having 的區別?
案例
-- 按照性別分組。分別查詢男、女同窗的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; -- 按照性別分組。分別查詢男、女同窗的平均分,人數 SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex; -- 按照性別分組。分別查詢男、女同窗的平均分,人數 要求:分數低於70分的人,不參與分組 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; -- 按照性別分組。分別查詢男、女同窗的平均分,人數 要求:分數低於70分的人,不參與分組,分組以後。人數要大於2我的 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math),COUNT(id) 人數 FROM student WHERE math > 70 GROUP BY sex HAVING 人數 > 2;
語法:limit 開始的索引,每頁查詢的條數;
公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
-- 每頁顯示3條記錄
SELECT * FROM student LIMIT 0,3; -- 第1頁 SELECT * FROM student LIMIT 3,3; -- 第2頁 SELECT * FROM student LIMIT 6,3; -- 第3頁
limit 是一個MySQL"方言"
DBA:數據庫管理員
添加用戶:
語法:
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
刪除用戶:
語法:
DROP USER '用戶名'@'主機名';
修改用戶密碼:
UPDATE USER SET PASSWORD = PASSWORD('新密碼') WHERE USER = '用戶名'; UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi'; SET PASSWORD FOR '用戶名'@'主機名' = PASSWORD('新密碼'); SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
cmd -- > net stop mysql 中止mysql服務
使用無驗證方式啓動mysql服務: mysqld --skip-grant-tables
打開新的cmd窗口,直接輸入mysql命令,敲回車。就能夠登陸成功
use mysql;
update user set password = password('你的新密碼') where user = 'root';
關閉兩個窗口
打開任務管理器,手動結束mysqld.exe 的進程
啓動mysql服務
使用新密碼登陸。
查詢用戶:
-- 1. 切換到mysql數據庫 USE myql; -- 2. 查詢user表 SELECT * FROM USER;
查詢權限:
-- 查詢權限 SHOW GRANTS FOR '用戶名'@'主機名'; SHOW GRANTS FOR 'lisi'@'%';
授予權限:
-- 授予權限 grant 權限列表 on 數據庫名.表名 to '用戶名'@'主機名'; -- 給張三用戶授予全部權限,在任意數據庫任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';
撤銷權限:
-- 撤銷權限: revoke 權限列表 on 數據庫名.表名 from '用戶名'@'主機名'; REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
感謝
黑馬程序員
以及勤勞的本身
關注公衆號: 歸子莫,獲取更多的資料,還有更長的學習計劃