在數據庫中使用任何命令最好都用分號結尾
用戶管理
select user();
#查看當前用戶
grant all on *.* to root@‘%’identified by '123'
#給root用戶所有的權限允許第三方登錄(將root改成不存在的用戶,也可以創建並賦予權限)
grant select,create,update,delete on *.* to 'a'@'%' identified by '輸入密碼';
#創建用戶a,並給a添加查詢,創建,更新,刪除的權限(在任意主機上)
grant all privileges on test03.grade to 'aaa'@'%';
#給aaa賦予test03數據庫的grade表最高權限(在任意主機上)
show grants for 'aaa';
#查看aaa用戶的權限(root用戶)
revoke all on *.* from 'aaa'@'%';
#收回aaa在任意數據庫的任意表的最高權限
show grants
#查看權限
忘記mysql的root密碼
配置文件 /etc/my.conf.d/server.conf
添加skip-grant-tables
重啟數據庫 systemctl restart mysql
進入數據庫 mysql -uroot | mysql -uroot
進入mysql數據庫中 use mysql;
修改密碼 update user set password=password('填寫密碼') where user='root';
查看數據庫
show databases;
#查看數據庫
show variables;
#查看數據庫參數
show tables;
#查看數據庫中的表,要先進入數據庫
select * from 表名;
#查看 某個表中的所有數據
mysqladmin --version
#查看數據庫版本
show create database 庫名;
#查看創建數據庫狀態
use 庫名
#使用哪個庫
修改數據庫
create database test01
#創建數據庫 test01
create database test01 character set=utf8;
#創建用戶並支持中文
show create database test01
#查看test01的字符集
mysqladmin -u user -p create test01
#直接在終端創建數據庫,
drop database test01
#刪除數據庫
mysqladmin -u root -p drop test01
#另外你也可以在終端運行,
alter database 庫名 default character set=utf8;
#修改數據庫默認字符集
備份/導出數據庫
要創建單個數據庫的備份,在終端窗口中運行下列命令,
mysqldump -u root -p密碼 --databases test > test.sql
若要一次性創建多個數據庫的備份則運行:
mysqldump -u root -p密碼 --databases db_name1 db_name2 > db_name12_backup.sql
從備份中恢復數據庫
方法一
從備份中恢復數據庫,終端運行:
mysql -u root -p密碼 database_name < db_backup.sql
但這條命令成功的前提是預先沒有存在同名的數據庫。如果想要恢復數據庫數據到已經存在的數據庫中,則需要用到 mysqlimport 命令:
mysqlimport -u root -p密碼 database_name < db_backup.sql
方法二
進入數據庫中確保沒有同名的數據庫,執行:
source 備份的數據庫名
MariaDB 數據類型
MariaDB數據類型可以分為數字,日期和時間以及字符串值。
使用數據類型的原則:夠用就行, 盡量使用范圍小的,而不用大的
- 常用的數據類型
- 整數:int, bit #bit自能存儲0,1
- 小數:decimal #decimal(5,2) 表示一共5位數字小數點后取2位
- 字符串:varchar, char #varchar(10) 表示最多可輸入10個字符,char(10)輸入幾個字符也要占10個字符,且最多輸入10個10字符
- 日期時間:date, time, datetime
- 枚舉類型(enum)
- 自增:auto_incremen
- 約束
- 主鍵primary key:物理上存儲的順序,不能重復,不能為空,默認有索引的功能
- 非空not null:此字段不能為空
- 唯一unique:此字段不允許重復
- 默認default:當不填寫此值時會使用默認值,如果填寫則已填寫為准
- 外鍵foreign key:對關系字段進行約束,當為關系字段填寫值時,會到關聯的表中查詢此值是否存在,如果存在則填寫成功,如果不存在則填寫失敗並拋出異常
表的相關命令
create table 表名(字段 數據類型和約束可加多個,….可加多個字段用逗號逗號隔開);
#創建表 ,表的字段最好使用英文,字段后需要添加數據類型和約束,可添加多種約束
查看表
select now();
#顯示當前時間
desc 表名;
#查看表結構
show create table 表名;
#查看表的創建
修改表
alter table 表名 add 列名 類型;
#修改表-添加字段
alter table 表名 modify 列名 類型及約束;
#修改表-修改字段:不重命名版
alter table 表名 change 原名 新名 類型及約束;
#修改表-修改字段:重命名版
alter table 表名 drop 列名;
#修改表-刪除字段
刪除表
drop table 表名;
#刪除表
增表的內容
insert into 表名 values(..),()…;
#全列插入,每列都必須寫入內容,寫在括號里,用逗號分隔,(括號外用逗號分隔可一次插入多行) 主鍵字段 可以用0 null default 來站位,表示默認值
修改表的內容
update 表名 set 列1=值1, 列2=值2... where 條件;
#條件指的是修改那一部分
刪除表的內容
delete from 表名 where 條件;
物理刪除
delete from 表名;
#清空表中的所有的數據
邏輯刪除
#用一條字段來表示 這條信息是否已經不能在使用了, 用alter table給表添加一個 bit類型的字段,或者創建表的時候直接創建
select * from 表名; #進行查看
select * from 表名 where 帶有bit的字段=bit值; #篩選
#邏輯刪除不是真正的刪除,一般是用通過bit值來篩選需要的數據
查看表的內容
select 字段1 as '別名',字段2 as '別名', …. from 表名;
# 使用as給字段起別名
select 表名.字段1,表名.字段2 from 表名;
#通過表名字段查詢,可輸入不同的表名
select 別名.字段1,s別名.字段2,…. from 表名 as 別名;
# 給表起別名查詢
select distinct 字段 from 表名;
# 消除重復行
條件查詢
select * from 表名 where 字段 比較運算符 值;
# 比較運算符有(=)(<)(>)(<=)(>=) 可以通過and(&&) or(||) 使用多個運算符
常用的使用方法:
select * from 表名 where 字段 between 值 and 值;
select * from 表名 where 字段 比較運算符 or 字段 比較運算符
模糊查詢
% 替代1個或者多個字符甚至是沒有
_ 下划線表示一個字符
select * from 表名 where 字段 like '%表中數據的關鍵字%';
select * from 表名 where 字段 like '收索幾個字就寫入幾個下划線';
范圍查詢
in (1,3,8)表示在一個非連續的范圍內
select * from 表名 where 字段 in (第一個值, 第二個值,….);
#in 后面括號中用逗號分隔開的數字表示單個數字,不代表范圍,可以用逗號分隔添加多個數值,列如(15,25,35,56):表示一個15,一個25,一個35,一個56
空判斷
select * from 表名 where 字段 is null;
#判斷is null,查看字段為空的信息
select * from 表名 where 字段 is not null;
判斷非空is not null,查看字段為不為空的信息
排序
select * from 表名 where 條件 order by 字段 asc或desc;
# order by 字段
# asc從小到大排列,即升序
# desc從大到小排序,即降序
聚合函數
總數:count(*) 用*統計是最准確的,也可以在括號里加入某個字段,可能會不准確,最好使用*
最大值:max(字段)
最小值:min(字段)
求和:sum(字段)
平均值:avg(字段)
select 函數類型 from 表名 where 條件;
select round(avg(字段),3) from 表名;
# 保留3位小數
分組
group by
select 字段 from 表名 group by 字段;
#對表中某個字段中的內容分組
group_concat() 按組顯示括號中的內容
select 字段1,group_concat(字段2) from 表名 where 條件 group by 字段1;
分頁
顯示5頁
select * from 表名 limit 頁5;
分頁顯示,每頁顯示2條數據
select * from 表名 limit 0, 2;
連接查詢
inner join
select * from 表名1 inner join 表名2;
#兩個表連接查詢
select * from 表名1 inner join 表名2 on 表名1.字段=表名2.字段;
#連接兩個表的對應字段
select 表名1.字段, 表名2.字段 from 表名1 inner join 表名2 on 表名1.字段=表名2.字段;
#按要求顯示連接內容 可以使用別名
左關聯
select * from 表名1 left join 表名2 on 表名1.字段=表名2.字段;
# 左關聯,以左邊表為基准,條件對應不上的顯示null
右關聯
select * from 表名2 left join 表名1 on 表名1.字段=表名2.字段;
#右關聯,以后邊為基准,條件對應不上的顯示null
自關聯
在一個表中建立關聯
列如: select * from 表名 as 別名1 inner join 表名 as 別名2 on 別名1.字段1=別名2.字段2 where 別名1.字段='關鍵數據';
視圖
視圖的用途就是查詢
create view 視圖名稱 as select語句;
#定義視圖,建議以v_開頭
show tables;
#查看視圖:查看表會將所有的視圖也列出來
drop view 視圖名稱;
#刪除視圖
事務
begin或 transaction
#開啟事務
commit;
#將緩存中的數據變更維護到物理表中
rollback;
#放棄緩存中變更的數據
索引
創建索引
方式一:建表時創建索引
create table create_index(
id int primary key,
name varchar(10) unique,
age int,
key (age)
);
方式二:對於已經存在的表,添加索引
如果指定字段是字符串,需要指定長度,建議長度與定義字段時的長度一致
字段類型如果不是字符串,可以不填寫長度部分
create index 索引名稱 on 表名(字段名稱(長度))
例:
create index age_index on create_index(age);
drop index 索引名稱 on 表名;
#刪除索引
show profiles;
#查看sql執行時間
set profiling=1;
#打開sql語句執行時間 零時修改,重啟數據庫失效