1. MySQL中的函數 <1>加密函數 <2>聚合函數 <3>數學相關的函數 <4>字元相關的函數 <5>日期函數 <6>流程式控制制函數 2. 用戶的創建和授權(DCL) <1>授權的語法格式 <2>取消許可權的語法格式 <3>顯示授予的許可權 <4>刪除用戶 3.MySQL中的索引 <1>概念: <2 ...
1. MySQL中的函數
<1>加密函數
password(str)
該函數可以對字元串str進行加密,一般情況下,此函數給用戶密碼加密。
select PASSWORD('tlxy666');
md5(str)
對字元串str進行散列加密,可用戶對於一些普通的不需要進行解密的數據進行加密。
<2>聚合函數
avg()
count()
min()
max()
sum()
例如:
select AVG(sal) from emp; 平均薪資
select COUNT(*) from emp; 員工數量
select MIN(sal) from emp; 最低工資
select MAX(sal) from emp; 最高工資
select SUM(sal) from emp; 工資求和
<3>數學相關的函數
rand()
返回0~1的隨機數
select RAND();
abs()
獲取num的絕對值
select ABS(-2);
mod(num1,num2)
取餘數
select MOD(10,3)
ceiling(num)
向上取整
select CEILING(10.1);
floor(num)
向下取整
select FLOOR(10.1);
round(num)
返回離num最近的數----四捨五入
select round(10.5)
round(num,n)
保留num小數點後的n位
select ROUND(10.12345,3);
least(num,num2,.....)
求最小值
select LEAST(10,5,18,3,20)
<4>字元相關的函數
char_length(str)
返回字元串str的長度,單位是字元
select CHAR_LENGTH('nihaoya');
length(str)
返回字元串str的長度
select length('nihaoya')
instr(str,substr)
返回字元串str中子字元串substr的位置
select INSTR('123456','34');
insert(str1,index,len,str2);
將字元串str2替換str1的index位置開始長度為len的數據
select INSERT('123456',1,3,'abc');
replace(str,oldstr,newstr);
字元串替換
select replace('hello','ll','oo')
left(str,len)/right(str,len)
返回字元串str的前len的字元串
select LEFT('helloword',5)
<5>日期函數
now()
獲取當前日期和時間
select now();
curdate()/current_date();
獲取當前日期
select curdate();
curtime()/current_time();
select current_time();
year(date)
獲取年份
select year('1995-01-02');
<6>流程式控制制函數
if(expr,v1,v2)
如果表達式expr成立,則返回v1的值,否則返回v2的值
select if(5>3,'大於','小於')
ifnull(v1,v2)
如果v1的值不為null,則返回v1的值,否則返回v2的值
select IFNULL(4,0);
nullif(expr1,expr2)
如果expr1=expr2,則返回null值,否則返回expr1的值
select NULLIF(2,2)
2. 用戶的創建和授權(DCL)
<1>授權的語法格式
GRANT 許可權 ON 資料庫.表 TO 用戶名@登錄的主機 IDENTIFY BY 密碼;
1. 新建資料庫testdb
create database testdb;
2. 新建用戶 laowang並賦予 testdb資料庫的相應許可權
grant all privileges on testdb.* to laowang@localhost identified by '123';
3.如果想指定部分的許可權給用戶
grant select,update on testdb.* to laowang@localhost identified by '123';
4.賦予用戶 laowang所有資料庫的某些許可權
grant select,update,insert,create,drop on *.* to laowang@"%" identified by '123';
註意: all privileges , *.* , "%"
常用的許可權:
select 對所有表進行查詢操作
insert 對所有表進行插入操作
update 對所有表進行更新操作
delete 對所有表進行刪除操作
create 資料庫、表、索引
drop 資料庫和表的刪除操作
alter 對所有表進行更改
<2>取消許可權的語法格式
revoke 許可權 on 資料庫.表 from 用戶名@登錄的主機;
revoke select on testdb.* from laowang@localhost;
<3>顯示授予的許可權
show grants;
<4>刪除用戶
use mysql; delete from user where user='laowang'; flush privileges; -- 刷新許可權
3.MySQL中的索引
<1>概念:
是一種高效獲取數據的數據結構(樹),以文本的形式存在。以某種數據結構存儲特定的數據(地址)。
好比是一本書的目錄,能夠加快資料庫查詢的數據。
<2>作用
提高查詢的效率
在多表連接的時候,作為條件加速連接的速度
在分組和排序檢索數據的時候,減少分組和排序所消耗的時間。
<3>類型
1.普通索引(最基本的索引)
1.1 創建索引
格式: create index index_name on table_name(column);
例如:
create table index_tb1(
id int primary key auto_increment,
name varchar(32)
);
create index index_name on index_tb1(name);
格式:alter table table_name add index index_name(column);
1.2 查詢索引
格式:show index from table_name;
1.3 刪除索引
格式:drop index index_name on table_name;
2.唯一索引
3.主鍵索引
註意:使用整型優於字元型,額為維護一個與其他欄位不相關、與業務不相關的列,一般設置為整數類型並且自增長。
4.MySQL資料庫的備份和恢復
<1>資料庫的備份
使用mysqldump 命令可以生成指定的資料庫腳本文件。
語法:
mysqldump -uroot -p密碼 資料庫名稱 > 生成的腳本文件存放的路徑
例如:
mysqldump -uroot -proot tlxy > G:\tlxy.sql (sql腳本文件) 不需要登錄到mysql資料庫中
<2>資料庫的恢復
語法格式:
source 腳本文件存放的路徑 (先選擇恢復到目的資料庫,需要登錄到mysql資料庫中)
mysql -uroot -p密碼 新資料庫 < 腳本文件存放的路徑 (不需要登錄到mysql數據中)
註意:指定數據存放的資料庫
表名稱不要重覆。
5.資料庫的優化
1.遵循設計範式
第一範式:對屬性的原子性的約束,屬性不能再分解
第二範式:對記錄的唯一性約束,要求每一條記錄都有唯一標識,實體完整性。
第三範式:對欄位的冗餘約束,欄位沒有冗餘。 允許欄位適當的冗餘,提高數據操作的效率。
2.選擇合適的存儲引擎
Innodb 支持事務 行級別的鎖 外鍵 推薦使用
MyISAM 不支持 表級別的鎖 不支持外鍵 查詢效率更高
3.選擇合適的數據類型
優先考慮整型、日期、字元
推薦使用枚舉enum('女','男')
4.適當的建立索引
where order by group by 後面經常出現的字元
多表的連接的欄位