MySQL數據庫

一、數據庫基礎

1. 連接數據庫

  • mysql --host=localhost --user=root --password test
  • mysql -h localhost -u root -p test;
  • mysql -u root -p 

2. 斷開MySQL服務器

quit

3. 創建數據庫

create database 數據庫名;

4. 查看數據庫

  • select version():查看MySQL版本
  • select current_date / curdate()、select current_time / curtime():查看當前日期、時間 = select now();
  • show databases:查看數據庫
  • show tables:查看數據表
  • show columns from 數據表名[from 數據庫名]:查看錶結構
  • describe 數據表名 列名;describe簡寫desc:查看錶結構

5. 選擇數據庫

  • use 數據庫名;
  • mysql -d 所選擇的數據庫名 -h 主機名 -u 用戶名 -p;

6. 刪除數據庫

drop database 數據庫名;

7. 創建數據表

create [temporary] table [if not exists] 數據表名 [(create_definition,...)][table_options][select_statement];

參數 說明
temporary 如果使用該關鍵字,表示創建一個臨時表
if not exists 該關鍵字用於避免表不存在時MySQL報告的錯誤
create_definition 表的列屬性部分,MySQL要求在創建表時,表至少包含一列
table_options 表的一些特性參數
select_statement select語句描述部分,用它可以快速地創建表
create_definition的參數說明
參數 說明
col_name 字段名
type 字段類型
NOT NULL | NULL 指出該列是否允許是空值,系統一般默認允許爲空值,當不允許爲空值設置NOT NULL;
DEFAULT default_values 表示默認值
AUTO_INCREMENT 表示是否是自動編號,每個表只能有一個AUTO_INCREMENT列,並且必需被索引
PRIMARY KEY 表示是否爲主鍵,一個表只能有一個PRIMARY KEY。
reference_definition 爲字段添加註釋

8. 插入數據

insert [into] 表明 [(列名1,列名2,列名3,...)] values (值1,值2,值3,...);

9. 查詢表中的數據

select 列名稱 from 表名稱 [where 條件];

10. 更新表中的數據

update 表名稱 set 列名稱 = 新值 where 更新條件;

11. 刪除表中的數據

delete from 表名稱 where 刪除條件;

12. 創建後表的修改

  • 添加列:alter table 表名 add 列名 列數據類型 [after 插入位置];
  • 修改列:alter table 表名 change 列名稱 列新名稱 新數據類型。
  • 刪除列:alter table 表名 drop 列名稱;
  • 重命名錶:alter table 表名 rename 新表名;
  • 刪除整張表:drop table 表名;
  • 刪除整個數據庫:drop database 數據庫名;
  • 修改子句定義字段:modify 列名 列數據類型;

修改root 用戶密碼

mysql admin -u root -p password 新密碼;

二、MySQL數據庫備份和恢復

1. 數據的備份

mysqldump -u root -p 需要備份的數據庫 >“c:\users\simple\desktop\test.txt”(備份的路徑以及文件名,注意命令末尾不能加分號";",否則報錯)

2. 數據的恢復

mysql -u root -p test < "c:\users\simple\desktop\test.txt"

三、其他

1. MySQL所處狀態的含義

