Mysql筆記

這是我在極客學院看視頻記錄下的筆記:

SQL功能:
 DDL-定義語言
 DML--操作語言
 DCL--控制語言

執行方式:
   交互式SQL---如shell、PLUS
   嵌入式SQL


數據定義:
CREATE TABLE           創建表
DROP  TABLE              刪除表
ALTER TABLE             修改表
CREATE INDEX          創建索引
DROP INDEX              刪除索引
CREATE PROCUDURE 創建存儲過程
DROP PROCUDURE     刪除存儲過程


數據操作
insert
delete
update
select

權限控制
GRANT 用於授予用戶權限
REVOKE 解除用戶權限

事務控制:
COMMIT 用於提交事務
ROLLBACK 用於回滾事務

下載workbench,在瀏覽器中輸入wb.mysql.com---download now--download

XAMPP---開啓mysql----workbench操作數據庫


更新數據失敗?
 workbench--prefrences--sql editor--取消forbid。。。複選框--重新連接數據庫

修改定義;
新增字段: alter table tb_user add email varchar(50);
刪除字段:alter table tb_user drop email;
更改字段:alter table tb_user change age user_age int;()
更改字段類型:alter table tb_user change user_age user_age tinyint(1) not null;
更改表明:alter table tb_user rename user_tb;
刪除表:drop table user_tb;


mysql通過shell連接到數據庫

 如果啓動的shell已經配置好了路徑,只需輸入:mysql --version(查詢版本號)


 如果啓動的shell沒有配置好路徑,則需輸入/Applications/XAMPP/bin/mysql -h localhost -u root -p
    
 (-h是表示連接哪個服務器,localhost是本地,-u是用戶名,密碼是默認爲空,直接回車即可)

查看數據庫:show databases;
查看幫助文檔:mysql --help

MYSQL的數據類型:
主要的類型有----

 1.數值類型:整數類型和浮點數類型

  1.1整數類TINYINT ,SMALLINT,MEDIUMINT,INT,BIGINT

  tinyint只佔1個字節,範圍是-128到127
  smallint只佔2個字節,範圍是到32767
  MEDIUMINT只佔3個字節,範圍是到8388507
  INT只佔4個字節
  BIGINT只佔8個字節


  alter table user_tb add intsix0 int(6);
  alter table user_tb add intsix1 int(6) zerofill;---六位,不夠就用0填充;
  如插入123,則intsix0 字段顯示123,而intsix1字段顯示000123


1.2浮點型
 FLOAT(4個字節),DOUBLE(8個字節),DECIMAL

 alter table user_tb add intsix2 float(5,2);表示浮點數最多有5位且小數點後最多有2位

bool:真1假0

2.字符類型:
  char  是定長的,代表此字段最多爲10個,超過或截取前十個;
  varchar
  text
  blob

a.字段charstring 如果類型是char(10),則字段是不區分大小寫的
b.字段charstring 如果類型是char(10) binary,則是二進制的,是區分大小寫的;


insert into table tablb_String values('HELLO!');


第一種情況where charstring =‘hello’,是可以查出來的,第二種情況則查不出來,只能是HELLO!


存儲稍微大塊的內容:

  text不區分大小寫

   blob區分大小寫

ENUM,SET

alter table tablb_String  add gender enum('M','N');

則插入的時候,只能單個插入:
 
insert into tablb_String   values('Hello!','M');且只能是M或N ,如果是其他的話,數據庫插入null


alter table tablb_String  add setcol set('A','B','CD','E');


INSERT INTO tablb_String   values('Hello!','A,B,CD');




日期和時間類型:


DATE  YYYY-MM-DD 範圍1000.1.1-9999.12.31 ,3個字節
TIME  HH:MM:SS
YEAR  YYYY 範圍1901.1.1-2155.12.31
DATETIME YYYY-MM-DD  HH:MM:SS範圍1000.1.1-9999.12.31
TIMESTAMP 1970.1.1-2031


create table table_date (birthday DATE);


