溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MYSQL基礎(chǔ)語(yǔ)法示例

發(fā)布時(shí)間:2020-12-03 11:13:21 來(lái)源:億速云 閱讀:170 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

小編給大家分享一下MYSQL基礎(chǔ)語(yǔ)法示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

用戶(hù)管理

新建用戶(hù)及密碼:foo為名,123為密碼,locahost為固定地址登錄

# 以下為兩種創(chuàng)建方式
CREATE USER foo@localhost IDENTIFIED BY ‘123’ 
insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
#只要更改了用戶(hù)及密碼
flush privileges

設(shè)置及更改用戶(hù)密碼:

#以下為三種更改方式
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword')
#若果是當(dāng)前登錄用戶(hù)
SET PASSWORD = PASSWORD('newpassword')
update mysql.user set password=password('newpassword') where User='username' and Host='host'
#只要更改了用戶(hù)及密碼
flush privileges

刪除用戶(hù):

Delete FROM user Where User='test' and Host='localhost';
flush privileges;
# 刪除用戶(hù)的數(shù)據(jù)庫(kù)
drop database testDB; 
# 刪除賬戶(hù)及權(quán)限
drop user 用戶(hù)名@ localhost;

授權(quán):

GRANT INSERT,DELETE,UPDATE,SELECT ON databasename.tablename TO 'username'
@'host'
flush privileges

說(shuō)明:

(1)privileges-用戶(hù)的操作權(quán)限,如SELECT , INSERT , UPDATE  
(2)databasename - 數(shù)據(jù)庫(kù)名,tablename-表名,如果要授予該用戶(hù)對(duì)所有數(shù)據(jù)庫(kù)和表的相應(yīng)操作權(quán)限則可用表示, 如.*
(3)新設(shè)置用戶(hù)或更改密碼后需用flush privileges刷新MySQL的系統(tǒng)權(quán)限相關(guān)表,否則會(huì)出現(xiàn)拒絕訪(fǎng)問(wèn),還有一種方法,就是重新啟動(dòng)mysql服務(wù)器,來(lái)使新設(shè)置生效

查看權(quán)限:

show grants for root@localhost;
  • 去除權(quán)限:

# GRANT的反操作,去除權(quán)限
 REVOKE SELECT ON db_name.* TO name;

登錄遠(yuǎn)程MySQL(ubuntu): mysql -h  <遠(yuǎn)程ip> -P 遠(yuǎn)程端口 -u 用戶(hù)- p 密碼

# 需遠(yuǎn)程ip和端口:10.10.101.111:30061  遠(yuǎn)程mysql的用戶(hù)及密碼
mysql -h 10.10.101.111 -P 30061 -u root -p 123456

MYSQL數(shù)據(jù)類(lèi)型

數(shù)據(jù)庫(kù)

  • 查看數(shù)據(jù)庫(kù):SHOW DATABASES;

  • 創(chuàng)建數(shù)據(jù)庫(kù): CREATE DATABASES db_name;

  • 使用數(shù)據(jù)庫(kù): USE db_name;

  • 刪除數(shù)據(jù)庫(kù): DROP DATABASE db_name;

  • 設(shè)置數(shù)據(jù)庫(kù)編碼: set names utf8;

創(chuàng)建表:
CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(60) NOT NULL,
score TINYINT UNSIGNED NOT NULL DEFAULT 0,PRIMARY KEY(id)
)ENGINE=InnoDB;//設(shè)置表的存儲(chǔ)引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事務(wù);MyISAM高效不支持全文檢索
  • 設(shè)置表編碼:create table name (…) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 復(fù)制表:CREATE TABLE tb_name2 SELECT * FROM tb_name

  • 部分復(fù)制: CREATE TABLE tb_names SELECT id,name FROM tb_namr;

  • 創(chuàng)建臨時(shí)表:CREATE TEMPORARY TABLE tb_name;
    臨時(shí)表:客戶(hù)端與服務(wù)器會(huì)話(huà)中使用處理特定事務(wù),節(jié)省空間、私密性

  • 查看數(shù)據(jù)庫(kù)中可用表: SHOW TABLES;

  • 查看表結(jié)構(gòu): DESCRIBE tb_name; 或者 SHOW COLUMNS FROM tb_name;

  • 刪除表: DROP  [ TEMPORARY ] TABLE [ IF EXISTS ] tb_name[ ,tb_name2…….];

