現(xiàn)在你大概了解什么是關(guān)系型數(shù)據(jù)庫,這樣對了解SQL的實質(zhì)很有幫助棉圈。簡單來說SQL就是一種編程語言吭敢,用它來編程可以創(chuàng)建和操作關(guān)系型數(shù)據(jù)庫。進一步講SQL是聲明式編程(Declarative programming)它描述目標的性質(zhì)缭受,讓計算機明白目標胁澳,而非流程。也就是說用SQL編程你要關(guān)注的是你要達到的目標效果而不是關(guān)注計算機怎么實現(xiàn)的過程米者。
下面用一個簡單的例子講解SQL語言和其他命令式編程語言的區(qū)別韭畸。當(dāng)使用諸如C Java等命令式編程語言時,你需要將解決方案分解到每一步蔓搞。比如當(dāng)你口渴了想喝水胰丁。用命令式編程可能是:第一步,找到一個植被喂分,第二步走到飲水機旁锦庸,第三步按下出水按鈕,第四步用紙杯接水蒲祈。而如果是聲明式編程直接告訴計算機你的目標和結(jié)果就行甘萧,即給我一杯水。SQL內(nèi)置了算法梆掸,并且自帶優(yōu)化程序扬卷,只要給指令,程序內(nèi)部會將指令分解成每一步執(zhí)行想要得到的結(jié)果酸钦。
除非你是專家級別用戶怪得,如果你是一個普通的數(shù)據(jù)庫使用者只要關(guān)注你想要提取什么樣的數(shù)據(jù)即可,完全不用考慮算法問題。
了解了SQL語言是聲明式編程汇恤,我們接下來看一下它的句法庞钢。SQL語言由DDL、DML因谎、DCL基括、TCL構(gòu)成。DDL(Data Definition Language)為數(shù)據(jù)定義語言财岔。DML(data manipulation language)為數(shù)據(jù)操縱語言风皿。DCL(data control language)為數(shù)據(jù)控制語言。TCL(transaction control language)為事物控制語言匠璧。.
與其說DDL是一種語言還不如說它是一種句法桐款。這種句法就是一系列的可以幫助用戶定義和修改數(shù)據(jù)結(jié)構(gòu)的語句。
語句1:創(chuàng)建語句(CREATE statement)
1.創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE database_name夷恍;
2.創(chuàng)建表
CREATE TABLE object_name(column_name data_type);
其中object_name是表格名魔眨,column_name是字段名,data_type是數(shù)據(jù)類型酿雪。我們以創(chuàng)建Sales表為例遏暴。CREATE TABLE Sales(purchase_number INT);創(chuàng)建表時,SQL支持表名和數(shù)據(jù)庫名相同.
語句2:修改語句(ALTER statement)
1.增加(ADD)
如增加字段--
ALTER TABLE Sales
ADD COLUMN date_of_purchase DATE;
語句3:刪除語句(DELETE statement)
如刪除表--
DROP TABLE Sales;
另外,可以使用TRUNCATE達到刪除目的,語句為TRUNCATE TABLE Customers;.和DROP 刪除整個數(shù)據(jù)表不一樣,TRUNCATE TABLE Customers; .只是刪除整個數(shù)據(jù)表的數(shù)據(jù),但是數(shù)據(jù)表還存在于數(shù)據(jù)庫內(nèi).
語句4:重命名語句(RENAME statement)
如給存在的表重命名--
RENAME TABLE Sales TO sale_data;
注:前述提到的CREATE ADD ALTER 是SQL的關(guān)鍵字(key words或 reserved words) ,不能作為數(shù)據(jù)表中變量的名字.比如CREATE TABLE add(purchase_number INT)是不合法的.
DML即數(shù)據(jù)操縱語言,通過DML,我們可以操縱數(shù)據(jù)庫的數(shù)據(jù).最常見的就是SELECT語句.SELECT 語句幫助使用者從數(shù)據(jù)庫例查詢相應(yīng)數(shù)據(jù).?
1. 提取數(shù)據(jù)信息
SELECT * FROM Sales;
該語句可以提取出整個數(shù)據(jù)表所有字段和記錄的信息.
SELECT ... FROM Sales;
該語句用于提取部分數(shù)據(jù)信息
2.插入數(shù)據(jù)
INSERT...INTO...VALUES;
比如INSERT INTO Sales (purchase_number, date_of_purchase) VALUES(1,'2017-10-11');
如果Sales只有purchase_number, date_of_purchase兩個字段,INSERT INTO Sales? VALUES(1,'2017-10-11');效果一樣.
3.更新數(shù)據(jù)
UPDATE Sales SET date_of_purchase = '2017-12-12' WHERE purchase_number = 1;
4.刪除數(shù)據(jù)
DELETE FROM sales;(此語句等同于TRUNCATE TABLE sales;)
DELETE FROM sales
WHERE?
purchase_number = 1;
DDL中的TRUNCATE和DML中的DELETE語句都能實現(xiàn)刪除數(shù)據(jù)的效果.TRUNCATE刪除全部數(shù)據(jù)保留表.DELETE可以精確具體地刪除表中的某一部分數(shù)據(jù).
DDL和DML是最常用的SQL語言.DCL和TCL較少用.
DCL包含GRANT和REVOKE語句.此二語句用于管理數(shù)據(jù)庫用戶的權(quán)限.同一個數(shù)據(jù)庫由無數(shù)個不同的用戶使用,他們獲取的權(quán)限是不一樣的.GRANT語句為用戶授權(quán)不同程度的權(quán)限.
如GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost'
localhost是本地主機,大的公司企業(yè)并不使用本地主機而是將數(shù)據(jù)庫建在遠程云端.
REVOKE語句用于撤銷數(shù)據(jù)庫用戶的使用權(quán)限.如REVOKE type_of_permission ON database_name.table_name TO 'username'@'localhost'
TCL語言
在實際工作中,數(shù)據(jù)的每次一修改并不一定馬上自動地存儲進數(shù)據(jù)庫里,TCL語言中的COMMIT語句用于將修改(包括INSERT DELETE UPDATE)永久地存儲到數(shù)據(jù)庫里.
比如使用UPDATE更新數(shù)據(jù):
UPDATE customers
SET last_name = 'Johnson'
WHERE customer_id =4
COMMIT;
使用了COMMIT以外,所有含有此數(shù)據(jù)的其他表的相應(yīng)數(shù)據(jù)也會被更改保存.
TCL中的ROLLBACK語句可以讓你對COMMIT的語句進行反悔,回到COMMIT前的狀態(tài).
UPDATE customers
SET last_name = 'Johnson'
WHERE customer_id =4
COMMIT;
ROLLBACK;
這樣操作后,數(shù)據(jù)回到之前的狀態(tài).
版權(quán)聲明:本文章里引用的數(shù)據(jù)來源于網(wǎng)絡(luò),僅供學(xué)習(xí)交流使用指黎,版權(quán)歸原作者朋凉。