RDBMS 術語

  1. 資料庫: 資料庫是一些關聯表的集合
  2. 資料表: 表是資料的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
  3. 表頭(header): 每一列的名稱;
  4. 列row: 一列(資料元素) 包含了相同型別的資料, 例如郵政編碼的資料。每一行用來描述某物的具體資訊;
  5. 行col:一行(=元組,或記錄)是一組相關的資料,例如一條使用者訂閱的資料。
  6. 值value: 行的具體資訊, 每個值必須與該列的資料型別相同;
  7. 冗餘:儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。
  8. 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢資料。
  9. 鍵(key): 表中用來識別某個特定的人\物的方法, 鍵的值在當前列中具有唯一性。
  10. 外來鍵:外來鍵用於關聯兩個表。
  11. 複合鍵:複合鍵(組合鍵)將多個列作為一個索引鍵,一般用於複合索引。
  12. 索引:使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
  13. 參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證資料的一致性。

整刪改查操作

庫操作

create databae dbname;
mysqladmin -u root -p create DBNAME use dbname;
select database(); #查詢當前正在使用的資料庫名稱
drop database dbname;

表操作

# 建立表
# CREATE TABLE table_name (column_name column_type);
create table mytable(name varchar(20),sex(char(1),birth date);
CREATE TABLE IF NOT EXISTS `test_tb`(
`tb_id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `tb_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8; show tables;
DROP TABLE table_name; # 插入資料
INSERT INTO test_tb
(title,author, submission_date)
VALUES
("MySQL", "LESSON", NOW()); # 查詢資料
select * from test_tb;
SELECT * from test_tb WHERE title='MySQL'; # 更新資料
UPDATE test_tb SET title='python' WHERE id=1; # 刪除資料
DELETE FROM test_tb WHERE runoob_id=1; # 查看錶結構
SHOW COLUMNS FROM test_tb;
SHOW CREATE TABLE test_tb;

賬號與授權

create user 'admin@'%' identified by '123456';  #建立遠端管理員賬戶
set password for admin=password('123456');
rename user admin to guest;
drop user guest; show grants for guest;
grant all on mysql.* to guest;
grant all privileges on *.* to 'admin'@'%';
update user set password=password('123456') where user='root' and host='localhost'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON dbname.* TO 'admin'@'%' IDENTIFIED BY '123456';
revoke select on mysql.* from admin; #撤銷許可權
revoke all on mysql.* from jifei; alter user root@'localhost' identified by 'root';
alter user root@'localhost' identified by 'root';
FLUSH PRIVILEGES; #用於資料庫使用者資訊更新後,重啟mysql伺服器也可以
SELECT host, user, password FROM mysql.user WHERE user = 'admin'; #修改不同客戶端連線的限制  Client does not support authentication protocol requested by server;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

匹配符(條件查詢)

> 、< 、<= 、>= 、= 、<>
BETWEEN...AND
IN( 集合)
LIKE 模糊查詢
_ 單個任意字元
% 多個任意字元
IS NULL
and 或 &&
or 或 ||
not 或 !

MySQL三大類資料型別

數字、日期\時間、字串, 這三大類中又更細緻的劃分了許多子型別

數字型別
整數: tinyint、smallint、mediumint、int、bigint
浮點數: float、double、real、decimal
日期和時間: date、time、datetime、timestamp、year
字串型別
字串: char、varchar
文字: tinytext、text、mediumtext、longtext
二進位制(可用來儲存圖片、音樂等): tinyblob、blob、mediumblob、longblob

函式

MySQL函式用來實現資料庫操作的一些高階功能, 這些函式大致分為以下幾類: 字串函式、數學函式、日期時間函式、搜尋函式、加密函式、資訊函式

其他操作

檢視資料庫的佔用空間大小

use information_schema;

#檢視所有資料庫大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data_size from tables; #檢視home庫的大小 #檢視home庫下的members表的大小
SELECT file_name, concat(TOTAL_EXTENTS,'M') as 'FIle_size' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS DESCselect concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home'; # 檢視所有資料庫容量大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home' and table_name='members'; #檢視所有資料庫各表容量大小
select table_schema as '資料庫', sum(table_rows) as '記錄數', sum(truncate(data_length/1024/1024, 2)) as '資料容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from
information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc; select table_schema as '資料庫', table_name as '表名', table_rows as '記錄數',truncate(data_length/1024/1024, 2) as '資料容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables order by data_length desc, index_length desc;

開啟慢查詢

show variables like '%version%';    #顯示當前資料庫中與版本號相關的東西
slow_query_log 的值為ON為開啟慢查詢日誌,OFF則為關閉慢查詢日誌
slow_query_log_file 的值是記錄的慢查詢日誌到檔案中(注意:預設名為主機名.log,慢查詢日誌是否寫入指定檔案中,需要指定慢查詢的輸出日誌格式為檔案,相關命令為:show variables like ‘%log_output%’;去檢視輸出的格式)
long_query_time 指定了慢查詢的閾值,即如果執行語句的時間超過該閾值則為慢查詢語句,預設值為10秒
log_queries_not_using_indexes 如果值設定為ON,則會記錄所有沒有利用索引的查詢(注意:如果只是將log_queries_not_using_indexes設定為ON,而將slow_query_log設定為OFF,此時該設定也不會生效,即該設定生效的前提是slow_query_log的值設定為ON),一般在效能調優的時候會暫時開啟
show variables like '%query%';
show global status like ‘%slow%’; #查詢當前慢查詢的語句的個數
select sleep(1); #製造慢查詢語句
set global slow_query_log=1; #開啟慢查詢功能,1是開啟,0是關閉
set global long_query_time=1; #慢查詢時間設定為1秒,5.6之後允許設定少於1秒,例如0.1秒
set global slow_query_log_file='/tmp/slow_querys.log';
set global log_output='TABLE'; #設定慢查詢記錄到表中 #檢視零時慢查詢功能設定是否成功
show variables like 'long%';
show variables like 'slow%';
mysqldump slow -s c -t 10 `/usr/local/mysql/data/community-dev3-slow.log`

狀態查詢

select user(); #查詢當前登陸的使用者
show engine innodb status; #看看InnoDB所有的資料都已經同步到磁碟上去了
how status like '%threads%'; #檢視連線數
show variables like '%connection%';
mysql -uroot -p123456 -h127.0.0.1 hellodb -e show tables

字符集設定

遵循的標準:資料庫,表,欄位和頁面或文字的編碼碼統一
show variables like '%character%'; 檢視資料庫字符集
/etc/my.cnf default-character-set = utf8 修改字符集為utf8
alter database mydb character set utf8;
create database mydb character set utf8; 臨時設定資料庫字符集
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
set character_set_server=utf8;
set character_set_system=utf8;
set collation_connection=utf8;
set collation_database=utf8;
set collation_server=utf8;

忘記密碼重置

忘記root密碼更改配置檔案採取使用免密啟動,更改密碼後再還原重啟,跳過許可權表的限制,不用密碼驗證,直接登入資料my.cnf在 [mysqld] 中新增 skip-grant-tables

# 1 my.cnf  [mysqld] 中新增 skip-grant-tables欄位

# 2 重啟DB,重置密碼
service mysqld restart
mysql -h localhost
use mysql;
update user set password = password('new-password') where user='root';
update mysql.user set authentication_string=password('123456') where user='root' and host='localhost';
flush privileges; # 3 刪除skip-grant-tables重啟mysql服務即可

剩下的交給DBA