SQL(Structured Query Language)語句,即結(jié)構(gòu)化查詢語言,是操作和檢索關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。SQL語句一般分為以下幾種:
注:SQL語句不區(qū)分大小寫,所以create和CREATE是相同的
一.DCL語句
DCL語句就是對(duì)用戶進(jìn)行授權(quán)和授權(quán)收回的操作,可以對(duì)不同的用戶的權(quán)限進(jìn)行控制,增加數(shù)據(jù)庫安全性,進(jìn)行數(shù)據(jù)庫的維護(hù)。一般都是數(shù)據(jù)庫管理員使用超級(jí)用戶root進(jìn)行操作。
MySQL的權(quán)限命令是grant,權(quán)限撤銷的命令時(shí)revoke;
1.grant授權(quán)格式:
grant 權(quán)限列表 on 庫.表 to 用戶名@'ip' identified by "密碼";
2.revoke回收權(quán)限格式:
revoke 權(quán)限列表 on 庫.表 from 用戶名@'ip';
二.DDL語句
數(shù)據(jù)庫對(duì)象:
表(table)、數(shù)據(jù)字典、約束(constraint)、視圖(view)、索引(index)、函數(shù)(function)、存儲(chǔ)過程(procedure)、觸發(fā)器(trigger)
CREATE、ALTER、DELETE關(guān)鍵字分別是創(chuàng)建、修改和刪除數(shù)據(jù)庫對(duì)象的,此處使用我們使用最多的對(duì)表的操作來舉例
1.CREATE:
CREATE TABLE [模式名.] 表名(
該表中的列定義
);
e.g.
CREATE TABLE test(StuId VARCHAR(8) PRIMARY KEY,StuName VARCHAR(30) NOT NULL,StuAge SMALLINT NOT NULL,StuBirth DATETIME);
注:查看表結(jié)構(gòu):DESCRIBE 表名;
2.ALTER:
1)添加列:
ALTER TABLE 表名
ADD column columnName1 datatype [default expr] [FIRST|AFTER colName];
columnName1:新添加的列名;
datatype:數(shù)據(jù)類型;
default expr:完整性約束;
FIRST|AFTER colName:插入位置,默認(rèn)是插入在最后一列,F(xiàn)IRST是在第一列,AFTER colName是在指定列后插入
e.g.
ALTER TABLE testADD column StuMajor VARCHAR(20) NOT NULL AFTER StuName;
2)修改列
ALTER TABLE 表名 CHANGE oldName newName datatype;
e.g.
ALTER TABLE test CHANGE StuBirth Birthday year;
3)刪除列
ALTER TABLE 表名 DROP column columnName;
e.g.
ALTER TABLE test DROP column StuMajor;
4)修改表名
ALTER TABEL 表名 RENAME TO 新表名;
e.g.
ALTER TABLE test RENAME TO student;
3.DROP
刪除表
DROP TABLE 表名;
e.g.
DROP TABLE student;
4.TRUNCATE
刪除表內(nèi)所有數(shù)據(jù)但保留表的結(jié)構(gòu),叫做“截?cái)?rdquo;
TRUNCATE TABLE 表名;
e.g.
TRUNCATE TABLE student;
三.DML語句
1.INSERT
標(biāo)準(zhǔn)SQL語句只允許一次插入一條數(shù)據(jù),但MySQL對(duì)其進(jìn)行擴(kuò)展使其可以一次插入多條數(shù)據(jù)
插入一條數(shù)據(jù):
INSERT INTO 表名 VALUES(value1, value2, ...);
插入多條數(shù)據(jù):
INSERT INTO 表名 VALUES(value1,value2,...),(value1,value2,...),(value1,value2,...);
e.g.
INSERT INTO student VALUES(‘001','Lisa',20,1997),(‘002','Rose',21,1996);
2.UPDATE
UPDATE 表名 SET COLUMN1 = VALUE1[, COLUMN2 = VALUE2]...
[WHERE CONDITION];
e.g.將所有年齡大于20歲的學(xué)生的年齡+1
UPDATE student SET StuAge = StuAge+1 WHERE StuAge>20;
3.DELETE
DELETE FROM 表名 [WHERE CONDITION];
e.g.將所有1997年出生的學(xué)生信息刪除
DELETE FROM student WHERE Birthday = 1997;
四.查詢語句
1.單表查詢:
SELECT COLUMN1, COLUMN2...FROM 數(shù)據(jù)源[WHERE CONDITION][GROUP BY columnName][ORDER BY columnName DESC|ASC]
e.g.將計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生選出來并按照學(xué)號(hào)降序排列,只顯示學(xué)生姓名
SELECT StuName FROM student WHERE StuMajor = 'CS'ORDER BY StuId DESC;
2.多表查詢:
1)簡(jiǎn)單的外連接方式
SELECT VALUE1[,VALUE2]...FROM tableName1,tableName2WHERE tableName1.column1 = tableName2.column2[AND ...];WHERE 后跟的是連接條件和查詢條件
2)自連接:有時(shí)需要自己和自己進(jìn)行連接,叫做自連接
e.g.
有如下的表temp
CREATE TABLE emp(id INT AUTO_INCRETMENT PRIMARY KEY,name VARCAHR(255),mangerId INT,FOREIGN KEY(managerId) references temp(id));
其中有四條記錄
id name managerId
1 aaa null
2 bbb 1
3 ccc 1
4 ddd 1
對(duì)該表進(jìn)行查詢操作:
SELECT employee.id, employee.name 員工名, manager.name 經(jīng)理名FROM emp employee, emp managerWHERE employee.managerId = manager.id;
該查詢語句使用自連接顯示員工和經(jīng)理的關(guān)系,其中:
五.事務(wù)處理
1.事務(wù)是由一步或幾步數(shù)據(jù)庫操作序列組成的邏輯執(zhí)行單元。
這系列操作要么全部執(zhí)行,要么全部放棄執(zhí)行。程序和事務(wù)是完全兩種不同的概念。一般而言,一段程序中可能包含多個(gè)事務(wù)。在MySQL中,有多種引擎,最常用的兩個(gè)引擎:InnoDB和MyISAM,其中InnoDB是支持事務(wù)的,而MyISAM是不支持的,可以在config配置文件中對(duì)其進(jìn)行修改。
2.事務(wù)的四個(gè)特性:
這四個(gè)特性也叫ACID性
3.數(shù)據(jù)庫的事務(wù)由一組DML語句、一條DDL語句和一條DCL語句組成
4.事務(wù)的提交:
MySQL默認(rèn)關(guān)閉事務(wù)(自動(dòng)提交),在默認(rèn)情況下,用戶輸入一條DML語句也會(huì)提交該操作,為了開啟事務(wù)可以通過以下語句對(duì)自動(dòng)提交進(jìn)行設(shè)置
SET AUTOCOMMIT = {0|1} 0是關(guān)閉自動(dòng)提交(開啟事務(wù)),1是開啟自動(dòng)提交(關(guān)閉事務(wù))
5.事務(wù)的回滾(rollback)
事務(wù)包含的任意一個(gè)數(shù)據(jù)庫操作執(zhí)行失敗后執(zhí)行回滾事務(wù),將該事務(wù)中進(jìn)行的操作全部失效。兩種方式:
6.例子:
若只是臨時(shí)開啟一個(gè)事務(wù)可以通過:start transaction或begin開啟臨時(shí)事務(wù),在其之后的DML語句都不會(huì)立即執(zhí)行,直到出現(xiàn)事務(wù)的提交或回滾才結(jié)束事務(wù)。
e.g.1
BEGIN;INSERT INTO student VALUES(NULL,'001','aaa');INSERT INTO student VALUES(NULL,'002','bbb');INSERT INTO student VALUES(NULL,'003','ccc');SELECT * FROM student; ①ROLLBACK;SELECT * FROM student; ②
①語句查詢的結(jié)果中包含插入的數(shù)據(jù),但如果此時(shí)在別的命令行窗口中執(zhí)行該語句,也不會(huì)看到以上的三條數(shù)據(jù),體現(xiàn)了事務(wù)的隔離性,這三條數(shù)據(jù)其實(shí)并沒有寫入物理數(shù)據(jù)庫;
在執(zhí)行了回滾操作后,在②的查詢語句的結(jié)果中看不到begin之后的那三條數(shù)據(jù)
e.g.2
INSERT INTO student VALUES(NULL,'001','aaa');INSERT INTO student VALUES(NULL,'002','bbb');SAVEPOINT p;INSERT INTO student VALUES(NULL,'003','ccc');SELECT * FROM student; ①ROLLBACK TO p;SELECT * FROM student; ②
MySQL還提供關(guān)鍵字SAVEPOINT設(shè)置中間點(diǎn),可以設(shè)置回滾的位置,①處的查詢語句結(jié)果中包含三條插入數(shù)據(jù)的結(jié)果,但②處的查詢結(jié)果中不包含中間點(diǎn)p之后插入的數(shù)據(jù)。需要注意的是,回到中間點(diǎn)的回滾不會(huì)結(jié)束事務(wù)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VeVb武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選