mysql 學習總結

來源:互聯網
上載者:User

標籤:而不是   服務   where   max   決定   int   condition   時間間隔   timestamp   

MYSQL的增、刪、查、改   註冊、授權#建立一個對資料庫中的表有一些操作許可權的使用者,其中OPERATION可以用all privileges替換,DBNAME、TABLENAME可以用*替換,表示全部mysql> grant OPERATION on DBNAME.TABLENAME to ‘USERNAME‘@‘IP_ADDR‘ [identified by ‘PASSWD‘];mysql> create user ‘USERNAME‘@‘IP_ADDR‘ identified by ‘PASSWD‘;mysql> revoke OPERATION on DBNAME.TABLENAME from USERNAME;     #收回使用者的某些許可權mysql> show grants for ‘USERNAME‘[@‘IP_ADDR‘];     #查詢使用者權限$ mysqladmin -u USERNAME -p [OLD_PWD] password NEW_PWD     #更新密碼(註:如果原來沒有密碼OLD_PWD就不要寫)   mysql欄位的資料類型int[(M)]      #整型double[(M,D)]     #雙精確度浮點型date     #日期類型 格式YYYY-MM-DD 範圍1000-01-01——》9999-12-31char(M)     #字元類型blob text    #定長字串(會用空格填滿)varchar     #變長字串類型timestamp     #時間戳記  mysql資料類型相關函數INET_ATON(expr)     #將一個表示ip地址的字串轉換為整數INET_NTOA(expr)     #將一個整數轉換為表示ip地址的字串NOW()     #擷取目前時間戳TO_DAYS(timestamp)     #一年中的哪一天DAYOFWEEK(expr)     #一周中的哪一天,周日開始,從1計數WEEKDAY(expr)     #一周中的哪一天,周一開始,從0計數DAYOFMONTH(expr)     #一月中的哪一天,從1計數DAYOFYEAR(expr)     #一年中的哪一天,從1計數MONTH(expr)          #月份1-12DAYNAME(expr)          #星期的名字MONTHNAME(expr)       #月份的名字QUARTER(expr)     #一年中季度1-4WEEK(expr)          #一年中的周數0-52YEAR(expr)     #年份HOUR(expr)     #小時0-23MINUTE(expr)     #分鐘0-59SECOND(expr)          #秒0-59PERIOD_ADD(expr1, expr2)     #增加N個月,expr1為日期文字,expr2為增加的時間(與expr1最小單位一樣)PERIOD_DIFF(expr1, expr2)     #兩個最小單位相同的日期文字比較DATE_ADD(expr1, INTERVAL expr2 date_type)     #增加以date_type為單位的expr2個時間間隔DATE_SUB(expr1, INTERVAL expr2 date_type)     #減少以date_type為單位的expr2個時間間隔 DATA_FROMAT(expr1, format)     #將expr1表示的時間以format格式輸出,其中format的相關字元含義如下:%W 星期名字(Sunday……Saturday)%D 有英語首碼的月份的日期(1st, 2nd, 3rd, 等等。)%Y 年, 數字, 4 位%y 年, 數字, 2 位%a 縮寫的星期名字(Sun……Sat)%d 月份中的天數, 數字(00……31)%e 月份中的天數, 數字(0……31)%m 月, 數字(01……12)%c 月, 數字(1……12)%b 縮寫的月份名字(Jan……Dec)%j 一年中的天數(001……366)%H 小時(00……23)%k 小時(0……23)%h 小時(01……12)%I 小時(01……12)%l 小時(1……12)%i 分鐘, 數字(00……59)%r 時間,12 小時(hh:mm:ss [AP]M)%T 時間,24 小時(hh:mm:ss)%S 秒(00……59)%s 秒(00……59)%p AM或PM%w 一個星期中的天數(0=Sunday ……6=Saturday )%U 星期(0……52), 這裡星期天是星期的第一天%u 星期(0……52), 這裡星期一是星期的第一天%% 一個文字“%”。   資料庫的增、刪、查mysql> create database DBNAME;     #建立資料庫mysql> use DBNAME;     #串連資料庫mysql> select database();     #查看當前串連的資料庫mysql> show databases;     #查看所有的資料庫mysql> drop database DBNAME;     #刪除資料庫   表的增、刪、查、改mysql> drop table if exists TABLENAME; create table if not exists TABLENAME (KEY1 varchar(128) TYPENAME1, KEY2 TYPENAME2, ....); #建表mysql> show tables;     #查看當前串連資料庫中所有的表名mysql> desc TABLENAME;     #查看錶結構mysql> rename table TABLENAME_OLD to TABLENAME_NEW;     #表的重新命名mysql> drop table TABLENAME;     #刪除表mysql> alter table TABLENAME add KEY TYPENAME;     #表中增加一列mysql> alter table TABLENAME modify column KEY1 TYPENAME1 [(befor | after) KEY2] ;     #修改欄位類型mysql> alter table TABLENAME drop KEY;     #刪除表的一個欄位mysql> insert into TABLENAME [(KEY1, KEY2, ....)] values(VALUE1, VALUE2, ....);     #表中插入資料mysql> select KEY1, KEY2, ... from TABLENAME where EXPRESSION;     #查詢表中資料mysql> delete from TABLENAME where EXPRESSION;     #刪除表中資料mysql> update TABLENAME set KEY1=VALUE1, KEY2=VALUE2, .... where EXPRESSION;     #更新表中資料註:由於mysql中不支援datetime欄位設定預設值,所以只能採用timestamp,但是timestamp只能到2038年  表查詢的進階用法 謂詞:ALL(合格全部)、DISTINCT(相同欄位資料只返回一條)、DISTINCTROW(相同記錄只返回一條)、TOP(頭尾的若干記錄,當使用百分比的時候,為TOP N PERCENT,N為數字)、AS(為結果欄位取別名,AS前面是原名、後面為別名)  比較符:= #等於      > #大於      < #小於      >= #大於等於<= #小於等於     <> #不等於      !> #不大於      !< #不小於     NOT #用於比較運算式前表示相反  模式比對(必須在LIKE之後):%     #替代一個或者多個字元-     #僅替代一個字元[charlist]     #字元列中任何單一字元[^charlist]     #不在字元列中的任何單一字元 [NOT] BETWEEN ... AND .. #指定要搜尋的閉區間[之外]的範圍[NOT] IN     #用於[不]匹配列表中的任何一個值ORDER BY KEY1 (ASC|DESC), KEY2 (ASC|DESC) ...    #將結果以KEY的(升/降)序排列,預設是ASC... AND ...     #同時滿足兩個條件GROUP BY KEY1, KEY2... [HAVING CONDITION]     #以KEY1、KEY2等進行分組,HAVING 調用一些聚集合函式來過濾分組的查詢結果  聚集合函式:SUM(KEY)     #求和AVG(KEY)     #求均值COUNT(KEY)     #計數COUNT(*)     #所有記錄計數MAX(KEY)          #最大值MIN(KEY)          #最小值VAR(KEY)          #方差STDEV(KEY)     #標準差FIRST(KEY)     #第一個LAST(KEY)     #最後一個CONCAT(KEY1, KEY2, ...)     #將keys串連起來成為字串 #將查詢結果寫入到另一個表TABLENAME1中mysql> select KEY1, KEY2, ... into TABLENAME1 from TABLENAME2 where EXPRESSION; #將從TABLENAME1、TABLENAME2兩個表中的查詢資料合併展示mysql> select KEY1, KEY2, ... from TABLENAME1 where EXPRESSION1 union select KEY3, KEY4, .. from TABLENAME2 where EXPRESSION2; #TABLENAME1表中key3大於子查詢結果的記錄mysql> select KEY1, KEY2, ... from TABLENAME1 where KEY3 (>|=|<|<>) (ANY|ALL|SOME) (select KEY3 from TABLENAME2 where EXPRESSION); #TABLENAME1表中key3[不]屬於子查詢結果清單中的記錄mysql> select KEY1, KEY2, ... from TABLENAME1 where KEY3 [NOT] IN (select KEY3 from TABLENAME2 where EXPRESSION); #根據子查詢的結果來決定是否執行從TABLENAME1表中進行查詢mysql> select KEY1, KEY2, ... from TABLENAME1 where exists (select KEY3 from TABLENAME2 where EXPRESSION);   查詢(刪除)5min之前的內容select * from email_info where minute(now() - c_time) > 5;  該方法如果跨整點就會有問題select * from email_info where timestampdiff(minute, c_time, now()) > 5;delete from email_info where  timestampdiff(minute, c_time, now()) > 5;註:minute是將時間轉換成分鐘的函數,類似的還有year、dayofyear、month、monthname、dayofmonth、week、weekday、dayname、hour、minute、second等  索引、視圖、觸發器、預存程序、遊標、事務  視圖是虛擬表,相當於一個sql語句的別名,特定情況下可以對視圖進行增、刪、改操作,前提是:沒有group by分組、沒有union串連、沒有子查詢、沒有並、沒有聚集合函式、沒有DISTINCT、匯出(計算)列 索引、視圖的增、刪、改mysql> create index INDEX_NAME on TABLENAME(KEY);     #建立索引mysql> show index from TABLENAME;     #查詢索引mysql> drop index INDEX_NAME;     #刪除索引 mysql> create view VIEW_NAME(KEY1, KEY2, ...) as select KEY3, KEY4 from TABLENAME;     #建立視圖mysql> drop view VIEW_NAME;     #刪除視圖  預存程序簡單來說,就是為以後的使用而儲存的一條或多條MySQL語句的集合。可將其視為批檔案,雖然它們的作用不僅限於批處理。預存程序3個主要的好處:簡單、安全、高效能。 預存程序的建立、刪除、調用#建立一個預存程序PROC_NAME, 其中DELIMITER//告訴命令列公用程式使用//作為新的語句結束符,可以看到表示預存程序結束的END定義END//而不是END;作為語句結束。最後使用DELIMITER; 恢複原來的語句結束符,因為mysql中;預設為結束符,為了預存程序正常使用,所以需要替換procedure中的預存程序。#參數中的IN/OUT表示參數是傳入的還是輸出的,參數是無類型的,可以是一個簡單變數,也可以是一個表名(此時可以直接select @arg來查詢結果),通常預存程序使用select ... into ... 語句將結果儲存到輸出變數中 delimiter //create procedure PROC_NAME([IN/OUT] ARG1 TYPENAME, [IN/OUT]ARG2 TYPENAME, ...)BEGIN     SQL_SENTENCES;END//delimiter ; mysql> call PROC_NAME(@arg1, @arg2, ...);     #調用預存程序,mysql中變數前面需要加@mysql> drop procedure PROC_NAME if exists;     #刪除預存程序mysql> show create procedure PROC_NAME;          #查看建立預存程序的sql語句mysql> show procedure status like ‘EXP‘;     #查看預存程序的相關資訊  遊標是一個儲存在MySQL伺服器上的資料庫查詢,它不是一條SELECT語句,而是被該語句檢索出來的結構集。在儲存了遊標之後,應用程式可以根據需要滾動或瀏覽或更改其中的資料。遊標使用步驟:
  1. 使用前需要先聲明
  2. 使用時必須開啟遊標(執行相關的sql查詢語句),遊標開啟後使用FETCH語句分別訪問每一行、FETCH指定檢索什麼資料、儲存在何地,同時會將遊標指向下一行(即下一條FETCH就會檢索下一行)
  3. 根據需要行資料,使用完畢後必須關閉
