SQL語言-----數據操作
數據操作
增加數據,insert into
標準格式
insert into 表名 (字段的列表)value(數據列表);
使用set
insert into 表名 set 字段1=值,2.....;
從其他數據表取數據插入
insert into 表名 (字段列表)select;
和insert into一樣也是分在種,標準寫法,set語法,從其它表取數據
標準方式
replace into 表名 (字段的列表) values (數據列表)
使用set:
replace into 表名 set 字段1=值1, ……
從其它數據表取數據插入:
replace into 表名 (子段列表) select
和insert into的區別:
Insert into是直接插入,replace into是先判斷表中的主鍵或唯一索引字段是否有和插入數據相應字段的值一樣的數據,它就會變成修改!(它會先刪除舊數據,然後再寫入一條新數據)
如果沒有一樣的數據,它就會插入一條新數據。
如果準備插入數據的表沒有任何主鍵或唯一索引,則repalce into會直接插入新數據。
它就不判斷了!
替換的例子
插入新數據的例子
影響多條數據的例子
發現有兩個重復的記錄,一個和id為6的記錄,還有一個是username為新插入值的那條id為8的數據。
它怎麽處理呢?
它會先刪除重復的兩條數據,再插入一條新數據。因此影響了3行記錄!
Replace into在數據有重復的時候,它不等同於update!
查詢數據,select
格式:select *或字段列表 from 表名 where 條件
查詢是千變萬化的。
查詢所有數據:
select * from t1;
查詢部分數據,加條件
只查詢部分字段的內容
修改數據,update
格式:update 表名 set 字段名=新值, ……. Where 條件 order by .. limit ..
思考一下:如果不加where條件會出現什麽結果呢?
結果是,把數據裏所有的記錄都進行了更新!
可以加where order by limit
刪除數據,delete
格式:delete from 表名 where .. order by .. limit ..
如果你不是想把表中所有數據都刪除,一定要記得寫where條件!
不寫where的情況,會刪除所有數據
可以加更多條件
快速刪除所有數據,truncate
格式:truncate 表名;
等同於,delete from 表名;
區別:
- Truncate是直接把表刪除,然後再重建表結構。優點是速度快。比一行一行刪除快。
- 不會返回受影響的行數。
- Auto_increment自動增量的字段恢復初值。
字符集和校對規則
字符集:一套符號和字符編碼的集合。
Gbk utf8 latin1
校對規則:在字符集內用於比較字符的一套規則。
字符在數據庫裏有四個等級
服務器級:安裝數據庫時指定的
數據庫級:建立database時指定或者繼承服務器級
數據表級:建立table時指定或者繼承數據庫級
字段級:建立數據表時定義字段指定的字符集或者繼承表的字符集
因此我們根據我們的項目或網站,安裝數據庫時最好用我們定好的編碼。比如utf8或gbk
創建表可以只指定表的字符集,這時字段會使用表指定的字符集
也可以同時指定表和字段的字符集
客戶端的字符集
我們啟動一個新客戶端,查看數據表中的數據,結果是亂碼!
我們查看一下關於編碼的變量
Character_set_client 客戶端使用的編碼
Character_set_connection 數據庫連接使用的編碼
Character_set_results 返回結果使用的編碼
這三個變量的設置影響到數據是否是亂碼
數據庫返回的數據顯示是亂碼,怎麽做?
方法:設置character_set_results為客戶端正確的編碼
我們進行數據的插入,會不會有問題呢?
原因是什麽?
就是客戶端明明是gbk的編碼,現在卻告訴數據庫編碼是utf8
Character_set_client現在是utf8!
解決方法:設置客戶端編碼變量為正確的值
Set character_set_client=gbk;
結論:因此如果客戶的這兩個變量設置正確,那麽無論插入數據還是讀數據,都不會亂碼!
拿PHP來說,就是你的PHP文件保存成什麽格式,你的客戶端就是什麽編碼!
我們把這三個變量可以合成一個:
Set names gbk;
Set names utf8;
create table t2
(
id int unsigned auto_increment primary key,
username varchar(20) not null unique key,
nickname varchar(20) character set utf8
) default character set gbk;
有的同學會不會有疑問,我數據表字段的編碼會不會影響客戶端的數據插入和顯示?
客戶端不會出現亂碼的情況,原因是數據庫會根據客戶端的編碼進行正確的轉換。
總結:
- 首先我們要確認我們的客戶端是什麽編碼。命令行客戶端看屬性。PHP文件在保存編碼。
- 根據客戶端編碼,用set names gbk或utf8設置編碼
就不會有亂碼發生了!
PHP操作MYSQL數據庫
- 配置php.ini支持mysql擴展
然後還要把擴展庫的路徑指定正確
- 然後重啟apache
如何確定MYSQL函數可用?
用phpinfo()來查看
看到下面的內容,就證明配置正確
- 寫程序連接操作數據庫
//先連接數據庫(並認證)
Mysql_connect(‘localhost:3306’, ‘root’, ‘123456’);
//根據你的文件編碼設置正確的編碼,通知數據庫
$conn = Mysql_query(“set names gbk”); //徹底搞定亂碼!
Mysql_query(‘use itcast’);
Mysql_query(‘show databases’);
//………
$result = Mysql_query(‘select * from t2’);
While($row = Mysql_fetch_assoc($result)) {
Print_r($row);
}
Mysql_close($conn);
SQL語言-----數據操作