插入值可以是‘2015-12-25’ 也可以是20150101數值型,此方法同樣適用於datetime和timestamp


insert into table_date  values('2015-03-10')  或者 insert into table_date  values(20150101) 


alter table table_date  add datetimecol DATETIME(2);默認是空的,2代表在秒後加00,
 
  例如新增值爲20150203,則在數據庫中的體現值是20150203 00:00:00.00(注意後面的.00)


alter table table_date  add datetime2 TIMESTAMP; 新增第一個此類型字段時數據庫中默認的是當前時間,2015-12-25 15;34:20 ,
                                 
                                                 新增第二個此類型的字段時數據庫默認爲0000-00-00 00:00:00


主鍵自增長,auto_increment


alter table users add unique(name);說明name是唯一的,如果插入重複則會報錯




delete from users;//當執行此刪除的時候,會報錯,因爲有可能此表處於被保護的階段,怎麼辦?
   
    可以查詢出這個保護安全性的變量字段:
    
      執行sql語句:show variables like ‘%sql_safe%’在數據庫中會顯示出sql_safe_updates字段是true;
  
      要想刪除這個表,應該把這個字段值改爲false;
 
      set sql_safe_updates =0;數據庫就會變成false,這樣就可以繼續執行刪除表操作;
    
    刪除後ID 不會被重置,再插入一條數據時,ID 會接着走;
   
 trunkcate table users;//刪除了整個表,他的ID自增長會重置,然後從1開始;  




=============================
  
              ------------運算符------------


  
-----算數運算符----


 +、-、*、/、%


 例子:select 1+2;


        有null參與的計算結果都是null,例1+null 結果爲null
        字符之間也是可以進行運算的,
   
             ‘9’+‘6’,結果爲15,
            
              ‘20aa’*5結果爲100(可以轉化爲20)


               ‘aa20’*5結果爲0(可以轉化爲0)




-----比較運算符----


= 、<>、!=、>、<=>、between、in、is null、like、regexp


除了<=>之外,其他的跟null進行比較結果都是null,無法比較; 


    null<=>null結果是1
  
    0<=>null結果是0


    'tabl'='TABL'結果是1,不區分大小寫,如果前後有空格可以忽略的,如 'tabl'='TABL   '結果還是1,如果前面加binary ,就開始區分大小寫了,如binary  'tabl'='TABL',結果是0
   
   select 5 in(1,2,3,5,6)結果是1,select null in (1,23,4)結果是null;select null in(1,2,null)結果還是null,所以null是無法使用in方法的;


    like:%,_等等


    _下劃線是表示單個字符,‘jikexueyuan’ like 'j_ke%'結果是1


-----邏輯運算符----


 not或者!、AND或者&&、OR或者||、XOR(此運算代表亦或,前後兩個相同則是假,相反則是真)


-----位運算符----


=====================================Mysql連接和聯合====================================================


交叉連接cross join


內連接  inner join


交叉連接、內連接都是可以用逗號“,”代替的,但是交叉連接沒有where,而內連接可以有where


左連接 left join  ....on ...


右連接 right join ....on....


其中on可以用using()代替,
  
   例如:select * from user u left join user_group ug on user.userid = ug.userid


        等價於select * from user u left join user_group ug using(userid)


自連接:把一張表看成兩張表


聯合:union 多個表查詢的列相同,可以聯合在同一張表中,如果有重複,會自動去重


      union all不會自動去重,會全部顯示






=====================================Mysql函數=======================================




==============數學函數==========


ABS(value1)    取絕對值
 
CEILING(value1)最高限度,取比當前值大的、相鄰的一個整數,ceiling(4.6)=5


FLOOR(value1)  取比當前值小的、相鄰的一個整數,floor(3.7)=3


GREATEST(value1,value2...)取當前組數據中最大的一個


LEAST(value1,value2...)取當前組數據中最小的一個


MOD(value1,value2)取兩個值的餘數


PI() ,值爲3.141593


RAND(),產生0到1的隨機數


ROUND(X)四捨五入取整數,如round(9.2)=9