declare CURSOR_NAME cursor for select KEY1, KEY2, ... from TABLENAME;     #聲明一個遊標open CURSOR_NAME;     #開啟遊標FETCH CURSOR_NAME into TABLENAME2;     #將遊標擷取的一行記錄存到資料表中。close CURSOR_NAME;      #關閉遊標  觸發器是MySQL響應INSERT、UPDATE、DELETE三個中的任意一個語句而自動執行的一條sql語句。觸發器建立條件:名稱唯一、有具體表關聯(視圖、暫存資料表不行)、與相關的操作(INSERT/UPDATE/DELETE)關聯響應、在關聯語句執行前/後執行。 觸發器的建立、刪除mysql> create trigger TRI_NAME (before/after) (INSERT/UPDATE/DELETE) on TABLENAME for each row BEGIN SQL_SENTENSE END;mysql> drop trigger TRI_NAME;   交易處理可以用來維護資料庫的完整性,它保證成批的mysql操作要麼完全執行,要麼完全不執行。管理交易處理的關鍵在於將sql語句組分解成邏輯快,並明確規定資料何時應該回退、何時不回退。 start transaction 表示事務的開始。 事務的建立start transaction;     #事務開始SQL_SENTENCE1;SQL_SENTENCE2;...(commit/rollback);     #事務提交/復原#註:通常情況下是判斷上一條sql語句的執行結果,如果執行失敗,則執行rollback進行復原操作,若事務中所有的sql語句成功執行,則執行commit將更改實際寫到資料庫中。  資料匯入、匯出   匯入txt格式的資料mysql> load data local infile ‘FILENAME.txt‘ into table TABLENAME; #註:txt中各欄位用tab分隔   匯入sql格式的資料庫 (註:這裡的sql檔案是包含建表語句和表中資料) mysql> use DBNAME; source FILENAME.sql     #方法一 $ mysqldump -u USERNAME -p DBNAME <FILENAME.sql  #方法二 $ mysql -u USERNAME -p -D DBNAME <FILENAME.sql     #方法三  匯出整個資料庫中所有的表結構$ mysqldump -uUSERNAME -p [-hIP_ADDR] DBNAME>FILENAME.sql #包含建表語句以及插入資料的insert語句$ mysqldump -uUSERNAME -p -d [-hIP_ADDR] DBNAME >FILENAME.sql #僅包含建表語句$ mysqldump -uUSERNAME -p [-hIP_ADDR] --no-create-info DBNAME>FILENAME.sql #僅包含插入資料的insert$ mysqldump -uUSERNAME -p [-hIP_ADDR] DBNAME TABLENAME >FILENAME.sql #匯出一張表的全部內容

mysql 學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.