1. 程式人生 > >mysql資料庫常用知識點歸納

mysql資料庫常用知識點歸納



---------------------------資料庫常用儲存型別------------------------------


字串型別:   
CHAR(M)                M      M為(0~255之間的整數)      儲存小量 
VARCHAR(M)             M      M為(0~65535之間的整數)    儲存大量 可變的資料


TEXT系列:
TINYTEXT
0~255
TEXT   0~65535
MEDIUMTEXT      0~167772150
LONGTEXT        0~4294967295




整數型別:
TINYINT          1      0-255    無符號
SMALLINT         2      0-255 65535
無符號
MEDIUMINT        3      0-1677215       無符號
INT或者INTEGER   4      0-4294967295    無符號
BIGINT           8      




浮點型別
FLOAT 4      
DOUBLE 8


日期型別:
DATE             4  
1000-01-01        9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 1970 0101 08 00 01 2038年的某個時刻
TIME   3 -835:59:59    835:59:59
YEAR             1      1901 2155




--------------------------------資料定義DDL---------------------------------------


資料庫操作
CREATE DATABASE test;


刪除資料庫
DROP DATABASE test;


修改表名字
ALTER TABLE nx_djkk rename nx_user;


刪除一個表
DROP TABLE nx_user;


清空資料表的資料
DELETE   FROM nx_user;
TRUNCATE nx_user;




複製一個表和結構
CREATE TABLE nx_info LIKE nx_user;




複製一個表的資料
INSERT INTO nx_info(username,email) SELECT username,email FROM nx_user;


Oracle,DB2,SQL Server mysql ,SyBase LnFoxmix






檢視建立表SQL語句
SHOW CREATE TABLE nx_user;


增加一個欄位
ALTER TABLE nx_user ADD age VARCHAR(2);


在表的最前位置增加一個欄位 status
ALTER TABLE nx_user ADD status TINYINT NOT NULL DEFAULT 1 FIRST;


在id欄位後增加一個欄位
ALTER TABLE nx_user ADD uid INT NOT NULL DEFAULT 0 AFTER id;


刪除一個欄位
ALTER TABLE nx_user DROP status;


修改一個欄位的資料型別
ALTER TABLE nx_user MODIFY username VARCHAR(20);


修改一個欄位的名稱
ALTER TABLE nx_user CHANGE password pwd VARCHAR(20);


調整欄位的位置
ALTER TABLE nx_user MODIFY views SMALLINT(5) UNSIGNED FIRST;




建立索引
ALTER TABLE nx_article ADD INDEX index_title(title);
ALTER TABLE nx_article ADD UNIQUE(title);   唯一索引
ALTER TABLE nx_article ADD PRIMARY KEY(id);


CREATE INDEX index_title ON nx_article(title);
CREATE UNIQUE INDEX index_title ON nx_article(title);


刪除索引
DROP INDEX;


檢視索引
ALTER TABLE nx_user DROP INDEX index_username;
SHOW INDEX FROM nx_user;






建立檢視(頻繁查詢的中間表)
CREAT VIEW v_user as SELECT * FROM nx_user WHERE id>6;


刪除檢視
DROP VIEW v_user;




修改資料表結構
ALTER TABLE nx_user engine=innodb;


操作表的約束
UNSIGNED         無符號
NOT NULL         非空
DEFAULT          預設
UNIQUE           唯一
PRIMARY KEY      主鍵
AUTO_INCREMENT   自增


建立使用者表
CREATE TABLE nx_user(
id   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL DEFAULT '',
password VARCHAR(32) NOT NULL DEFAULT '123123123123123123123123',
email VARCHAR(50) NOT NULL DEFAULT '[email protected]'
);




建立牌具產品表
CREATE TABLE nx_article(
id   INT          NOT NULL    AUTO_INCREMENT PRIMARY KEY,
title      VARCHAR(50)      NOT NULL    DEFAULT '',
pid   TINYINT(2)       NOT NULL    DEFAULT '0',
path       VARCHAR(100)     NOT NULL    DEFAULT '',
status     TINYINT(1)       NOT NULL    DEFAULT 1,
list       VARCHAR(50)      NOT NULL    DEFAULT 'list',
article    VARCHAR(50)      NOT NULL    DEFAULT 'article'
);