ROUND(X,M),四捨五入,X是數值,M是取小數點幾位,如round(10.234,2)=10.23


TRUNCATE(X,M);截取M位小數點,沒有四捨五入


SIGN(M)獲取布爾值標誌,結果只有-1,0,1,正數返回1,負數返回-1,例如sign(-23.4)=-1,sign(4)=1,sign(0)=0


POWER(X,M)或POW(X,M)表示X 的 M次方,例如:power(2,3)=8


BIN(X)將X轉換爲二進制的數字


OCT(X)將X轉換爲八進制的數字


HEX(X)將X轉換爲十六進制的數字


=================聚合函數===================


對一組數據集中起來概括的函數


AVG()求平均值


MAX()最大值


MIN()最小值


COUNT()數量


SUM()求和




=================字符串函數===================


LENGTH(X) 求長度


LCASE(X)、LOWER(X)將字符串變爲小寫


UCASE(X)、UPPER(X)將字符串變爲大寫


STRCMP(X,M)比較字符串大小,結果爲-1,0,1


    例如STRCMP('hello','yes')=-1因爲h比y靠前


        STRCMP('yes','yes')=0   因爲倆個字母一樣


POSITION(substr IN str)     返回字符串在另一個字符串的位置,從1開始查起,例如 select POSITION('d' IN 'dfg')=1


REPLACE(str,from_str,to_str)將字符串中的from_str字符串換成to_str,例如select REPLACE('hrllo','r','o')=hollo


INSERT(str,pos,len,newstr)  將字符串的第pos個位置開始查len個,替換成newstr,INSERT('kello',3,4,'hh') = kehh
  
CONCAT(value1,value2)合併函數,將value1和value2組合合併


CONCAT_WS(separator,str1,str2,...)合併函數加符號CONCAT_WS(';','hello','world')=hello;world


LEFT(str,len)  截取從左邊開始算的len個字符,如left('wegfd',2)=we


RIGHT(str,len)  截取從右邊開始算的len個字符,如right('wegfd',2)=fd


LPAD(str,len,padstr) 爲str在左邊填充padstr,填充後總數量爲len,例如lpad('lo',5,'hel')=hello


rpad  在右邊填充


ltrim 去掉左邊的空格


rtrim 去掉右邊的空格


trim  將兩邊的空格去掉


SUBSTRING(str,pos,len)取字符串


ASCII取阿斯克馬函數


=================日期和時間函數===================
now() 獲取當天日期和時間


curtime獲取當天時間


curdate 獲取當天日期


year('20151229') 獲取年=2015


month('20151229') 獲取月份=12


monthname('20151229') 月份名稱


dayofyear是當年的第幾天


dayofweek()是這個星期中的第幾天  ,注意第一天是從星期天還是算的


dayname 當天的名字,是星期幾,如果是第三天,就是星期二


week這一年的第幾周


hour()可以取一個具體時間的小時


minute()可以取一個具體時間的分鐘


second()可以取一個具體時間的秒


DATE_ADD(date,INTERVAL expr unit)可以對年、月、日進行相加


date_sub()可以對年、月、日進行相減




=========================數據加密函數================================


password()加密,不可逆,區分大小寫


encrypt()


encode("secrect","abc") 加密,secrect是被加密的值,abc是加密的鍵值,
  
 insert into users(uname) values(encode("secrect","abc"));


decode("","")解密
 
  select decode(uname,"abc") from users;


二者的加密級別略低,當無法正確解密的時候,顯示爲空


===============================
aes_encrypt("secrect","abc") 加密,secrect是被加密的值,abc是加密的鍵值,
  
 insert into users(uname) values(aes_encrypt("secrect","abc"));


aes_decrypt("","")解密
 
  select aes_decrypt(uname,"abc") from users;


二者的加密級別略高,當無法正確解密的時候,顯示爲null


====
MD5(x)可以直接查詢md5加密結果


SHA(x)


============================================控制流函數==================================================


IF(1>2,3,4);如果1>2成立的話,返回第一個參數3,否則返回4


ifnull()


nullif()
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章