-
檔案的包含
include include_once //包含的檔案若不存在,程式繼續執行
require require_once //包含的檔案若不存在,程式終止,不執行下面的陳述句
once的函式在同一網頁中出現多次,也只會執行一次
-
提示:MYSQL陳述句不區分大小寫,只是MySQL陳述句規范
1.關鍵字和函式名全部大寫
2.資料庫名稱,表名稱,欄位名稱全部小寫
MYSQL基礎
1.mysql概述
-
什么是資料庫?
答:資料的倉庫
-
資料庫的主要功能
1.將資料保存到檔案或記憶體
2.接收特定的命令,然后對檔案進行相應的操作
2.MYSQL的安裝
-
MySQL是一個關系型資料庫管理系統
-
想要使用MySQL來存盤并操作資料,則需要
1.安裝MySQL服務端
2.安裝MySQL客戶端
2.1.客戶端連接服務端
3.客戶端發送命令給服務端MySQL服務的接受命令并執行相應的操作
-
phpstudy相對于的兩個管理工具
- mysql_front //c/s
- phpmyadmin //b/s
-
注意:MySQL安裝后,系統會自動創建名為information_schema和mysql的兩個系統資料庫,系統資料庫存放一些和資料庫相關的資訊,如果洗掉了這兩個資料庫,MYsql將不能正常作業,
3.MySQL四種常見資料庫表引擎
-
存盤引擎查看
-
InnoDB存盤引擎(安全性)
- 由一個.frm檔案組成
如果要提供提交、回滾、崩潰恢復能力的事物安全(ACID兼容)能力,并要求實作并發控制
InnoDB提供支持以及外部鍵(外鍵:可實作級聯洗掉、更新操作)等高級資料庫功能
-
MYISAM存盤引擎(性能)
表檔案存盤 表檔案的存盤是由 . frm .MYD .MYI
如果資料表主要用來插入和查詢記錄,則MYISAM引擎能提供較高的處理效率
MYISAM型別的表強調的是性能;
MYISAM型別不支持事務處理等高級處理
InnoDB與MYISAM相對比
- 兩種型別最主要的差別就是InnoDB支持事務處理與外鍵的行級鎖;而MYISAM不支持,所以MYISAM往往就容易被人認為只適合在小專案中使用,
-
MEMORY存盤引擎
如果只是臨時存放資料,資料量不大,并且不需要較高的資料安全性,可以選擇將資料保存在記憶體中的Memory引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果
-
Archive存盤引擎
如果只是INSERT和SELECT操作,可以選擇Archive,Archive支持高并發的插入操作,但是本身不是事務安全的,Archive非常適合存盤歸檔資料,如記錄日志資訊可以使用Arichive
4.MYSQL操作
-
操作分類
1.可視化操作【借助工具實作 mysql-front phpmyadmin】
2.命令列操作
-
資料庫操作
1.鏈接資料庫:mysql -u root -p
2.顯示資料庫:show databases;
3.mysql創建資料庫指定字符集
4.選擇資料庫:use 庫名;
5.洗掉庫【謹慎操作,重要資料先備份】
? drop database 庫名;
? drop database if exists 庫名; //推薦使用
6.創建庫
? create database 庫名;
7.資料庫重命名
-
表操作
1.顯示表show tables;
2.創建表
create table 表名( 列名 型別 是否為空 列名 型別 是否為空 )engine=InnoDB default CHARSET=utf83.洗掉表
? drop table 表名
4.清空表
delete from 表名; //清空后,主鍵起始值繼續增加 truncate table 表名; //清空后,主鍵起始值從1開始 -
表欄位操作
-
表欄位命名規則
1.建議全部小寫
2.不要用系統關鍵字命名
3.命名方式建議字母、字母+數字/符號的組合
4.欄位名是唯一的
1.增加欄位
alter table 庫名.表名 add column 欄位名 型別 是否為空 default 默認值 comment 備注資訊;2.修改欄位
alter table 庫名.表名 change column 被修改的欄位 新欄位 型別 是否為空 default 默認值 comment 備注資訊;3.洗掉欄位
alter table 庫名.表名 drop column 欄位名 ;4.MySQL欄位四大類(盡量設定為無符號 //設定的量相對應要多點)
-
數值型
-
整型
一.常用的四種整型型別
-
tinyint:微小的(默認是有符號,-128~127)
-
smallint 小的
-
mediumint
-
int
1)占據空間
2)存盤范圍
tinyint 微小的列型別,1個位元組,默認是有符號的,勾選對應欄位設定為unsigned無符號
無符號最大的范圍【0~255】
有符號的【-128~127】
二.十進制、二進制&正負數
三.常用的四種整型型別值范圍
? 位元組位 無符號 有符號
tinyint 1 8 0~255 -128~127
smallint 2 16 0~2^16-1 -215~215-1
mediumint 3 24
int 4 32
四.無符號unsigned與零填充zerofill
unsigned:無符號,影響存盤范圍
M代表寬度:在zerofill時才有意義
zerofill:零填充
-
-
浮點型
MySQL中使用浮點數型別和定點數型別來表示小數
浮點型在資料庫中存放的是近似值
定點型別在資料庫中存放的是精確值
浮點數型別包括了單精度浮點數(float)、雙精度(double)、定點數型別decimal(numeric)
MySQL中可以指定浮點數和定點數的精度,其基本形式下:資料型別(M,D)
M引數稱為精度,是資料的總長度,小數點不占位置,D引數成為標度,是指小數點后面的長度位D,
-
-
字符型
一.char 、varchar
char:定長255,char(M);代表寬度,可容納的字符數
varchar:變長utf8 2w左右漢字 varchar(m);代表寬度,可容納的字符數
兩者區別:
char定長:
? M個字符,如果存的小于M個字符,實占M個字符,(如果不夠M個字符,內部會用空格補齊)取出的時候,會把后面的空格去掉,
varchar:
? M個字符,存的小于M個字符N(n<=m),實際只占用N個字符
三個區別:
? 1.大小
? 2.空間利用率,定長存盤,變長存盤
? 3.處理末尾空格機制不同
速度上:
? char定長速度快
char與varchar型的選擇原則:
? 1.空間利用效率
? 2.速度
二,text
text缺點:不能全文索引
可以存盤較大的文本段,搜索速度慢
不要加默認值,無效
-
日期/時間型
日期/時間型在資料庫中主要分兩種格式存盤
? 1.時間字串
? 2.時間戳整型
-
-
記錄操作
-
增加
insert into 表名 set 欄位名=值,欄位名=值;插入多條記錄
insert into 表名 (欄位1,欄位2) values (值1,值2),(值1,值2);replace into 是根據索引值進行判斷,若存在則先洗掉,后增加一條 ++++++++++++++ replace into 表名 set 欄位1=值,欄位2=值; -
洗掉記錄
delete from 表名 where 條件; ++++++++++++++++++++++++++ 清空資料,讓自動增量從1開始; 在資料除錯階段,我們需要錄入除錯資料 方法一: 使用工具可視化操作 方法二: 不使用delete from 表名,清空資料 使用truncate 表名 -
修改記錄
update 表名 set 修改欄位=值,修改欄位=值 where 條件; -
查詢記錄
單表查詢;=,like,in not in,>,<,>=,<=,<>,limit,rand(),sum(),count(),avg(),max(),min(),group by having;wghol wghol順序 :where group having order limit通配符:
? %:代表0個、一個或多個字符
? _:代表一個字符
多表查詢:子查詢,關聯查詢,左右鏈接 子查詢:查詢當中在插入查詢充當條件或是欄位,子表 關聯查詢:關聯查詢中一定要把關聯欄位作為where條件;若沒有了where,查詢出來的結果是對應的表記錄的乘積,稱之為笛卡爾積 左右鏈接:查詢要求記錄且關聯表的相關記錄 左鏈接:left join左鏈接查詢:左邊表全部記錄及右邊表滿足要求的記錄 select 欄位 from a left join b on a.欄位=b.欄位 右鏈接:right join右鏈接查詢,右邊全部記錄及左邊表滿足要求的記錄 select 欄位 from a right join b on a.欄位=b.欄位聯合查詢: union、union all 共同點:組合多個查詢結果為一個查詢結果集; 不同點: union:過濾重復的部分,只保留一個 union all:顯示所有 sql用了union后的排序問題 注意事項: 1.必須宣告臨時表 2.必須使用別名
-
-
索引、主鍵、外鍵
索引: 定義:索引--該欄位沒有重復值,但可以有一個空值 作用:索引--是提高查詢排序的速度 個數:索引--一個表可以有多個唯一索引主鍵: 定義:唯一標識一條記錄,不能有重復的,不允許為空 作用:主鍵--用來保證資料完整性 個數:主鍵--主鍵只有一個 資料庫主鍵,指的是一個列或是多個列的組合,其值能唯一地標識表中的每一行,通過它可強制表的物體完整性,主鍵主要是用來其他表的外鍵關聯,以及本記錄的修改與洗掉,外鍵【InnoDB】 MySQL支持外鍵的存盤引擎只有InnoDB,在創建外鍵的時候,要求父表必須有對應的索引,子表在創建外鍵的時候也會自動創建對應的索引,在創建索引的時候,可以指定在洗掉、更新父表時,對子表進行的相應操作, 定義:表的外鍵是另一個表的主鍵,外鍵可以有重復的,可以是空值, 作用:外鍵--用來和其他表建立聯系使用 個數:外鍵--一個表可以有多個外鍵 如果是公共關鍵字在一個關系中是主關鍵字,那么這個公共關鍵字被稱為另一個關系的外鍵,由此可見,外鍵表示了兩個關系之間的相關聯系,以另一個關系的外鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表,外鍵又稱為外關鍵字 -
資料庫/表 sql匯入&匯出 //命令列操作
-
資料庫/表匯出
匯出:資料+結構,且洗掉創建目標 mysqldump -u 賬戶 -p 庫名 >位置 匯出:結構 mysqldump -u 賬戶 -p -d 庫名 >位置 匯出:資料 mysqldump -u 賬戶 -p 庫名 表1 表2 >位置 -
資料庫/表匯入
mysql>set names utf8; mysql>source 匯入表所在的位置;
-
5.MYSQL運算子與常用函式
-
運算子
1.數值計算運算子 加減乘除取余(+ - * / %)
DIV:除法 結果得到后,只保留整數部分 MOD:取余 同等與%2.比較運算子,特殊比較運算子
一、比較運算子 MySQL支持的比較運算子:大于、小于、等于、不等于、大于等于、小于等于(>、<、=或<=>、>=、<=、<>或!=)、特殊比較運算子, 需要注意的null值得相等比較,其他與數學比較運算基本無異, <=>主要用來比較null得,MySQL特有得一個符號,條件比較時:is null或者<=>null, is not null或者not 欄位<=>null二、特殊比較運算子 除了數學類得比較運算子,還有一些特殊比較運算子 BETWEEN AND 存在于指定得范圍 BETWEEN values1 AND values2;用來比較匹配指定value1與value2兩個值之間的值,比較值可以是數字、文本、時間 IS NULL 為空 比較值是否為空 IN 存在于指定的集合 比較(匹配)值是否在指定的集合中 LIKE 通配符匹配 比較(匹配)字符是否符合指定模式的字符 REGEXP 正則運算式 用來做正則匹配 正則運算式基于JavaScript/PHP -
常用函式
字串函式: 1.加密 MD5資料加密 select MD5("字串"); 2.串接 CONCAT(str1,str2……strn):連接字串 str1,str2……strn為一個完整的字串,其中任意引數包含了NULL則直接回傳NULL CONCAT_WS(連接字符,str1,str2……strn):將第一個值作為字串的間隔字符,后面的引數以該字符作為間隔字符逐個拼接,如果后于字符引數帶有null,會直接忽略繼續拼接 3.長度計算 LENGTH()和CHAR_LENGTH():獲取字串長度, 通常情況下使用LENGTH獲取英文字串長度,CHAR_LENGTH獲取中文字符長度,所以LENGTH獲取的中文字串長度為3 4.大小寫轉換 UPPER()和UCASE():將字串中的字符轉換為大寫, LOWER()和LCASE():將字串中的字母轉換為小寫, 5.截取 LEFT(STR,NUM)、RIGHT(STR,NUM):從左邊或右邊截取num字串長度的字串, SUBSTRING(STR,NUM,LEN),MID(STR,NUM,LEN):從字串str中的num位置開始截取長度為len的字串,注意num在str按照從1到n取值,num表示截取字串查長度的起始位置 6.去空格 LTRIM(STR):去除字串開始處空格, RIRIM(STR):去除字串結束處空格, TRIM(STR):去除字串左右空格, 7.替換 INSERT(STR,POS,LEN,NEWSTR):將str中以第pos個字符起始,len長度的字串替換成newstr字串, REPLACE(STR,SUBSTR,NEWSTR):將str中所有的substr字串替換為newstr,數值函式: SUM():求和 MAX():求最高分 AVG():求平均值 ABS(x):回傳x的絕對值 CELL(x):回傳大于或等于x的最大整數值;#向上取整 FLOOR(x):回傳小于或等于x的最大整數值;#向下取整 MOD(x,y):回傳x除以y的余數 RAND():回傳0~1內的亂數 ROUND(x,y):回傳數值x的四舍五入后有y位小數的數值 TRUNCATE(x,y):回傳數值x且截斷為y位小數的值日期/時間函式 1.獲取當前日期 SELECT CURDATE() #獲取當前日期 2.獲取當前時間 SELECT CURTIME() #獲取當前時間 3.獲取當前日期和時間 SELECT NOW(); #獲取當前日期和時間 4.格式化時間 SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); #格式化時間 5.字串-》時間戳 select UNIX_TIMESTAMP();#當前時間戳 6.把我們的時間戳-》字串 SELECT FROM_UNIXTIME(1641096732);#時間戳-》字串 2022-01-02 12:12:12 SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()); #等效于select NOW(); WEEKOFYEAR(date);獲取日期為date對應一年的第幾周
7.PHP操作MySQL
鏈接資料庫函式
1.php7已廢棄
mysql_connect
mysql_connect函式,PHP5開始,MySQL就不推薦使用了,PHP7已經放棄mysql_connect()支持
2.mysqli_connect
程序化
物件化
步驟分解
1.連接資料庫
$conn=mysqli_connect("localhost","賬戶","密碼");
if(!$conn){
die("資料庫連接失敗!");
} //$conn連接成功時為object,不成功時為布林值 false
2.設定操作的資料庫
mysqli_select_db($conn,"資料庫名"); //設定操作的資料庫
3.設定操作編碼
mysqli_query($conn,"set names utf8"); //設定操作編碼
注意:設定編碼是utf8或者gbk,不是utf-8,不是gbk2312
使用set names utf8或者 set names gbk設定默認的編碼格式
4.執行SQL&處理結果
//執行sql
$sql="select * from 表名";
$rst=mysqli_query($conn,$sql);
//處理結果
while($arr=mysqli_fetch_assoc($rst))
{
//print_r($arr);
echo "<br/>";
echo $arr['欄位名'];
}
5.關閉連接
mysqli_close($conn);
資料處理:
查詢資料型別轉換
mysql_fetch_row
mysql_fetch_assoc
得到的是關聯陣列
mysql_fetch_array
可以得到關聯陣列也可以得到索引陣列
注釋:mysql_fetch_array($result,'MYSQL_ASSOC')與mysql_fetch_assoc($result)回傳結果相同,提示:如果在關聯索引之外還需要數字索引,用mysql_fetch_array()
本函式回傳的欄位名是區分大小寫的
mysqli_fetch_object
$rs=mysqli_fetch_object() //物件
$rs->欄位名
計算總記錄
mysqli_num_rows
mysqli_num_rows($result)
回傳結果集中行的數量
MYSQL用戶及權限
1.概述
資料庫保存著應用程式榷訓月累記錄下來的資料資產,安全級別特別高,所以只能讓授權的用戶可以訪問,其他用戶一律拒絕,MySQL是一個多用戶資料庫,擁有功能強大的訪問控制系統,可以為不同的用戶指定不同的權限,
MySQL中存在5個控制權限的表
全域層級:全域權限適用于一個給定MySQL server中的所有資料庫,這些權限存盤在mysql.user表中
資料庫層級:資料庫權限適用于一個給定資料庫中的所有目標,這些權限存放在mysql.db表中
表層級:表權限適用于一個給定表中的所有列,這些權限存盤在mysql.tables_priv表中
列層級:列權限適用于一個給定表中的單一列,這些權限存盤在mysql.columns_priv表
子程式層級:CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT權限適用于已存盤的子程式,這些權限可以被授予為全域層級和資料庫層級,
而且,除了CREATE ROUTINE外,這些權限可以被授予子程式層級,并存盤在mysql.procs_priv表中
2.MySQL用戶認證
用戶與資料庫服務器互動資料,分為兩個階段:
1.你有沒有權限連接
服務器如何判斷用戶有沒有權限連接上來:
依據:
1.你從哪來?host
2.你是誰?user
3.你的密碼是多少?password
用戶的這三個資訊,存盤在mysql庫中的user表中,
修改host域,使IP可以連接
mysql>use mysql;
mysql>update user set host='IP地址' where user='root';
mysql>flush privileges; #沖刷權限
修改用戶密碼
mysql>update user set password=password('13131') where user='';
mysql>flush privileges;
2.你有沒有權限執行操作
在mysql中,有一個庫是mysql庫,在這個庫中有三個表,一個是user表,user表中存盤了所有用戶的權限資訊,一個是db表,db表存盤的是所有用戶在資料庫層的權限資訊,一個是tables_priv表,存盤的是所有用戶在表層的權限資訊,
用戶登錄,user表首先能限制用戶登錄,其次還保存了該用戶的全域權限,如果該用戶沒有任何權限,那么將從db表中查找該用戶是否有某個資料庫的操作權限,如果沒有,將從tables_priv表中查找該用戶是否有某個表的操作權限,如果有,則該用戶可以按照已有的權限來操作該表,
1)全域授權和識訓
新增用戶并賦予全域權限:
常用權限:all, create,drop,select,insert,delete,update
grant[權限1,權限2,……] on *.* to user@'host' identified by 'password'
//第一個*是庫名,第二個*是表名
授權:
創建/更新lisi用戶,host為x.x.x.%,%通配符表示x.x.x.的段用戶都可以連接,密碼為123
grant all on *.* to lisi@'x.x.x.%' identified by '123';
識訓權限:
revoke all on *.* from lisi@'x.x.x.%';
已經存在用戶,也可以用這個命令設定
grant all on *.* to root@'x.x.x.x' identified by 'root';
revoke all on *.* from root@'x.x.x.x';
2)資料庫級授權和識訓
需求:讓lisi用戶擁有mysqlmaster資料庫的所有操作權限
授權:
grant all on mysqlmaster.* to lisi@'x.x.x.x' identified by '123';
識訓:
revoke all on mysqlmaster.* from lisi@'x.x.x.x';
3)表級授權和識訓
同資料庫級操縱類似,修改第二個*即可
MySQL中的權限分配都是分配到用戶+主機的物體上,MySQL的主機資訊可以是本地(localhost),某個IP,某個IP段,以及任何地方等,即用戶的地址可以限制到某個具體的IP ,或者某個IP范圍,或者任何地方,
MYSQL用戶分為普通用戶和root用戶,root用戶就超級管理員,擁有所有權限,普通用戶只擁有被授予的各種權限,
3.MySQL的權限分類及存盤
全域性的管理權限:作用于整個MySQL實體級別(user)
資料庫級別的權限:作用于某個指定的資料庫上或者所有的資料庫上(db)
資料庫物件級別的權限:作用于指定的資料庫物件上(表、視圖等)或者所有的資料庫物件上(tables_priv)
權限存盤在mysql庫的user,db,tables_priv,colums_priv,procs_priv這個幾個系統表中,待MySQL實體啟動后就加載到記憶體中
4.MySQL訪問控制實戰-允許遠程訪問/外網訪問
設定服務器的MySQL允許遠程訪問/外網訪問
一、進入mysql
mysql -u root -p
輸入密碼
二、選擇MySQL資料庫
use mysql
三、增加允許遠程訪問的用戶或者允許現有用戶的遠程訪問,
給root授予在任意主機(%)訪問任意資料庫的所有權限,
update user set host='%' where user='root';
insert into user set host="%",user='lisi2',password=password('lisi2');
四、沖刷連接權限
flush privileges;
五、設定權限
grant all on *.* to lisi@'x.x.x.x' identified by '123';
六、退出mysql
exit;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/267433.html
標籤:其他
上一篇:MyBatis的基本使用
下一篇:redis(28):安全