--------------------------------資料查詢語言DQL&資料操縱語言DML-----------------------------
插入一條資料 
INSERT INTO nx_article(title,pid,path,status,list,article) VALUES("test",0,'','','','');


插入多條資料,注意 VALUES後面不要有括號
INSERT INTO nx_article(title,pid,path,status,list,article) VALUES
("aaaaa",0,'','','',''),
("bbbbb",0,'','','',''),
("ccccc",0,'','','',''),
("ddddd",0,'','','',''),
("eeeee",0,'','','',''),
("fffff",0,'','','','');






插入資料
INSERT INTO nx_user(username,password,email) VALUES 
("xiaozhou",md5("123456"),"[email protected]"),
("xiaowu",md5("123456"),"[email protected]"),
("xiaoqiu",md5("123456"),"[email protected]"),
("xiaoguan",md5("123456"),"[email protected]"),
("xiaomo",md5("123456"),"[email protected]"),
("xiaoyan",md5("123456"),"[email protected]"),
("xiaohuang",md5("123456"),"[email protected]"),
("xiaomiao",md5("123456"),"[email protected]");




按條件刪除資料
DELETE FROM nx_user where id=2;




修改一條資料
UPDATE test.nx_user SET username="djkk" where username="xiaomo"; 


UPDATE djkkcms.nx_video SET link="test1" where link="test"; 








查詢所有資料
SELECT * FROM nx_user;


選擇欄位查詢
SELECT username,password FROM nx_user where id > 5;




起別名查詢
SELECT username as 客服名字, password as 客服密碼 FROM nx_user;
SELECT id,title as 產品標題,views as 瀏覽次數 from nx_article;




查詢後排序  desc倒序     asc順序
SELECT id,title FROM nx_article order by id desc;






-----------------------------------資料庫常用函式-----------------------------------
【字串操作函式】
使用CONCAT 連結字串函式
SELECT CONCAT("hello"," ","world!") as myname;


轉換成小寫
SELECT LCASE("HELLO WORLD ! DJKK ") as test;


轉換成大寫
SELECT UCASE("hello world ! DJKK ") as test;


string長度
SELECT LENGTH("hello world ! DJKK ") as test;


去除前端空格


SELECT LTRIM("    hello world ! DJKK ") as test;


去除後端空格
SELECT RTRIM("    hello world ! DJKK ") as test;


重複N次
SELECT REPEAT("dj-",8) as test;




搜尋替換
SELECT REPLACE("dj kk REMIX!","kk","djkk") as test;




字串擷取
PHP    的substr 開始位置是0
MYSQL  的substr 開始位置是1
SELECT SUBSTR("dj kk REMIX!",1,2) as test;


生成N個空格
SELECT CONCAT("dj",SPACE(2),"djkk")as test;




使用md5加密
SELECT id ,md5(title),pid FROM nx_article;




【日期函式】
SELECT curdate() as test;   返回當前日期


SELECT curtime() as test;   返回當前時間


SELECT now() as test;       返回當前的日期時間


SELECT UNIX_TIMESTAMP(curdate());  返回當前日期的時間戳










【數學函式】
bin
轉二進位制
SELECT bin(520);




CEILING 
向上取整
SELECT CEILING(99.9);




FLOOR 
向下取整
SELECT FLOOR(99.9);




開平方
SELECT SQRT(32);




返回0-1內的隨機值
RAND
SELECT CEILING(RAND()*100) as number;




【mysql預處理語句】
1、首先定義預處理語句
prepare test from 'SELECT * FROM nx_user WHERE id >?';


2、設定變數
SET @i = 5;


3、執行語句
execute test using @i;


DROP prepare test;






【事務處理】MyIsam不支援事務  InnoDb才支援
1、首先關閉自動提交語句執行
SET AUTOCOMMIT = 0;


2、從表中刪除一條記錄
DELETE FROM nx_user where id=6;


3、此時做一個p1還原點
savepoint p1;


4、再次再表中刪除一條資料
DELETE FROM nx_user WHERE id=9;


5、savepoint p2;


恢復到p1的還原點,同時登出之後的其它還原點
6、rollback tp p1;