DROP TABLE IF EXISTS `db_school`,`Student`;
  • 表別名: SELECT a.title,a.content,u.username FROM article AS a, user AS u where a.aid=1 and a.uid=u.uid

  • 表重命名:RENAME TABLE name_old TO name_new; 或ALTER TABLE name_old RENAME name_new;

  • 更改表結(jié)構(gòu):ALTER TABLE tb_name ADD[CHANGE、RENAME、DROP]

ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
ALTER TABLE tb_name DROP address;
ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;
數(shù)據(jù)
  • 插入數(shù)據(jù):
    INSERT INTO tb_name(id,name,score) VALUES(NULL,’張三’,140),(NULL,’張四’,178),(NULL,’張五’,134);
    注意: 插入多條數(shù)據(jù)直接后面加上逗號(hào)

  • 插入檢索出來(lái)的數(shù)據(jù):
    INSERT INTO tb_name(name,score) SELECT name score FROM tb_name2;

  • 更新數(shù)據(jù)
    UPDATE tb_name SET score=180 WHERE id=2;
    UPDATE tablename SET columnName=NewValue[WHERE condition]

  • 刪除數(shù)據(jù):
    DELETE FROM tb_name WHERE id=3;

條件控制

where語(yǔ)句:

SELECT * FROM tb_name WHERE id=3;

Group by  
Group by解釋
GROUP BY 與WHERE聯(lián)合查詢(xún):
select 列a,聚合函數(shù) from 表名 where 過(guò)濾條件 group by 列a having 過(guò)濾條件
當(dāng)結(jié)合在一起時(shí),where在前,group by 在后。即先對(duì)select xx from xx的記錄集合用where進(jìn)行篩選,然后再使用group by 對(duì)篩選后的結(jié)果進(jìn)行分組 使用having字句對(duì)分組后的結(jié)果進(jìn)行篩選

HAVING語(yǔ)句:

SELECT * FROM tb_name GROUP BY score HAVING count(*)>2;

Having用法

*以上三者實(shí)踐

轉(zhuǎn)載: mysql group by 用法解析(詳細(xì))

相關(guān)條件控制符:

 =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT
 AND 、OR
 Like()用法中      %  為匹配任意、  _  匹配一個(gè)字符(可以是漢字)
 IS NULL 空值檢測(cè) IS NOT NULL 
 IN   NOT IN  // 
 limit [offset,] N #如果給定兩個(gè)參數(shù),第一個(gè)參數(shù)指定第一個(gè)返回記錄行的偏移量,第二個(gè)參數(shù)指定返回記錄行的最大數(shù)目。初始記錄行的偏移量是 0(而不是 1) : SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15
  • 多條件查詢(xún):

SELECT * FROM tb_name 
WHERE id=1003 AND price<=10 
# WHERE id=1003 OR price<=10 
# WHERE id IN(1002,1003)
# WHERE id NOT IN(1002,1003)
# WHERE name like '%huxx'
  • 分組查詢(xún):分組查詢(xún)可以按照指定的列進(jìn)行分組
    SELECT COUNT() FROM tb_name GROUP BY score HAVING COUNT()>1 ;
    注意:以上條件用HAVING,GROUP BY 按列排序

  • 排序: ORDER BY column_name DESC|ASC; //按數(shù)據(jù)的降序和升序排列

 SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;

MySQL常見(jiàn)運(yùn)算符

正則表達(dá)式
SELECT * FROM tb_name WHERE REGEXP ‘^[A-D]’;
解釋?zhuān)菏褂谩癪”匹配名字的開(kāi)始,找出以A-D為開(kāi)頭的name
* 正則表達(dá)式實(shí)踐:
參考博客:MYSQL使用正則表達(dá)式過(guò)濾數(shù)據(jù)

子查詢(xún)

