Mysql基本用法


#登錄數據庫

mysql -hlocalhost -uroot -p;
#修改密碼
mysqladmin -uroot -pold password  new;
 
 
#顯示數據庫
show databases;
#顯示數據表
show tables;
#選擇數據庫
use examples;
#創建數據庫並設置編碼utf-8 多語言
create  database  `examples` default  character  set  utf8 collate  utf8_general_ci;
#刪除數據庫
drop  database  examples;
#創建表
create  table  test(
     id int (10) unsigned zerofill not  null  auto_increment,
     email varchar (40) not  null ,
     ip varchar (15) not  null ,
     state int (10) not  null  default  '-1' ,
     primary  key  (id)
)engine=InnoDB;
#顯示表結構
describe
#刪除表
drop  table  test;
#重命名表
alter  table  test_old rename test_new;
#添加列
alter  table  test add  cn int (4) not  null ;
#修改列
alter  table  test change id id1 varchar (10) not  null ;
#刪除列
alter  table  test drop  cn;
#創建索引
alter  table  test add  index  (cn,id);
#刪除索引
alter  table  test drop  index  cn
#插入數據
insert  into  test (id,email,ip,state) values (2, 'qq@qq.com' , '127.0.0.1' , '0' );
#刪除數據
delete  from  test where  id = 1;
#修改數據
update  test set  id= '1' ,email= 'q@qq.com'  where  id=1;
#查數據
select  * from  test;  #取所有數據
select  * from  test limit 0,2;  #取前兩條數據
select  * from  test email like  '%qq%'  #查含有qq字符 _表示一個 %表示多個
select  * from  test order  by  id asc ;#降序 desc
select  * from  test id not  in ( '2' , '3' );#id不含2,3或者去掉 not 表示含有
select  * from  test timer between  1 and  10;#數據在1,10之間
 
# ---------------------------表連接知識------------------------------
#等值連接又叫內鏈接 inner  join  只返回兩個表中連接字段相等的行
select  * from  A inner  join  B on  A.id = B.id; #寫法1
select  * from  A,B where  A.id = B.id; #寫法2
select  a.id,a.title from  A a inner  join  B b on  a.id=b.id and  a.id=1;#寫法3 表的臨時名稱
select  a.id as  ID,a.title as  標題 from  A inner  join  B on  A.id=B.id;#添加 as 字句
 
#左連接又叫外連接 left  join  返回左表中所有記錄和右表中連接字段相等的記錄
select  * from  A left  join  B on  A.id = B.id;
 
select  * from  A left  join  (B,C,D) on  (B.i1=A.i1 and  C.i2=A.i2 and  D.i3 = A.i3);#復雜連接
 
#右連接又叫外連接 right  join  返回右表中所有記錄和左表中連接字段相等的記錄
select  * from  A right  join  B on  A.id = B.id;
 
#完整外部鏈接 full  join  返回左右表中所有數據
select  * from  A full  join  B on  A.id = B.id;
 
#交叉連接 沒有 where 字句 返回卡迪爾積
select  * from  A cross  join  B;
-------------------------表連接結束------------------------------------------------------------
-----------------索引創建------------------------------------------------
show index  from  A #查看索引
alter  table  A add  primary  key (id) #主鍵索引
alter  table  A add  unique ( name ) #唯一索引
alter  table  A add  index  name ( name ) #普通索引
alter  table  A add  fulltext( name ) #全文索引
alter  table  A add  index  name (id, name ) #多列索引
 
#常用函數
abs (-1)#絕對值
pi()#pi值
sqrt(2)#平方根
mod(-5,3)#取余-2
ceil(10.6)#進位+1 結果11 ceil(10.0)結果10
floor(10.6)#取整 10
round(2.5)#四舍五入到整數 結果3
round(2.5,2)#保留兩位小數 結果2.50
truncate (2.5234,3)#取小數后3位不四舍五入 2.523
sign(-2);#符號函數 返回-1 0還是0 正數返回1
pow(2,3),exp(2);#2的3次冪 或e的2次冪
log(2),log10(2);#求對數
radians(180),degrees(0.618);#角度弧度轉換
sin(0.5),asin(0.5)#正弦和反正弦 類似cos acos tan atan
length( 'hi' )#計算字符長度
concat( '1' ,1, 'hi' )#合並字符串
insert ( '12345' ,1,0, '7890' );#從開頭第1個字符開始到0個結束,替換成后邊字符串,0表示在最前邊插入
ucase( 'a' ),lcase( 'A' )#轉成大寫和小寫
left ( 'abcd' ,2), right ( 'abcd' ,2);#返回前兩個字符和后兩個字符
ltrim( '  0  ' ),rtrim( ' 0 ' ),trim( '  0  ' )#刪除空格
replace ( '1234567890' , '345678' , '0' );#替換輸出12090
substring ( '12345' ,1,2)#取字符 輸出12 1是位置 2是長度
instr( '1234' , '234' );#取得234位置是2
reverse( '1234' );#反序輸出4321
current ()#返回日期
curtime()#返回時間
now()#返回日期時間
month (now())#當前月份 monthname 英文月份
dayname(now())#星期英文 dayofweek()1是星期天 weekday()1是星期二
week(now())#本年第多少周
dayofyear(now()),dayofmonth(now())#今天是本年第多少天 今天是本月第多少天
year (now()), month (now()), day (now()), hour (now()), minute (now()), second (now())#返回年月日 時分秒
time_to_sec(now()),sec_to_time(3600*8);#轉換時間為秒和還原
version()#mysql版本
database ()#當前連接的數據庫 沒有為 null
user ()#獲取用戶名
md5( 'a' )#加密字符串
ascii( 'a' )#ascii值97
bin(100),hex(100),oct(100)#返回二進制 十六進制 八進制
conv(10001,2,8);#各種進制相互轉換
rand()#生成0到1之間隨機數
sleep(0.02)#暫停秒數
 