MySQL狀態含義
提示 含義
mysql> 準備好進行新查詢
-> 等待多行查詢的下一行
'> 等待下一行,等待以單引號開頭的字符串的完成( ' )
"> 等待下一行,等待以雙引號開頭的字符串的完成( " )
`> 等待下一行,等待以反引號( ` )開頭的標識符的完成
/*> 等待下一行,等待以 # 開頭的評論完成 /*

在執行某語句時,鍵入 \c 可以切換回來,mysql>

2. 信息功能

名稱 描述
BENCHMARK() 反覆執行表達式
CHARSET() 返回參數的字符集
COERCIBILITY() 返回字符串參數的歸類強制性值
COLLATION() 返回字符串參數的排序規則
CONNECTION_ID() 返回連接的連接ID(線程ID)
CURRENT_USER(), CURRENT_USER 經過身份驗證的用戶名和主機名
DATABASE() 返回默認(當前)數據庫名稱
FOUND_ROWS() 對於帶有LIMIT子句的SELECT,返回的行數沒有LIMIT子句
LAST_INSERT_ID() 最後一次INSERT的AUTOINCREMENT列的值
ROW_COUNT() 行數已更新
SCHEMA() DATABASE()的同義詞
SESSION_USER() USER()的同義詞
SYSTEM_USER() USER()的同義詞
USER() 客戶端提供的用戶名和主機名
VERSION() 返回表示MySQL服務器版本的字符串

3. 將文本加載數據表中

mysql> load data local infile "文件路徑及名稱" into table 數據表;

4. 將 .sql 文件導入到MySQL的數據庫中

mysql> source 文件路徑及文件名稱.sql;

5. 使用 distinct 去除重複的數據。

mysql> select distinct name from users;

6. 排序行

mysql> select * from users order by name [asc];(默認爲升序)

mysql> select * from users order by name desc;(按降序排序)

對多個列進行排序,並且可以按不同方向對不同列進行排序:mysql> select name,gender,email from users order by gender ,email desc; (DESC關鍵字僅適用於緊鄰其前面的列名,它不會影響對gender列排序)

7. where 運算符

操作符 描述
= 等於
<> 不等於
> 大於
< 小於
>= 大於等於
<= 小於等於
BETWEEN 在某個範圍內
LIKE

搜索某種模式

查詢使用death IS NOT NULL而不是death <> NULL因爲 NULL是一個特殊值

8. 規定要返回的數據記錄數目

mysql> select * from users limit 需要返回數據的數目(數字)

9. 通配符

通配符 描述
% 替代一個或多個字符
_ 僅替代一個字符

10. Alias(別名):返回的數據是別名的字段

  • 表的Alias語法:select column_name(s) from table_name as alias_name 
  • 列的Alias語法:select column_name as alias_name from table_name;

11. join用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據

- 內連接查詢:使用關鍵字join、cross join或inner join

語法:select column_name(s) from table_name1 inner join table_name2 on table_name1.uid=table_name2.id

- 外連接查詢:左外查詢left join、右外查詢right join

語法:select column_name(s) from table_name1 left join table_name2 on table_name1.uid=table_name2.id

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回所有的行,即使在右表 (table_name2) 中沒有匹配的行

語法:select column_name(s) from table_name1 right join table_name2 on table_name1.uid=table_name2.id

RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。

- 全連接 full join 

語法:select column_name(s) from table_name1 full join table_name2 on table_name1.column_name=table_name2.column_name;

只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行

12. union 操作符

union操作符用於合併兩個或多個select語句的結果集

語法:select column_name(s) from table_name1 union select column_name(s) from table_name2;

默認地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL,另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。

語法:select column_name(s) from table_name1 union all select column_name(s) from table_name2;

13. 日期和時間函數

名稱 描述
ADDDATE() 將時間值(間隔)添加到日期值
ADDTIME() 添加時間
CONVERT_TZ() 從一個時區轉換爲另一個時區
CURDATE() 返回當前日期
CURRENT_DATE(), CURRENT_DATE CURDATE()的同義詞
CURRENT_TIME(), CURRENT_TIME CURTIME()的同義詞
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP 同義詞NOW()
CURTIME() 返回當前時間
DATE() 提取日期或日期時間表達式的日期部分
DATE_ADD() 將時間值(間隔)添加到日期值
DATE_FORMAT() 格式化日期指定
DATE_SUB() 從日期中減去時間值(間隔)
DATEDIFF() 減去兩個日期
DAY() DAYOFMONTH()的同義詞
DAYNAME() 返回工作日的名稱
DAYOFMONTH() 返回當月的日期(0-31)
DAYOFWEEK() 返回參數的工作日索引
DAYOFYEAR() 返回一年中的某一天(1-366)
EXTRACT() 提取部分日期
FROM_DAYS() 將日期號碼轉換爲日期
FROM_UNIXTIME() 將Unix時間戳格式化爲日期
GET_FORMAT() 返回日期格式字符串
HOUR() 提取小時
LAST_DAY 返回參數的月份的最後一天
LOCALTIME(), LOCALTIME NOW()的同義詞
LOCALTIMESTAMP, LOCALTIMESTAMP() NOW()的同義詞
MAKEDATE() 創建年份和年中的日期
MAKETIME() 從小時,分鐘,秒創建時間
MICROSECOND() 從參數返回微秒
MINUTE() 從論證中返回分鐘
MONTH() 從過去的日期返回月份
MONTHNAME() 返回月份名稱
NOW() 返回當前日期和時間
PERIOD_ADD() 添加一個月到一個月
PERIOD_DIFF() 返回句點之間的月數
QUARTER() 從日期參數返回季度
SEC_TO_TIME() 將秒轉換爲'HH:MM:SS'格式
SECOND() 返回第二個(0-59)
STR_TO_DATE() 將字符串轉換爲日期
SUBDATE() 使用三個參數調用時DATE_SUB()的同義詞
SUBTIME() 減去時間
SYSDATE() 返回函數執行的時間
TIME() 提取傳遞的表達式的時間部分
TIME_FORMAT() 格式化爲時間
TIME_TO_SEC() 返回轉換爲秒的參數
TIMEDIFF() 減去時間
TIMESTAMP() 使用單個參數,此函數返回日期或日期時間表達式; 有兩個參數,參數的總和
TIMESTAMPADD() 在datetime表達式中添加間隔
TIMESTAMPDIFF() 從日期時間表達式中減去間隔
TO_DAYS() 返回轉換爲days的日期參數
TO_SECONDS() 返回自0年以來轉換爲秒的日期或日期時間參數
UNIX_TIMESTAMP() 返回Unix時間戳
UTC_DATE() 返回當前的UTC日期
UTC_TIME() 返回當前的UTC時間
UTC_TIMESTAMP() 返回當前的UTC日期和時間
WEEK() 返回週數
WEEKDAY() 返回工作日索引
WEEKOFYEAR() 返回日期的日曆周(1-53)
YEAR() 迴歸年份
YEARWEEK() 返回年份和星期

14. 正則表達式

  • ^:匹配字符串的開頭
  • $:匹配字符串的結尾
  • . :匹配任何字符(包括回車和換行符)
  • a*:匹配零個或多個a 字符的任何序列
  • a+:匹配一個或多個a 字符的任何序列(至少有一個)
  • a?:匹配零個或一個a字符(至多一個)
  • de|abc:匹配任何序列de或abc(輪換)
  • (abc)*:匹配序列的零個或多個實例abc
  • {n},{m,n}:匹配完全匹配的實例(m並且 n必須在範圍從 0RE_DUP_MAX (默認255),包括端值。)
  • [a-dX],[^a-dX]:匹配任何字符,該字符(或不是,如果 ^被使用)任一a, bc, dX

15. 聚合(Group By)功能

16. 使用用戶定義的變量

mysql>select @min_id:=min(id),@max_id:=max(id) from users;

mysql>select * from users where id=@min_id or id=@max_id;

17. 計算數據總數並去除重複的數據

  • select bit_count(bit_or(column_name)) as alias_name from table_name;
  • select count(distinct column_name) from table_name;

五、mysql 數據庫優化

優化查詢的注意考慮因素:

1. 要select...where加快查詢速度,首先要檢查的是是否可以添加索引。在where子句中使用的列上設置索引,以加快評估,過濾和結果的最終檢索。爲避免浪費磁盤空間,請構建一小組索引,以加快應用程序中使用的許多相關查詢。

2. 隔離並調整查詢的任何部分,例如函數調用,這回佔用過多時間。根據查詢的結構,可以爲結果集中的每一行調用一次函數,甚至可以爲表中的每一行調用一次函數,從而大大減輕任何低效率。

3. 最大限度地減少查詢中的全表掃描次數,尤其是對大型表。

4. 通過analyze table定期使用語句使表統計信息保持最新,因此優化程序具有構建有效執行計劃所需的信息。

5. 瞭解特定於每個表的存儲引擎的調優技術,索引技術和配置參數,雙方InnoDB並MyISAM有兩套準則的實現和維持查詢高性能。

6. 如果其中一個基本準則無法輕鬆解決性能問題,通過閱讀查詢調用特定查詢的內部詳細信息explain計劃並調整索引、where子句、連接子句。

7. 調整MySQL用於緩存的內存區域的大小和屬性,通過有效使用InnoDB緩衝池,MyISAM密鑰緩存和MySQL查詢緩存,重複查詢運行的更快,用爲第二次以及以後的時間從內存中檢索結果

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章