where型子查詢(xún):(把內(nèi)層查詢(xún)結(jié)果當(dāng)作外層查詢(xún)的比較條件)

#不用order by 來(lái)查詢(xún)最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
#取出每個(gè)欄目下最新的產(chǎn)品(goods_id唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);
  • from型子查詢(xún): (把內(nèi)層的查詢(xún)結(jié)果供外層再次查詢(xún))

#先查出哪些同學(xué)掛科兩門(mén)以上
select name,count(*) as gk from stu where score < 60 having gk >=2;
#以上查詢(xún)結(jié)果,我們只要名字就可以了,所以再取一次名字
select name from (select name,count(*) as gk from stu having gk >=2) as t;
#找出這些同學(xué)了,那么再計(jì)算他們的平均分
select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk >=2) as t) group by name;
  • exists型子查詢(xún):(把外層查詢(xún)結(jié)果拿到內(nèi)層,看內(nèi)層的查詢(xún)是否成立)

#查詢(xún)哪些欄目下有商品,欄目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);

MySQL函數(shù)

  • distinct : 去重  Select  player_id,distinct(task_id) from task;
    distinct去除重復(fù)樣本(多個(gè)字段)

  • select distinct Student.Sno,Sname from Student (另一種方式)

  • 字符串連接——CONCAT()
    SELECT CONCAT(name,”==>”,score) FRON tb_name;

  • 數(shù)學(xué)函數(shù):
    AVG、SUM、MAX、MIN、COUNT

  • 文本處理函數(shù):
    TRIM、LOCATE、UPPER、LOWER、SUNSTRING

  • 運(yùn)算符:
    +、-、*、\

  • 時(shí)間函數(shù):
    DATE()、CURTIME()、DAY()、YEAR()、NOW()…..

JOIN詳解

join 用于多表中字段之間的聯(lián)系

... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona

JOIN 按照功能大致分為如下三類(lèi):
* INNER JOIN(內(nèi)連接,或等值連接):取得兩個(gè)表中存在連接匹配關(guān)系的記錄
* LEFT JOIN(左連接):取得左表(table1)完全記錄,即是右表(table2)并無(wú)對(duì)應(yīng)匹配記錄
* RIGHT JOIN(右連接):與 LEFT JOIN 相反,取得右表(table2)完全記錄,即是左表(table1)并無(wú)匹配對(duì)應(yīng)記錄

注意:mysql不支持Full join,不過(guò)可以通過(guò)UNION 關(guān)鍵字來(lái)合并 LEFT JOIN 與 RIGHT JOIN來(lái)模擬FULL join.
具體參考博客Mysql Join語(yǔ)法解析與性能分析

UNION規(guī)則

UNION 用于把來(lái)自多個(gè) SELECT 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中:在多個(gè) SELECT 語(yǔ)句中,對(duì)應(yīng)的列應(yīng)該具有相同的字段屬性

SELECT column,... FROM table1  UNION [ALL] SELECT column,... FROM table2 ...
  • UNION 與 UNION ALL 的區(qū)別:  
    使用 UNION 時(shí),MySQL 會(huì)把結(jié)果集中重復(fù)的記錄刪掉,而使用 UNION ALL ,MySQL 會(huì)把所有的記錄返回,且效率高于 UNION
    具體參考博客MySQL UNION 與 UNION ALL 語(yǔ)法與用法

視圖