數據庫優化
.開啟緩存,盡量使用php函數而不是mysql
. explain select  語句可以知道性能
.一行數據使用 limit 1;
.為搜索字段重建索引 比如關鍵字 標簽
.表連接 join 保證字段類型相同並且有其索引
.隨機查詢使用php $r = mysql_query( "SELECT count(*) FROM user" );
                     $d = mysql_fetch_row($r);
                     $rand = mt_rand(0,$d[0] - 1);
                     $r = mysql_query( "SELECT username FROM user LIMIT $rand, 1" );
.避免使用 select  * 應該使用具體字段
.每張表都是用id主鍵,並且是unsigned int
.對於取值有限而固定使用enum類型,如性別 國家 名族 部門 狀態
.盡可能使用 not  null  ip存儲使用 int (4),使用ip 轉化函數ip2long()相互long2ip()
. delete insert 語句會鎖表,所以可以采用分拆語句操作
     while(1){操作語句;usleep(2000);}
.選擇正確的存儲引擎;MyISAM適合大量查詢 寫操作多用InnoDB支持事務
 
#存儲過程
#存儲程序
delimiter #定義存儲程序
create  procedure  getversion( out  params varchar (20)) #params是傳出參數 in 傳進 out 傳出 inout傳回
begin
select  version() into  params; #版本信息賦值params
end
call getversion(@a); #調用存儲過程
select  @a;
delimiter #定義存儲函數
create  function  display(w varchar (20)) returns  varchar (20)
begin
return  concat( 'hello' ,w);
end
select  display( 'world' );
 
drop  procedure  if exists spName; #刪除一個存儲過程
alter  function  spName [];#修改一個存儲過程
show create  procedure  spName;#顯示存儲過程信息
declare  varName type default  value;#聲明局部變量
#if語句
if 條件 then  語句
elseif 條件 then  語句
else  語句
end  if
# case 語句
case  條件
when  條件 then  語句
when  條件 then  語句
else  語句
end  case
#loop語句
fn:loop
語句
end  loop fn;
leave fn #退出循環
#while語句
fn:while 條件 do
語句
end  while fn
 
 
#mysql使用幫助資料
? contents; #列出幫助類型
? data types;#列出數據類型
int ;#列出具體類型
? show;#show語句
? create  table ;#
#常見表的比較
                     Myisam   BDB    Memory    InnoDB    Archive
存儲限制        no            no       yes                64T        no
事物安全                      支持                         支持                        
鎖機制         表鎖           頁鎖    表鎖             行鎖          行鎖
全文索引       支持
外鍵支持                                                        支持
myisam  frm存儲表定義 MYD存儲數據 MYI存儲索引
InnoDB 用於事務處理
char  varchar 保存和索引都不相同
浮點數 float (10,2) 定點數 decimal (10,2)
長度一定下,浮點數表示更大數據范圍,缺點是引起精度丟失,貨幣等使用定點數存儲
         索引適合於 where 字句或者連接字句列
         對於唯一值使用唯一索引
 
添加新用戶 grant  select , insert , update , delete  on  *.* to  Yoby@localhost identified by  'mysql' ;
#           *.* 數據庫名.表名,限制登錄某一個數據庫 test.*                           localhost是本地主機 網絡可以使用 '%' 代替所有主機        'mysql' 是密碼 Yoby是用戶名  所有權限可以用 all 代替
查看用戶權限 show grants for  'root' @ 'localhost' ;
移除權限  revoke  all  on  *.* from  root@localhost;
group  by  id 分組
having  限制字句
select1 union  select2 聯合查詢有重復去掉保留一行
select2 union  all  select2 所有行合並到結果集中去


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM