$mylink = mysql connect("localhost", "root", "root");
mysql_set_charset("utf8");
// 也可以使用:mysql_query("set names utf8");
mysql_select_db("數據庫名");
// 也可以使用:mysql_query("use 數據庫名");
$resule = mysql_query("幾乎所有sql語句");
create
: 建立資料庫的物件alter
:變更資料庫的物件drop
:刪除資料庫的物件insert
:新增資料到資料表中update
:更改資料表中的資料delete
:刪除資料表中的資料grant
:賦予使用者使用權限revoke
:取消使用者的使用權限commit
:完成教育作業rollback
:交易作業異常,將已變動的資料回復到交易開始的狀態select
:選取資料庫中的資料select, from, where, group by, order by
自動提交模式
;人工提交
(在執行sql語句後,需要人為提交,即執行語句commit;)set autocommit=0;
事務執行的基本流程:(針對增刪改語句)
`starttransaction;
//也可以寫成begin;1 | if (no error) { |
具體分為兩種情況:
在cmd中
,執行語句沒有錯誤,直接commit,有錯誤,執行rollback;在php中
: 1 | $link = mysql_connect("localhost", "root", "000"); |
1 | create database 數據庫名稱[庫選項]; |
1 | show databases; // 查看所有數據庫 |
1 | show databases like 'pattern'; |
1 | show creat database mydatabase; |
1 | alter database 數據庫名稱 [庫選項]; |
1 | drop database 數據庫名字; |
1 | // 方法一 |
1 | create table if not exists mydatabase.student( |
1 | // 方法二 |
1 | use mydatabase |
數據庫能查看的方式,表都可以查看
show tables;
查看部分表:模糊匹配;show tables like 'pattern';
1 | show tables like '%s'; |
查看表創建語句:show creat table mytable;
1 | show create table mytable\g; // \g === ; |
查看表結構:查看表中的字段信息desc/describe/show columns from 表名;
修改表本身:
表本身可以修改:表名和表選項
修改表名:rename table 老表名 to 新表名;
1 | # 重命名表:student表 -> my_student(取數據庫名字前兩個字母) |
修改表選項:字符集,校對集和存儲引擎
1 | # 修改表選項:字符集 |
修改子段
字段操作很多:新增,修改,重命名,刪除
新增字段:alter table 表名 add [column] 子段名 數據類型 [列屬性][位置];
1 | # 給學生表新增一個ID放到第一個位置 |
修改字段:修改通常是修改屬性或者數據類型;alter table 表名 modify 字段名 [屬性][位置];
1 | # 將學生表中的number學號字段變成固定長度,且放到第二位(id之後) |
重命名字段:alter table 表名 change 旧字段 新字段名 數據類型 [屬性][位置];
1 | # 修改學生表中的name字段為fullname |
刪除字段:alter table 表名 drop 字段名;
1 | # 刪除學生表中的年齡字段(age) |
小心:如果表中已經存在數據,那麼刪除字段會清空該字段的所有數據(不可逆)
drop table 表名1, 表名2...;
–可以一次性刪除多張表兩種方案
insert into 表名 values(值列表)[, (值列表)];
– 可以一次性插入多條紀錄
1 | # 插入數據 |
方案二:給部分字段插入數據,需要選定字段列表:字段列表出現的順序與字段的順序無關;但是值列表的順序與選定的字段的順序一致
insert into 表名 (字段列表) values(值列表)[, (值列表)];
1 | # 插入數據:制定字段列表 |
select */字段列表 from 表名[where 條件];
查看所有數據
1 | select * from my_student; |
查看指定之段,指定條件的數據
1 | select id, number, gender, name from my_student where id = 1; -- 查看滿足ID為1的學生信息 |
update 表名 set 字段 = 值 [where條件];
– 建議都有where,要不然是更新全部
1 | update my_student set age = '27' where fullname = 'Jim'; |
更新不一定會成功:如果沒有真正要更新的數據(是否對數據有影響)
delete from 表名 [where條件];
1 | delete from my_student where fullname = 'Jim'; |
計算機只識別二進制:人類更多是識別字符:需要有個二進制與字符的對應關係(字符集)
1 | # 錯誤示範 |
原因:\xD5\xC5\xD4\xBD 代表的是”張越”在當前編碼(字符集)下對應的二進制編碼轉換成的十六進制:兩個漢字 => 四個字節(GBK)
所有的數據庫服務器認為(表現)的一些特性都是通過服務器端變量來保存:服務器先讀取自己的變量,看看應該怎麼表現
1 | # 查看服務器到底識別那些字符集 |
問題根源:客戶端數據只能是GBK,而服務器認為是UTF8;產生矛盾
解決方案:改變服務器,默認的接收字符集為GBK;
1 | # 修改服務器認為的客戶端數據的字符集gbk |
查看數據效果:依然是亂碼
解決辦法:修改服務器給客戶端的數據字符集為GBK
1 | # 修改服務器給定數據的字符集為GBK |
顯示正常,插入中文成功
set 變量 = 值
修改只是會話級別(當前客戶端,檔次連接有效,關閉失效)set name 字符集;
set names gbk;
=====> character_set_client, character_set_results, character_set_connection;1 | # 快捷設置字符集 |
_bin: binary,
二進制比較,取出二進制位,一位一位的比較,區分大小寫_cs: case sensitive,
大小寫敏感,區分大小寫_ci: case insensitice,
大小寫不敏感,不區分大小寫1 | # 查看所有校對集 |
對比:使用utf8個 _bin 和 _ci 來驗證不同的校對集的效果
1 | # 1.創建表使用不同的校對集 |
校對集必須在沒有數據之前聲明好,如果有了數據,那麼再進行校對集修改將無效
1.將用戶的訪問信息紀錄到文件中:獨佔一行,紀錄IP
1 | // 獲取用戶信息 |
2.所有的數據都是通過文件中紀錄的內容來計算出來:讀取整個文件,一行代表訪問一次:使用file函數讀取
1 | // 讀取數據:以行為單位 |
3.總的訪問次數出來:數據的總行數,就是讀取數據數組的總紀錄數
1 | // 求出網站的總訪問量 |