視圖是從一個(gè)或多個(gè)表中導(dǎo)出來(lái)的表,是一種虛擬存在的表。數(shù)據(jù)庫(kù)中只存放了視圖的定義,而沒(méi)有存放視圖中的數(shù)據(jù),這些數(shù)據(jù)存放在原來(lái)的表中。
背景:安全性、查詢(xún)性能提高
- 使操作簡(jiǎn)單化,可以對(duì)經(jīng)常使用的查詢(xún)定義一個(gè)視圖,使用戶(hù)不必為同樣的查詢(xún)操作指定條件
- 增加數(shù)據(jù)的安全性,通過(guò)視圖,用戶(hù)只能查詢(xún)和修改指定的數(shù)據(jù)。
- 節(jié)省空間,內(nèi)容是總是一致的話(huà),那么我們不需要維護(hù)視圖的內(nèi)容,維護(hù)好真實(shí)表的內(nèi)容,就可以保證視圖的完整性了
- 提高表的邏輯獨(dú)立性,視圖可以屏蔽原有表結(jié)構(gòu)變化帶來(lái)的影響
工作機(jī)制:當(dāng)調(diào)用視圖的時(shí)候,才會(huì)執(zhí)行視圖中的sql,進(jìn)行取數(shù)據(jù)操作。視圖的內(nèi)容沒(méi)有存儲(chǔ),而是在視圖被引用的時(shí)候才派生出數(shù)據(jù)。這樣不會(huì)占用空間,由于是即時(shí)引用,視圖的內(nèi)容總是與真實(shí)表的內(nèi)容是一致的。更新視圖可以更新真實(shí)表。
視圖與數(shù)據(jù)庫(kù):

視圖中的數(shù)據(jù)依賴(lài)于原來(lái)表中的數(shù)據(jù),一旦表中數(shù)據(jù)發(fā)生改變,顯示在視圖中的數(shù)據(jù)也會(huì)發(fā)生改變。
視圖的建立和刪除只影響視圖本身,不影響對(duì)應(yīng)的基本表
某些視圖是可更新的。也就是說(shuō),可以在諸如UPDATE、DELETE或INSERT等語(yǔ)句中使用它們,以更新基表的內(nèi)容。對(duì)于可更新的視圖,在視圖中的行和基表中的行之間必須具有一對(duì)一的關(guān)系。還有一些特定的其他結(jié)構(gòu),這類(lèi)結(jié)構(gòu)會(huì)使得視圖不可更新。更具體地講,如果視圖包含下述結(jié)構(gòu)中的任何一種,那么它就是不可更新的。
視圖中雖然可以更新數(shù)據(jù),但是有很多的限制。一般情況下,最好將視圖作為查詢(xún)數(shù)據(jù)的虛擬表,而不要通過(guò)視圖更新數(shù)據(jù)。因?yàn)?,使用視圖更新數(shù)據(jù)時(shí),如果沒(méi)有全面考慮在視圖中更新數(shù)據(jù)的限制,就可能會(huì)造成數(shù)據(jù)更新失敗。

索引

  • 10W條數(shù)據(jù),檢索nickname=’css’

    • 一般:SELECT * FROM award WHERE nickname = ‘css’  :mysql需要掃描全表及掃描10W條數(shù)據(jù)找這條數(shù)據(jù)

    • 索引: 在nickname上建立索引,那么mysql只需要掃描一行數(shù)據(jù)

  • 索引分為單列索引(主鍵索引,唯索引,普通索引)和組合索引

    • 單列索引:一個(gè)索引只包含一個(gè)列,一個(gè)表可以有多個(gè)單列索引.

    • 組合索引:一個(gè)組合索引包含兩個(gè)或兩個(gè)以上的列

單列索引:
  • 普通索引,這個(gè)是最基本的索引
    ALTER table SC ADD INDEX Sno_Index(Sno); //注意符號(hào),不是單引號(hào)
    注意: 字段:CHAR,VARCHAR,類(lèi)型,索引:length可以小于字段的實(shí)際長(zhǎng)度,如果是BLOB和TEXT類(lèi)型就必須指定長(zhǎng)度

  • 唯一索引: 唯一索引要求所有的類(lèi)的值是唯一的,這一點(diǎn)和主鍵索引一樣.但是它允許有空值
    create UNIQUE INDEX sname ON Student(Sname);

  • 主鍵索引,不允許有空值:  
    規(guī)則:int優(yōu)于varchar,一般在建表的時(shí)候創(chuàng)建,最好是與表的其他字段不相關(guān)的列或者是業(yè)務(wù)不相關(guān)的列.一般會(huì)設(shè)為 int 而且是 AUTO_INCREMENT自增類(lèi)型的

組合索引