7、退回到最原始的還原點
rollback






【建立儲存過程】
簡單的執行程式碼段
\d //
create procedure p2()
bengin
set @i=0;
while @i<10 do
insert into nx_user VALUES('',CONCAT("djkk",@i),'1'); 
set @i = @i+1;
end while;
//


DROP PROCEDURE p2;






【觸發器】修改一個表,同時另一個表也被修改
create trigger test  新建一個名稱為test的觸發器
before insert on nx_user for each row 每當往nx_user表插入(更新 刪除)一行的時候之前就觸發 
begin
insert into nx_info(name) values ('',new.name,'1');
end//


\d ;




【使用正則表示式】
select "php is very good" regexp "^php";


select username from nx_user where username REGEXP "^xiao";


select username from nx_user where username REGEXP "^d" order by rand() limit 5;












-----------------------------------PHP常用函式-----------------------------------
【字串操作函式】
substr($str,0,5) 字串擷取






【陣列操作函式】
array_keys() 獲得陣列的鍵名
array_values() 獲得陣列的鍵值
in_array()     判斷陣列中是否存在某個值
array_flip() 交換陣列中的健和值
array_reverse()     陣列中的元素順序翻轉
sizeof() 統計陣列中的元素個數
count()   統計陣列中的元素個數
array_count_values() 統計陣列中的元素出現的次數
array_unique()       去除陣列中重複出現的值
array_filter()       用回撥函式過濾陣列中的元素
array_walk()         對陣列中的每個元素應用到回撥函式處理
array_map()         每個元素應用到回撥函式處理 可以處理多個數組
array_column()       返回$arrs陣列中鍵值為column_key的列
sort() 按值由小到大
rsort() 按值由大到小
asort() 按鍵由小到大
arsort()     按鍵由大到小
usort() 按回調函式
uasort()             按回調函式 保持索引不變
natsort() 按自然排序
natcasesort()   按自然排序 不區分大小寫
array_multisort()   對多個數組或二維陣列進行排序
array_​slice()       根據條件取出一段值並返回
array_​splice()         選擇一系列元素並刪除或者替換
end()   取得陣列最後的一個元素
array_​column()   取得多維陣列的某個元素列
array_​combine() 合併兩個陣列組成一個新陣列
array_​change_​key_​case() 將陣列的鍵都轉為大寫字母或者小寫字母
array_​chunk() 將陣列按N個元素切割變成二維陣列,不是平均分割
array_​diff_​assoc()                      函式用於比較兩個(或更多個)陣列的鍵名和鍵值 ,並返回差集。
array_​diff_​key()                        比較兩個陣列的鍵名,並返回差集
array_​diff_​uassoc()                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
array_​diff_​ukey()
array_​diff()
array_​fill_​keys()
array_​fill()
array_​intersect_​assoc()
array_​intersect_​key()
array_​intersect_​uassoc()
array_​intersect_​ukey()
array_​intersect()
array_​key_​exists()
array_​merge_​recursive()
array_​merge()
array_​multisort()
array_​pad()
array_​pop()
array_​product()
array_​push()
array_​rand()
array_​reduce()
array_​replace_​recursive()
array_​replace()
array_​search()
array_​shift()
array_​splice()
array_​sum()
array_​udiff_​assoc()
array_​udiff_​uassoc()
array_​udiff()
array_​uintersect_​assoc()
array_​uintersect_​uassoc()
array_​uintersect()
array_​unshift()
array_​walk_​recursive()
compact
current
each($arrs) 遍歷陣列, 返回一個數字索引的陣列和key,value的下標陣列


extract
in_​array
key_​exists
key
list
natcasesort
natsort
next
pos
prev
range
reset
shuffle


【資料庫相關函式】
mysql_connect("localhost","root","123qwe") 連結資料庫
mysql_select_db("test",$conn)   選擇資料表
mysql_query() 執行SQL語句
mysql_fetch_assoc() 返回一個二維關聯陣列
mysql_fetch_row()    返回一個二維索引陣列
mysql_affected_rows() 返回影響的行數
mysql_insert_id() 返回ID自增值














【伺服器環境相關函式】
【正則函式】
【檔案操作函式】
【時間日期函式】
date()
time()

strtotime();