索引
查看索引
show index from 表名
創建索引
create index 索引名稱 on 表名(字段名稱(長度))
刪除索引
drop index 索引名稱 on 表名
開啓運行時間監測
set profiling=1
查看執行時間
show profiles
權限
查看user表
desc user
查看所有用戶
select host,user,authentication_string from user;
host主機,user用戶名,authentication_string爲加密後密碼
創建賬戶&授權
grant 權限列表 on 數據庫 to '用戶名'@'主機' identified by '密碼'
查看用戶權限
show grants for 用戶名@主機;
創建所有表所有ip權限用戶
grant all privileges on 庫名.* to '用戶名'@'%' identified by '密碼';
修改權限
grant 權限名稱 on 數據庫 to 賬戶@主機 with grant option;
修改密碼
update user set authentication_string=password('新密碼') where user='用戶名';
刷新權限
flush privileges
遠程登陸暴力方式(慎用)
/etc/mysql/mysql.conf.d/mysqld.cnf
註釋掉當前文件中
ping-address = 127.0.0.1
刪除用戶
drop user '用戶名'@'主機';
delete from user where user='用戶名';
配置主從
備份
mysqldump -u用戶名 -p密碼 --all-databases --lock-all-tables > ~/master_db.sql
複製(同步之前文件)
mysql –u用戶名 –p密碼 < master_db.sql
修改配置文件(主)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
83和84行(大約位置):
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
重啓
sudo service mysql restart
創建子賬號(參上文)
查看主服務器二進制日誌信息
show master status;
File 爲使用的日誌文件名字,Position爲使用的文件位置
配置從機
更改
service-id = 2
重啓
鏈接主機
change master to master_host='x.x.x.x', master_user='', master_password='',master_log_file='第6步File字段中數據', master_log_pos=第6步Position字段數據;
開啓同步(從)
start slave;
查看同步狀態
show slave status \G
其他
SQL語句主要分爲:
- DQL:數據查詢語言,用於對數據進行查詢,如select
DML:數據操作語言,對數據進行增加、修改、刪除,如insert、udpate、delete
TPL:事務處理語言,對事務進行處理,包括begin transaction、commit、rollback
- DCL:數據控制語言,進行授權與權限回收,如grant、revoke
- DDL:數據定義語言,進行數據庫、表的管理等,如create、drop
- CCL:指針控制語言,通過控制指針完成表的操作,如declare cursor
常用數據類型
數值類型(常用)
類型 | 字節大小 | 有符號範圍(Signed) | 無符號範圍(Unsigned) |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT/INTEGER | 4 | -2147483648 ~2147483647 | 0 ~ 4294967295 |
BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
字符串
類型 | 字節大小 | 示例 |
---|---|---|
CHAR | 0-255 | 類型:char(3) 輸入 ‘ab’, 實際存儲爲’ab ‘, 輸入’abcd’ 實際存儲爲 ‘abc’ |
VARCHAR | 0-255 | 類型:varchar(3) 輸 ‘ab’,實際存儲爲’ab’, 輸入’abcd’,實際存儲爲’abc’ |
TEXT | 0-65535 | 大文本 |
日期時間類型
類型 | 字節大小 | 示例 |
---|---|---|
DATE | 4 | ‘2020-01-01’ |
TIME | 3 | ‘12:29:59’ |
DATETIME | 8 | ‘2020-01-01 12:29:59’ |
YEAR | 1 | ‘2017’ |
TIMESTAMP | 4 | ‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-01 00:00:01’ UTC |
三範式
目前大約有8中範式,只需要瞭解三範式即可
第一範式(1NF)
強調的時列的原子性,即列不能夠再分成其他幾列
第二範式
首先是1NF,另外包含兩部分內容,一是表必須有一個主鍵,而是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分
第三範式
首先是2NF,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴,即不能存在:非主鍵列A依賴於非主鍵列B,非主鍵列B依賴於主鍵的情況
事務
開啓事務
begin;
或
start transaction;
提交事務
commit;
事務回滾
rollback;
初級防止SQL注入的方式: 構建參數列表,傳入查詢語句中
# 構造參數列表
params = [find_name]
# 執行select語句,並返回受影響的行數:查詢所有數據
count = c.execute('select * from goods where name=%s', params)