一個(gè)表中含有多個(gè)單列索引不代表是組合索引,通俗一點(diǎn)講 組合索引是:包含多個(gè)字段但是只有索引名稱(chēng)
創(chuàng)建:CREATE INDEX Tno_Tname_index ON Teacher(Tno,Tname);

全文索引

文本字段上(text)如果建立的是普通索引,那么只有對(duì)文本的字段內(nèi)容前面的字符進(jìn)行索引,其字符大小根據(jù)索引建立索引時(shí)申明的大小來(lái)規(guī)定.
建立: ALTER TABLE tablename ADD FULLTEXT(column1, column2)

刪除索引

DORP INDEX IndexName ON TableName

查看索引

show index from tblname;

這塊參考博客細(xì)說(shuō)mysql索引 ,寫(xiě)的很詳細(xì)。
索引原理:索引原理

存儲(chǔ)

一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)過(guò)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。當(dāng)希望在不同應(yīng)用程序或者平臺(tái)上執(zhí)行相同函數(shù)時(shí),或封裝特定功能時(shí),存儲(chǔ)過(guò)程是非常有用的。存儲(chǔ)過(guò)程類(lèi)似一個(gè)可編程函數(shù)。MySQL 中,單個(gè) Store Procedure(SP) 不是原子操作,要使整個(gè)存儲(chǔ)過(guò)程成為一個(gè)原子操作的辦法是:在存儲(chǔ)過(guò)程主體開(kāi)始部分。
注意:非事務(wù)導(dǎo)致存儲(chǔ)過(guò)程沒(méi)有原子性即過(guò)程有的成功有的失敗,變?yōu)槭聞?wù)增加原子性,即使執(zhí)行過(guò)程出錯(cuò),出錯(cuò)前的操作將不會(huì)真正執(zhí)行。http://www.cnblogs.com/fnlingnzb-learner/p/6861376.html

優(yōu)點(diǎn)
1. 執(zhí)行速度快:存儲(chǔ)過(guò)程會(huì)預(yù)編譯,查詢(xún)優(yōu)化器會(huì)對(duì)其優(yōu)化。
2. 可多次調(diào)用及修改
3. 功能靈活:可用流程控制語(yǔ)句編寫(xiě),完成復(fù)雜運(yùn)算
4. 安全:設(shè)置存儲(chǔ)過(guò)程權(quán)限,保證數(shù)據(jù)安全
5. 減少流量:調(diào)用存儲(chǔ)過(guò)程時(shí),網(wǎng)絡(luò)只傳輸此調(diào)用語(yǔ)句即可

語(yǔ)法
  • 結(jié)構(gòu):
    CREATE PROCEDURE  過(guò)程名([[IN|OUT|INOUT] 參數(shù)名 數(shù)據(jù)類(lèi)型[,[IN|OUT|INOUT] 參數(shù)名 數(shù)據(jù)類(lèi)型…]]) [特性 …] 過(guò)程體

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //DELIMITER ;

解釋?zhuān)? 
(1)分隔符:mysql默認(rèn)“;”,“DELIMITER //”聲明分隔符 ,最后“DELIMITER ;”還原分隔符
(2)參數(shù):輸入、輸出、輸入輸出參數(shù){IN,OUT,INOUT} 具體參考mysql存儲(chǔ)

  • 變量

    1. DECLARE局部變量: DECLARE var_name[,…] type [DEFAULT value]  
      要給變量提供一個(gè)默認(rèn)值,請(qǐng)包含一個(gè)DEFAULT子句。值可以被指定為一個(gè)表達(dá)式,不需要為一個(gè)常數(shù)。如果沒(méi)有DEFAULT子句,初始值為NULL。 局部變量的作用范圍在它被聲明的BEGIN … END塊內(nèi)

    2. 變量SET語(yǔ)句:SET var_name = expr [, var_name = expr]
      被參考變量可能是子程序內(nèi)聲明的變量,或者是全局服務(wù)器變量

    3. SELECT … INTO 語(yǔ)句:SELECT col_name[,…] INTO var_name[,…] table_expr
      把選定的列直接存儲(chǔ)到變量

  • 基本常用函數(shù):參考博客:Mysql存儲(chǔ)過(guò)程

字符串類(lèi):默認(rèn)第一個(gè)字符下標(biāo)為1,即參數(shù)position必須大于等于1

CHARSET(str) //返回字串字符集 
CONCAT (string2 [,... ]) //連接字串 
INSTR (string ,substring ) //返回substring首次在string中出現(xiàn)的位置,不存在返回0 
LCASE (string2 ) //轉(zhuǎn)換成小寫(xiě) 
LEFT (string2 ,length ) //從string2中的左邊起取length個(gè)字符 
LENGTH (string ) //string長(zhǎng)度 
LOAD_FILE (file_name ) //從文件讀取內(nèi)容 
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定開(kāi)始位置 
LPAD (string2 ,length ,pad ) //重復(fù)用pad加在string開(kāi)頭,直到字串長(zhǎng)度為length 
LTRIM (string2 ) //去除前端空格 
REPEAT (string2 ,count ) //重復(fù)count次 
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替換search_str 
RPAD (string2 ,length ,pad) //在str后用pad補(bǔ)充,直到長(zhǎng)度為length 
RTRIM (string2 ) //去除后端空格 
STRCMP (string1 ,string2 ) //逐字符比較兩字串大小, 
SUBSTRING (str , position [,length ]) //從str的position開(kāi)始,取length個(gè)字符, 
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符 
UCASE (string2 ) //轉(zhuǎn)換成大寫(xiě) 
RIGHT(string2,length) //取string2最后length個(gè)字符 
SPACE(count) //生成count個(gè)空格

數(shù)學(xué)類(lèi)

ABS (number2 ) //絕對(duì)值 
BIN (decimal_number ) //十進(jìn)制轉(zhuǎn)二進(jìn)制 
CEILING (number2 ) //向上取整 
CONV(number2,from_base,to_base) //進(jìn)制轉(zhuǎn)換 
FLOOR (number2 ) //向下取整 
FORMAT (number,decimal_places ) //保留小數(shù)位數(shù) 
HEX (DecimalNumber ) //轉(zhuǎn)十六進(jìn)制 
注:HEX()中可傳入字符串,則返回其ASC-11碼,如HEX('DEF')返回4142143 
也可以傳入十進(jìn)制整數(shù),返回其十六進(jìn)制編碼,如HEX(25)返回19 
LEAST (number , number2 [,..]) //求最小值 
MOD (numerator ,denominator ) //求余 
POWER (number ,power ) //求指數(shù) 
RAND([seed]) //隨機(jī)數(shù) 
ROUND (number [,decimals ]) //四舍五入,decimals為小數(shù)位數(shù)] 
注:返回類(lèi)型并非均為整數(shù),如下文: 
SIGN (number2 ) //

日期時(shí)間類(lèi)

ADDTIME (date2 ,time_interval ) //將time_interval加到date2 
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //轉(zhuǎn)換時(shí)區(qū) 
CURRENT_DATE ( ) //當(dāng)前日期 
CURRENT_TIME ( ) //當(dāng)前時(shí)間 
CURRENT_TIMESTAMP ( ) //當(dāng)前時(shí)間戳 
DATE (datetime ) //返回datetime的日期部分 
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或時(shí)間 
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式顯示datetime 
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上減去一個(gè)時(shí)間 
DATEDIFF (date1 ,date2 ) //兩個(gè)日期差 
DAY (date ) //返回日期的天 
DAYNAME (date ) //英文星期 
DAYOFWEEK (date ) //星期(1-7) ,1為星期天 
DAYOFYEAR (date ) //一年中的第幾天 
EXTRACT (interval_name FROM date ) //從date中提取日期的指定部分 
MAKEDATE (year ,day ) //給出年及年中的第幾天,生成日期串 
MAKETIME (hour ,minute ,second ) //生成時(shí)間串 
MONTHNAME (date ) //英文月份名 
NOW ( ) //當(dāng)前時(shí)間 
SEC_TO_TIME (seconds ) //秒數(shù)轉(zhuǎn)成時(shí)間 
STR_TO_DATE (string ,format ) //字串轉(zhuǎn)成時(shí)間,以format格式顯示 
TIMEDIFF (datetime1 ,datetime2 ) //兩個(gè)時(shí)間差 
TIME_TO_SEC (time ) //時(shí)間轉(zhuǎn)秒數(shù)] 
WEEK (date_time [,start_of_week ]) //第幾周 
YEAR (datetime ) //年份 
DAYOFMONTH(datetime) //月的第幾天 
HOUR(datetime) //小時(shí) 
LAST_DAY(date) //date的月的最后日期 
MICROSECOND(datetime) //微秒 
MONTH(datetime) //月 
MINUTE(datetime) //分返回符號(hào),正負(fù)或0 
SQRT(number2) //開(kāi)平方

游標(biāo)

定義:游動(dòng)的標(biāo)識(shí),相對(duì)于普通的一次性查詢(xún)給出所有結(jié)果;游標(biāo)的作用就是對(duì)數(shù)據(jù)樣本中一條一條分析處理,像個(gè)指針。
使用:
1. 聲明: declare 游標(biāo)名 cursor for select_statement;
2. 打開(kāi): open 游標(biāo)名
3. 取值: fetch 游標(biāo)名 into var1,var2[,…]
4. 關(guān)閉:close 游標(biāo)名;

事務(wù)

Mysql事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。例如:當(dāng)你刪除一樣?xùn)|西時(shí),你得把它自身及所依賴(lài)的東西都要?jiǎng)h除。所有這些操作行為形成一個(gè)事務(wù)。
注意
- MYSQL中:只有Innodb數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù)
- 事務(wù)處理用來(lái)維護(hù)數(shù)據(jù)庫(kù)完整性即保證批量SQL語(yǔ)句全部執(zhí)行或者全部不執(zhí)行
- 事務(wù)用來(lái)管理insert,update,delete語(yǔ)句
事務(wù)滿(mǎn)足4個(gè)條件:
1. 事務(wù)的原子性:要么成功,要么失敗
2. 穩(wěn)定性: 有非法數(shù)據(jù),事務(wù)撤回
3. 隔離性: 事務(wù)獨(dú)立運(yùn)行
4. 可靠性:當(dāng)發(fā)生奔潰,InnoDB數(shù)據(jù)表驅(qū)動(dòng)會(huì)利用日志文件重構(gòu)修改
參考博客事務(wù)

導(dǎo)入導(dǎo)出

  • 導(dǎo)出整個(gè)數(shù)據(jù)庫(kù):mysqldump -u 用戶(hù)名 -p 數(shù)據(jù)庫(kù)名 > 導(dǎo)出的文件名

  • 導(dǎo)出一個(gè)表: mysqldump -u 用戶(hù)名 -p 數(shù)據(jù)庫(kù)名 表名> 導(dǎo)出的文件名

  • 導(dǎo)出一個(gè)數(shù)據(jù)結(jié)構(gòu): mysqldump -u dbuser -p -d –add-drop-table dbname >d:/dbname_db.sql  (-d 沒(méi)有數(shù)據(jù) –add-drop-table 在每個(gè)create語(yǔ)句之前增加一個(gè)drop table)

  • 導(dǎo)入數(shù)據(jù)庫(kù):

use 數(shù)據(jù)庫(kù);
source d:/dbname.sql;

性能優(yōu)化

查詢(xún)實(shí)例

數(shù)據(jù)庫(kù)題:學(xué)生表,選課表,課程表 設(shè)教學(xué)數(shù)據(jù)庫(kù)中有三個(gè)基本表:
學(xué)生表 Student(Sno,Sname,Age,Sex),其屬性表示學(xué)生的學(xué)號(hào)、姓名、年齡和性別;
選課表 SC(Sno,Cno,score),其屬性表示學(xué)生的學(xué)號(hào)、所學(xué)課程的課程號(hào)和成績(jī);
課程表 Course(Cno,Cname,Tho),其屬性表示課程號(hào)、課程名稱(chēng)和任課教師姓名;
教師表 Teacher (Tno,Tname),其屬性表示教師號(hào)、教師名稱(chēng);
下面的題目都是針對(duì)上述三個(gè)基本表操作的。
*導(dǎo)入sql文件:source  course.sql;  sql文件編碼格式:無(wú)BOM的UTF-8

drop database IF EXISTS db_school;
CREATE database db_school;
use db_school;
DROP TABLE IF EXISTS `db_school`.`Student`; 
create table Student  
(  
    Sno varchar(20),  
    Sname varchar(50), 
    Age smallint,
    Sex varchar(5),
    primary key (Sno)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

DROP TABLE IF EXISTS `db_school`.`Course`;  
create table Course  
(  
    Cno varchar(20),  
    Cname varchar(50),    
    Tno varchar(20),  
    primary key (Cno)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
DROP TABLE IF EXISTS `db_school`.`SC`;  
create table SC  
(  
    Sno varchar(20),  
    Cno varchar(20),      
    score int,  
    primary key (Sno,Cno)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

DROP TABLE IF EXISTS `db_school`.`Teacher`;  
create table Teacher  
(  
    Tno varchar(20),  
    Tname varchar(50),    
    primary key (Tno)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ('001','陳一',25,'nan');  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ('002','郭二',20,'nv');  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ('003','張三',25,'nv');  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ('004','李四',22,'nan');  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ('005','王五',23,'nan');  
INSERT INTO `Teacher`(Tno,Tname) VALUES ('001','張老師');  
INSERT INTO `Teacher`(Tno,Tname) VALUES ('002','王老師');  
INSERT INTO `Teacher`(Tno,Tname) VALUES ('003','錢(qián)老師');  
INSERT INTO `Teacher`(Tno,Tname) VALUES ('004','劉老師');  
INSERT INTO `Teacher`(Tno,Tname) VALUES ('005','胡老師');  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ('001','語(yǔ)文','張老師');  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ('002','數(shù)學(xué)','王老師');  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ('003','英語(yǔ)','錢(qián)老師');  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ('004','物理','劉老師');  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ('005','政治','胡老師');  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('001','001',50);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('001','002',60);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('001','003',70);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('001','004',80);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('001','005',90);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('002','001',90);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('002','002',80);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('002','003',70);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('002','004',60);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('002','005',50);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('003','001',81);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('003','002',82);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('003','003',83);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('003','004',84);  
INSERT INTO `SC`(Sno,Cno,score) VALUES ('003','005',85);
  • 寫(xiě)出檢索全是女同學(xué)選修的課程的課程號(hào)的SQL語(yǔ)句。

select Cno  from Student,SC where Student.Sno=SC.Sno AND Student.Sex='nv';
  • 寫(xiě)出下列插入操作的SQL語(yǔ)句:把SC表中每門(mén)課程的平均成績(jī)插入到另一個(gè)已存在的表SC_C(C#,CNAME, AVG_GRADE)中,其中 AVG_GRADE 為每門(mén)課程的平均成績(jī)。

# 先創(chuàng)建SC_C表,自行創(chuàng)建insert into SC_C select SC.Cno,Cname,AVG(score) AS Avg_score FROM Course,SC WHERE Course.Cno=SC.Cno GROUP BY SC.Cno;
  • 試寫(xiě)出下列刪除操作的SQL語(yǔ)句:從SC表中把王老師的女學(xué)生選課元組刪去。

delete from SC where Sno in (select Sno from Student where Sex='nv') AND Cno in (select Cno from Course where Tno='王老師');
  • 查詢(xún)“001”課程比“002”課程成績(jī)高的所有學(xué)生的學(xué)號(hào);

select a.Sno from (select Sno,score FROM SC where Cno='001') AS a ,(select Sno,score FROM SC where Cno='002') AS  b  WHERE a.score > b.score;//當(dāng)兩個(gè)表存在相同列名時(shí),用tablename.columnname指定列
  • 查詢(xún)所有同學(xué)的學(xué)號(hào)、姓名、選課數(shù)、總成績(jī);

select Student.Sno,Student.Sname,count(SC.Cno),sum(SC.score) from Student left OUTER join SC on Student.Sno=SC.Sno group by Student.Sno,Student.Sname;

以上是“MYSQL基礎(chǔ)語(yǔ)法示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI