網(wǎng)上有很多關(guān)于pos機(jī)sql數(shù)據(jù)庫,怎么入門SQL的知識,也有很多人為大家解答關(guān)于pos機(jī)sql數(shù)據(jù)庫的問題,今天pos機(jī)之家(m.fqd168.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)sql數(shù)據(jù)庫
什么是數(shù)據(jù)庫?大家都有過下面這樣的經(jīng)歷吧?
收到曾經(jīng)為自己診治過的牙醫(yī)寄來的明信片,上面寫著“距上次檢查已有半年,請您再來做個牙齒健康檢查”。在生日的前一個月,收到曾入住過的旅店或賓館發(fā)來的“生日當(dāng)月入住優(yōu)惠”的郵件或者明信片。在網(wǎng)上商城購物之后,收到內(nèi)附“推薦商品列表”的郵件。這可能是因為牙醫(yī)、旅店或商城的經(jīng)營者掌握了顧客上一次的就診日期、生日和購買歷史等信息,并且擁有能夠從大量匯總信息中快速獲取所需信息(比如你的住址或愛好)的設(shè)備(計算機(jī)系統(tǒng))。如果利用人工完成同樣的工作,真不知道要多長時間呢。
另外,現(xiàn)在所有地區(qū)的圖書館都配備了計算機(jī),實現(xiàn)了圖書的自動查詢。使用該系統(tǒng),可以通過檢索書名或出版年份快速查找出希望借閱的圖書的所在位置,以及是否已經(jīng)借出等信息。正是因為擁有了可以保存圖書名稱、出版年份以及保管位置和外借情況等信息,并且可以按需查詢的設(shè)備,才使這一切成為可能。
像這樣將大量數(shù)據(jù)保存起來,通過計算機(jī)加工而成的可以進(jìn)行高效訪問的數(shù)據(jù)集合稱為數(shù)據(jù)庫(Database,DB)。將姓名、住址、電話號碼、郵箱地址、愛好和家庭構(gòu)成等數(shù)據(jù)保存到數(shù)據(jù)庫中,就可以隨時迅速獲取想要的信息了。
數(shù)據(jù)庫管理系統(tǒng)(DBMS)
用來管理數(shù)據(jù)庫的計算機(jī)系統(tǒng)稱為數(shù)據(jù)庫管理系統(tǒng)(Database Management System,DBMS)。為什么要使用專用系統(tǒng)(DBMS)來管理數(shù)據(jù)呢?
我們通過計算機(jī)管理數(shù)據(jù)的時候,通常使用文本文件或者Excel 那樣的電子制表軟件就可以完成了,非常簡單。但也有不足。下面就舉幾個有代表性的例子。
無法多人共享數(shù)據(jù)保存在已連接網(wǎng)絡(luò)的計算機(jī)中的文件,可以通過共享設(shè)定實現(xiàn)多個用戶在線閱讀或編輯。但是,當(dāng)某個用戶打開該文件的時候,其他用戶就無法進(jìn)行編輯了。如果是網(wǎng)上商城的話,當(dāng)某個用戶購買商品的時候,其他用戶就無法購買了。
無法提供操作大量數(shù)據(jù)所需的格式要想瞬間從幾十萬或者上百萬的數(shù)據(jù)中獲取想要的數(shù)據(jù),必須把數(shù)據(jù)保存為適當(dāng)?shù)母袷剑俏谋疚募虴xcel 工作表等無法提供相應(yīng)的格式。
實現(xiàn)讀寫自動化需要編程能力通過編寫計算機(jī)程序(以下簡稱程序)可以實現(xiàn)數(shù)據(jù)讀取和編輯自動化,但這必須以了解數(shù)據(jù)結(jié)構(gòu)為前提,還需具備一定的計算機(jī)編程技術(shù)。
無法應(yīng)對突發(fā)事故當(dāng)文件被誤刪、硬盤出現(xiàn)故障等導(dǎo)致無法讀取的時候,可能會造成重要數(shù)據(jù)丟失,同時數(shù)據(jù)還可能被他人輕易讀取或竊用。
DBMS 可以克服這些不足,實現(xiàn)多個用戶同時安全簡單地操作大量數(shù)據(jù)(圖1-2)。這也是我們一定要使用DBMS 的原因。
圖1-2DBMS能夠?qū)崿F(xiàn)多個用戶同時安全簡單地操作大量數(shù)據(jù)
數(shù)據(jù)庫管理系統(tǒng)(DBMS)的種類
DBMS 主要通過數(shù)據(jù)的保存格式(數(shù)據(jù)庫的種類)來進(jìn)行分類,現(xiàn)階段主要有以下5 種類型。
1.層次數(shù)據(jù)庫(Hierarchical Database,HDB)
最古老的數(shù)據(jù)庫之一,它把數(shù)據(jù)通過層次結(jié)構(gòu)(樹形結(jié)構(gòu))的方式表現(xiàn)出來。層次數(shù)據(jù)庫曾經(jīng)是數(shù)據(jù)庫的主流,但隨著關(guān)系數(shù)據(jù)庫的出現(xiàn)和普及,現(xiàn)在已經(jīng)很少使用了。
2.關(guān)系數(shù)據(jù)庫(Relational Database,RDB)
關(guān)系數(shù)據(jù)庫是現(xiàn)在應(yīng)用最廣泛的數(shù)據(jù)庫。關(guān)系數(shù)據(jù)庫在1969 年誕生,可謂歷史悠久。和Excel 工作表一樣,它也采用由行和列組成的二維表來管理數(shù)據(jù),所以簡單易懂(表1)。同時,它還使用專門的SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)對數(shù)據(jù)進(jìn)行操作。
表1關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)
這種類型的DBMS 稱為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System,RDBMS)。比較具有代表性的RDBMS 有如下5 種。
Oracle Database:甲骨文公司的RDBMS(通常簡稱為Oracle)SQL Server :微軟公司的RDBMSDB2:IBM 公司的RDBMSPostgreSQL:開源的RDBMSMySQL :開源的RDBMS3.面向?qū)ο髷?shù)據(jù)庫(Object Oriented Database,OODB)
編程語言當(dāng)中有一種被稱為面向?qū)ο笳Z言的語言。把數(shù)據(jù)以及對數(shù)據(jù)的操作集合起來以對象為單位進(jìn)行管理,因此得名。面向?qū)ο髷?shù)據(jù)庫就是用來保存這些對象的數(shù)據(jù)庫。
4.XML數(shù)據(jù)庫(XML Database,XMLDB)
最近幾年,XMLB 作為在網(wǎng)絡(luò)上進(jìn)行交互的數(shù)據(jù)的形式逐漸普及起來。XML 數(shù)據(jù)庫可以對XML 形式的大量數(shù)據(jù)進(jìn)行高速處理。
5.鍵值存儲系統(tǒng)(Key-Value Store,KVS)
這是一種單純用來保存查詢所使用的主鍵(Key)和值(Value)的組合的數(shù)據(jù)庫。具有編程語言知識的讀者可以把它想象成關(guān)聯(lián)數(shù)組或者散列(hash)。近年來,隨著鍵值存儲系統(tǒng)被應(yīng)用到Google 等需要對大量數(shù)據(jù)進(jìn)行超高速查詢的Web 服務(wù)當(dāng)中,它正逐漸為人們所關(guān)注。
下面向大家介紹使用SQL 語言的數(shù)據(jù)庫管理系統(tǒng),也就是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的操作方法。如無特殊說明,下面所提到的數(shù)據(jù)庫以及DBMS 都是指RDBMS。
數(shù)據(jù)庫的結(jié)構(gòu)
RDBMS 的常見系統(tǒng)結(jié)構(gòu)
使用RDBMS 時,最常見的系統(tǒng)結(jié)構(gòu)就是客戶端/ 服務(wù)器類型(C/S類型)這種結(jié)構(gòu)(圖1)。
圖1使用RDBMS時的系統(tǒng)結(jié)構(gòu)
服務(wù)器指的是用來接收其他程序發(fā)出的請求,并對該請求進(jìn)行相應(yīng)處理的程序(軟件),或者是安裝了此類程序的設(shè)備(計算機(jī))。在計算機(jī)上持續(xù)執(zhí)行處理,并等待接收下一條請求。RDBMS 也是一種服務(wù)器,它能夠從保存在硬盤上的數(shù)據(jù)庫中讀取數(shù)據(jù)并返回,還可以把數(shù)據(jù)變更為指定內(nèi)容。
與之相對,向服務(wù)器發(fā)出請求的程序(軟件),或者是安裝了該程序的設(shè)備(計算機(jī))稱為客戶端。訪問由RDBMS 管理的數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)讀寫的程序稱為RDBMS 客戶端。RDBMS 客戶端將想要獲取什么樣的數(shù)據(jù),或者想對哪些數(shù)據(jù)進(jìn)行何種變更等信息通過SQL 語句發(fā)送給RDBMS 服務(wù)器。RDBMS 根據(jù)該語句的內(nèi)容返回所請求的數(shù)據(jù),或者對存儲在數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行更新。
客戶端就如同委托方,而服務(wù)器就像是受托方。由于兩者關(guān)系類似受托方執(zhí)行委托方發(fā)出的指令,故而得名。
這樣就可以使用SQL 語句來實現(xiàn)關(guān)系數(shù)據(jù)庫的讀寫操作了。
另外,RDBMS 既可以和其客戶端安裝在同一臺計算機(jī)上,也可以分別安裝在不同的計算機(jī)上。這樣一來,不僅可以通過網(wǎng)絡(luò)使二者相互關(guān)聯(lián),還可以實現(xiàn)多個客戶端訪問同一個RDBMS(圖2)。
圖2 通過網(wǎng)絡(luò)可以實現(xiàn)多個客戶端訪問同一個數(shù)據(jù)庫
客戶端沒有必要使用同樣的程序,只要能將SQL 發(fā)送給RDBMS,就可以操作數(shù)據(jù)庫了。并且,多個客戶端還可以同時對同一個數(shù)據(jù)庫進(jìn)行讀寫操作。
另外,RDBMS 除了需要同時接收多個客戶端的請求之外,還需要操作存有大量數(shù)據(jù)的數(shù)據(jù)庫,因此通常都會安裝在比客戶端性能更優(yōu)越的計算機(jī)上。操作數(shù)據(jù)量特別巨大的數(shù)據(jù)庫時,還可以將多臺計算機(jī)組合使用。
雖然RDBMS 的系統(tǒng)結(jié)構(gòu)多種多樣,但是從客戶端發(fā)來的SQL 語句基本上都是一樣的。
什么是SQLSQL是為操作數(shù)據(jù)庫而開發(fā)的語言。
它原本是為了提高數(shù)據(jù)庫查詢效率而開發(fā)的語言,但是現(xiàn)在不僅可以進(jìn)行數(shù)據(jù)查詢,就連數(shù)據(jù)的插入和刪除等操作也基本上都可以通過SQL 來完成了。
國際標(biāo)準(zhǔn)化組織(ISO)為SQL 制定了相應(yīng)的標(biāo)準(zhǔn),以此為基準(zhǔn)的SQL 稱為標(biāo)準(zhǔn)SQL。
以前,完全基于標(biāo)準(zhǔn)SQL 的RDBMS 很少,通常需要根據(jù)不同的RDBMS來編寫特定的SQL 語句。這樣一來,就會造成能夠在Oracle 中使用的SQL 語句卻無法在SQL Server 中使用,反之亦然。近來,對標(biāo)準(zhǔn)SQL 的支持取得了一些進(jìn)展,因此希望準(zhǔn)備學(xué)習(xí)SQL 的人們能夠從現(xiàn)在開始就牢記標(biāo)準(zhǔn)SQL 的書寫方式。
學(xué)會標(biāo)準(zhǔn)SQL 就可以在各種RDBMS 中書寫SQL 語句了。
SQL 語句及其種類
SQL 用關(guān)鍵字、表名、列名等組合而成的一條語句(SQL 語句)來描述操作的內(nèi)容。關(guān)鍵字是指那些含義或使用方法已事先定義好的英語單詞,存在包含“對表進(jìn)行查詢”或者“參考這個表”等各種意義的關(guān)鍵字。
根據(jù)對RDBMS 賦予的指令種類的不同,SQL 語句可以分為以下三類。
● DDL
DDL(Data Definition Language,數(shù)據(jù)定義語言) 用來創(chuàng)建或者刪除存儲數(shù)據(jù)用的數(shù)據(jù)庫以及數(shù)據(jù)庫中的表等對象。DDL 包含以下幾種指令。
CREATE: 創(chuàng)建數(shù)據(jù)庫和表等對象DROP: 刪除數(shù)據(jù)庫和表等對象ALTER: 修改數(shù)據(jù)庫和表等對象的結(jié)構(gòu)●DML
DML(Data Manipulation Language,數(shù)據(jù)操縱語言) 用來查詢或者變更表中的記錄。DML 包含以下幾種指令。
SELECT:查詢表中的數(shù)據(jù)INSERT:向表中插入新數(shù)據(jù)UPDATE:更新表中的數(shù)據(jù)DELETE:刪除表中的數(shù)據(jù)●DCL
DCL(Data Control Language,數(shù)據(jù)控制語言) 用來確認(rèn)或者取消對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的變更。除此之外,還可以對RDBMS 的用戶是否有權(quán)限操作數(shù)據(jù)庫中的對象(數(shù)據(jù)庫表等)進(jìn)行設(shè)定。DCL 包含以下幾種指令。
COMMIT: 確認(rèn)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的變更ROLLBACK: 取消對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的變更GRANT: 賦予用戶操作權(quán)限REVOKE: 取消用戶的操作權(quán)限SQL 根據(jù)功能不同可以分為三類,其中使用最多的是DML。
SQL 的基本書寫規(guī)則
書寫SQL 語句時必須要遵守一些規(guī)則。這些規(guī)則都非常簡單,接下來我們來逐一認(rèn)識一下。
■ SQL 語句要以分號(;)結(jié)尾
一條SQL 語句可以描述一個數(shù)據(jù)庫操作。在RDBMS 當(dāng)中,SQL 語句也是逐條執(zhí)行的。
眾所周知,我們在句子的句尾加注標(biāo)點表示結(jié)束,中文句子以句號(。)結(jié)尾,英文以點號(.)結(jié)尾,而SQL 語句則使用分號(;)結(jié)尾。
■ SQL 語句不區(qū)分大小寫
SQL 不區(qū)分關(guān)鍵字的大小寫 。例如,不管寫成SELECT 還是select,解釋都是一樣的。表名和列名也是如此。
雖然可以根據(jù)個人喜好選擇大寫還是小寫(或大小寫混雜),但為了理解起來更加容易,可以用以下規(guī)則來書寫SQL 語句。
關(guān)鍵字大寫表名的首字母大寫其余(列名等)小寫但是插入到表中的數(shù)據(jù)是區(qū)分大小寫的。例如,在操作過程中,數(shù)據(jù)Computer、COMPUTER 或computer,三者是不一樣的。
■ 常數(shù)的書寫方式是固定的
SQL 語句常常需要直接書寫字符串、日期或者數(shù)字。例如,書寫向表中插入字符串、日期或者數(shù)字等數(shù)據(jù)的SQL 語句。
在SQL 語句中直接書寫的字符串、日期或者數(shù)字等稱為常數(shù)。常數(shù)的書寫方式如下所示。
SQL 語句中含有字符串的時候,需要像\'abc\'這樣,使用單引號(\')將字符串括起來,用來標(biāo)識這是一個字符串。
SQL 語句中含有日期的時候,同樣需要使用單引號將其括起來。日期的格式有很多種(\'26 Jan 2010\' 或者\'10/01/26\' 等),也可以使用\'2010-01-26\' 這種\' 年- 月- 日\' 的格式。
在SQL 語句中書寫數(shù)字的時候,不需要使用任何符號標(biāo)識,直接寫成1000 這樣的數(shù)字即可。
■ 單詞需要用半角空格或者換行來分隔
SQL 語句的單詞之間需使用半角空格或換行符來進(jìn)行分隔。如下這種未加分隔的語句會發(fā)生錯誤,無法正常執(zhí)行。
○ CREATE TABLE Product
× CREATETABLE Product
× CREATE TABLEProduct
但是不能使用全角空格作為單詞的分隔符,否則會發(fā)生錯誤,出現(xiàn)無法預(yù)期的結(jié)果。
表的內(nèi)容的創(chuàng)建
在我們學(xué)習(xí)針對表的查詢,以及數(shù)據(jù)變更等SQL 語句之前。我們要先創(chuàng)建學(xué)習(xí)這些SQL 語句所需的數(shù)據(jù)庫和表。
表2 舉例用的商品表
該表是某家小商店銷售商品的一覽表。商品的數(shù)量不多,不過我們可以把它想象成大量數(shù)據(jù)中的一部分(畢竟這只是為了學(xué)習(xí)SQL 而創(chuàng)建的表)。像0003 號商品的登記日期以及0006 號商品的進(jìn)貨單價這樣的空白內(nèi)容,我們可以認(rèn)為是由于店主疏忽而忘記輸入了。
我們可以看到表2 由6 列8 行所組成。最上面一行是數(shù)據(jù)的項目名,真正的數(shù)據(jù)是從第2 行開始的。
備忘
接下來,我們會逐步學(xué)習(xí)創(chuàng)建數(shù)據(jù)庫和表所使用的SQL 語句的書寫方式。在這之前,請先準(zhǔn)備好學(xué)習(xí)環(huán)境(PostgreSQL)。
數(shù)據(jù)庫的創(chuàng)建(CREATE DATABASE語句)
前面提到,在創(chuàng)建表之前,一定要先創(chuàng)建用來存儲表的數(shù)據(jù)庫。運行CREATE DATABASE 語句就可以在RDBMS 上創(chuàng)建數(shù)據(jù)庫了。CREATEDATABASE 語句的語法如下所示。
這里我們僅指定了使用該語法所需的最少項目,實際開發(fā)數(shù)據(jù)庫時還需要指定各種其他項目。
語法1-1創(chuàng)建數(shù)據(jù)庫的CREATE DATABASE語句
CREATE DATABASE <數(shù)據(jù)庫名稱>;
這里我們將數(shù)據(jù)庫命名為shop,然后執(zhí)行代碼清單1-1 中的SQL語句。
代碼清單1-1 創(chuàng)建數(shù)據(jù)庫shop的CREATE DATABASE語句
CREATE DATABASE shop;
此外,數(shù)據(jù)庫名稱、表名以及列名都要使用半角字符(英文字母、數(shù)字、符號),具體內(nèi)容隨后會進(jìn)行介紹。
表的創(chuàng)建(CREATE TABLE語句)
創(chuàng)建好數(shù)據(jù)庫之后,接下來我們使用CREATE TABLE 語句在其中創(chuàng)建表。CREATE TABLE 語句的語法如下所示
語法1-2創(chuàng)建表的CREATE TABLE語句
CREATE TABLE <表名>(<列名1> <數(shù)據(jù)類型> <該列所需約束>,<列名2> <數(shù)據(jù)類型> <該列所需約束>,<列名3> <數(shù)據(jù)類型> <該列所需約束>,<列名4> <數(shù)據(jù)類型> <該列所需約束>,...<該表的約束1>, <該表的約束2>,……);
該語法清楚地描述了我們要創(chuàng)建一個包含< 列名1>、< 列名2>、 ……的名稱為< 表名> 的表,非常容易理解。每一列的數(shù)據(jù)類型(后述)是必須要指定的,還要為需要的列設(shè)置約束(后述)。約束可以在定義列的時候進(jìn)行設(shè)置,也可以在語句的末尾進(jìn)行設(shè)置。
在數(shù)據(jù)庫中創(chuàng)建表1-2 中的商品表(Product 表)的CREATE TABLE 語句,如代碼清單1-2 所示。
代碼清單1-2創(chuàng)建Product表的CREATE TABLE語句
CREATE TABLE Product(product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,sale_price INTEGER ,purchase_price INTEGER ,regist_date DATE ,PRIMARY KEY (product_id));
命名規(guī)則
我們只能使用半角英文字母、數(shù)字、下劃線(_)作為數(shù)據(jù)庫、表和列的名稱 。例如,不能將product_id 寫成product-id,因為標(biāo)準(zhǔn)SQL 并不允許使用連字符作為列名等名稱。$、#、? 這樣的符號同樣不能作為名稱使用。
盡管有些RDBMS 允許使用上述符號作為列的名稱,但這也僅限于在該RDBMS 中使用,并不能保證在其他RDBMS 中也能使用。雖然大家可能會覺得限制有點太多了,但還是請遵守規(guī)則使用半角英文字母、數(shù)字和下劃線(_)吧。
此外, 名稱必須以半角英文字母開頭 。以符號開頭的名稱并不多見,但有時會碰到類似1product 或者2009_sales 這樣以數(shù)字開頭的名稱。雖然可以理解,但這在標(biāo)準(zhǔn)SQL 中是被禁止的。請大家使用product1 或者sales_2009 這樣符合規(guī)則的名稱。
最后還有一點,在同一個數(shù)據(jù)庫中不能創(chuàng)建兩個相同名稱的表,在同一個表中也不能創(chuàng)建兩個名稱相同的列。如果出現(xiàn)這樣的情況,RDBMS會返回錯誤信息。
接下來我們根據(jù)上述規(guī)則,使用代碼清單1-2 中的CREATE TABLE 語句來創(chuàng)建表2 中的商品表。表名為Product,表中的列名如表3 所示。
表3商品表和Product表列名的對應(yīng)關(guān)系
數(shù)據(jù)類型的指定
Product 表所包含的列,定義在CREATE TABLE Product( )的括號中。列名右邊的INTEGER 或者CHAR 等關(guān)鍵字,是用來聲明該列的數(shù)據(jù)類型的,所有的列都必須指定數(shù)據(jù)類型。
數(shù)據(jù)類型表示數(shù)據(jù)的種類,包括數(shù)字型、字符型和日期型等。每一列都不能存儲與該列數(shù)據(jù)類型不符的數(shù)據(jù)。聲明為整數(shù)型的列中不能存儲\'abc\' 這樣的字符串,聲明為字符型的列中也不能存儲1234 這樣的數(shù)字。
數(shù)據(jù)類型的種類很多,各個RDBMS 之間也存在很大差異。根據(jù)業(yè)務(wù)需要實際創(chuàng)建數(shù)據(jù)庫時,一定要根據(jù)不同的RDBMS 選用最恰當(dāng)?shù)臄?shù)據(jù)類型。在學(xué)習(xí)SQL 的時候,使用最基本的數(shù)據(jù)類型就足夠了。下面我們就來介紹四種基本的數(shù)據(jù)類型。
● INTEGER型
用來指定存儲整數(shù)的列的數(shù)據(jù)類型(數(shù)字型),不能存儲小數(shù)。
● CHAR型
CHAR 是CHARACTER(字符)的縮寫,是用來指定存儲字符串的列的數(shù)據(jù)類型(字符型)。可以像CHAR(10) 或者CHAR(200) 這樣,在括號中指定該列可以存儲的字符串的長度(最大長度)。字符串超出最大長度的部分是無法輸入到該列中的。RDBMS 不同,長度單位也不一樣,既存在使用字符個數(shù)的情況,也存在使用字節(jié)長度的情況。
字節(jié)是計算機(jī)內(nèi)部的數(shù)據(jù)單位。一個字符通常需要1到3個字節(jié)來表示(根據(jù)字符的種類和表現(xiàn)方式有所不同)。
字符串以定長字符串的形式存儲在被指定為CHAR 型的列中。所謂定長字符串,就是當(dāng)列中存儲的字符串長度達(dá)不到最大長度的時候,使用半角空格進(jìn)行補(bǔ)足。例如,我們向CHAR(8) 類型的列中輸入\'abc\'的時候,會以\'abc \'(abc 后面有5 個半角空格)的形式保存起來。
另外,雖然之前我們說過SQL 不區(qū)分英文字母的大小寫,但是表中存儲的字符串卻是區(qū)分大小寫的。也就是說,\'ABC\' 和\'abc\' 代表了兩個不同意義的字符串。
● VARCHAR型
同CHAR 類型一樣,VARCHAR 型也是用來指定存儲字符串的列的數(shù)據(jù)類型(字符串類型),也可以通過括號內(nèi)的數(shù)字來指定字符串的長度(最大長度)。但該類型的列是以 可變長字符串 的形式來保存字符串的。定長字符串在字符數(shù)未達(dá)到最大長度時會用半角空格補(bǔ)足,但可變長字符串不同,即使字符數(shù)未達(dá)到最大長度,也不會用半角空格補(bǔ)足。例如,我們向VARCHAR(8) 類型的列中輸入字符串\'abc\'的時候,保存的就是字符串\'abc\'。
該類型的列中存儲的字符串也和CHAR 類型一樣,是區(qū)分大小寫的。
特定的SQL
Oracle中使用VARCHAR2型(Oracle中也有VARCHAR這種數(shù)據(jù)類型,但并不推薦使用)。
● DATE型
用來指定存儲日期(年月日)的列的數(shù)據(jù)類型(日期型)。
特定的SQL
除了年月日之外,Oracle中使用的DATE型還包含時分秒。
約束的設(shè)置
約束是除了數(shù)據(jù)類型之外,對列中存儲的數(shù)據(jù)進(jìn)行限制或者追加條件的功能。Product 表中設(shè)置了兩種約束。
Product 表的product_id 列、product_name 列和product_type 列的定義如下所示。
product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,
數(shù)據(jù)類型的右側(cè)設(shè)置了NOT NULL 約束。NULL 是代表空白(無記錄)的關(guān)鍵字。在NULL 之前加上了表示否定的NOT,就是給該列設(shè)置了不能輸入空白,也就是必須輸入數(shù)據(jù)的約束(如果什么都不輸入就會出錯)。
NULL這個詞是無或空的意思,NULL是使用SQL時的常見關(guān)鍵字,請大家牢記。
這樣一來,Product 表的product_id(商品編號)列、product_name(商品名稱)列和product_type(商品種類)列就都成了必須輸入的項目。
另外,在創(chuàng)建Product 表的CREATE TABLE 語句的后面,還有下面這樣的記述。
PRIMARY KEY (product_id)
這是用來給product_id 列設(shè)置主鍵約束的。所謂鍵,就是在指定特定數(shù)據(jù)時使用的列的組合。鍵種類多樣,主鍵(primary key)就是可以特定一行數(shù)據(jù)的列B。也就是說,如果把product_id 列指定為主鍵,就可以通過該列取出特定的商品數(shù)據(jù)了。
反之,如果向product_id 列中輸入了重復(fù)數(shù)據(jù),就無法取出唯一的特定數(shù)據(jù)了(因為無法確定唯一的一行數(shù)據(jù))。這樣就可以為某一列設(shè)置主鍵約束了。
表的刪除(DROP TABLE語句)
此前介紹的都是關(guān)于Product 表的內(nèi)容的創(chuàng)建,下面我們就來介紹一下刪除表的方法。刪除表的SQL 語句非常簡單, 只需要一行DROP TABLE 語句即可。
語法1-3刪除表時使用的DROP TABLE語句
DROP TABLE <表名>;
如果想要刪除Product 表,只需要像代碼清單1-3 那樣書寫SQL語句即可。
代碼清單1-3刪除Product表
DROP TABLE Product;
DROP 在英語中是“丟掉”“舍棄”的意思。需要特別注意的是,刪除的表是無法恢復(fù)的。即使是被誤刪的表,也無法恢復(fù),只能重新創(chuàng)建,然后重新插入數(shù)據(jù)。
其實很多RDBMS 都預(yù)留了恢復(fù)的功能,但還是請大家認(rèn)為是無法恢復(fù)的。
如果不小心刪除了重要的業(yè)務(wù)表,那就太悲劇了。特別是存儲了大量數(shù)據(jù)的表,恢復(fù)起來費時費力,請大家務(wù)必注意!
表定義的更新(ALTER TABLE語句)
有時好不容易把表創(chuàng)建出來之后才發(fā)現(xiàn)少了幾列,其實這時無需把表刪除再重新創(chuàng)建,只需使用變更表定義的ALTER TABLE 語句就可以了。ALTER 在英語中就是“改變”的意思。下面就給大家介紹該語句通常的使用方法。
首先是添加列時使用的語法。
語法1-4添加列的ALTER TABLE語句
ALTER TABLE <表名> ADD COLUMN <列的定義>;
特定的SQL
Oracle 和SQL Server 中不用寫COLUMN。
ALTER TABLE <表名> ADD <列名> ;
另外,在Oracle 中同時添加多列的時候,可以像下面這樣使用括號。
ALTER TABLE <表名> ADD (<列名>,<列名>,……);
例如,我們可以使用代碼清單1-4 中的語句在Product 表中添加這樣一列,product_name_pinyin(商品名稱(拼音)),該列可以存儲100 位的可變長字符串。
代碼清單1-4添加一列可以存儲100位的可變長字符串的product_name_pinyin列
DB2 PostgreSQL MySQLALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);OracleALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100));SQL ServerALTER TABLE Product ADD product_name_pinyin VARCHAR(100);
反之,刪除表中某列使用的語法如下所示。
語法1-5刪除列的ALTER TABLE語句
ALTER TABLE <表名> DROP COLUMN <列名>;
特定的SQL
Oracle 中不用寫COLUMN。
ALTER TABLE <表名> DROP <列名> ;
另外,在Oracle 中同時刪除多列的時候,可以像下面這樣使用括號來實現(xiàn)。
ALTER TABLE <表名> DROP (<列名>,<列名>,……);
例如,我們可以使用代碼清單1-5 中的語句來刪除之前添加的product_name_pinyin 列。
代碼清單1-5刪除product_name_pinyin列
SQL Server DB2 PostgreSQL MySQLALTER TABLE Product DROP COLUMN product_name_pinyin;OracleALTER TABLE Product DROP (product_name_pinyin);
ALTER TABLE 語句和DROP TABLE 語句一樣,執(zhí)行之后無法恢復(fù)。誤添的列可以通過ALTER TABLE 語句刪除,或者將表全部刪除之后重新再創(chuàng)建。
向Product表中插入數(shù)據(jù)
最后讓我們來嘗試一下向表中插入數(shù)據(jù)。向Product 表中插入數(shù)據(jù)的SQL 語句如代碼清單1-6 所示。
代碼清單1-6向Product表中插入數(shù)據(jù)的SQL語句
SQL Server PostgreSQL-- DML :插入數(shù)據(jù)BEGIN TRANSACTION;—————————①INSERT INTO Product VALUES (\'0001\', \'T恤衫\', \'衣服\',1000, 500, \'2009-09-20\');INSERT INTO Product VALUES (\'0002\', \'打孔器\', \'辦公用品\',500, 320, \'2009-09-11\');INSERT INTO Product VALUES (\'0003\', \'運動T恤\', \'衣服\',4000, 2800, NULL);INSERT INTO Product VALUES (\'0004\', \'菜刀\', \'廚房用具\',3000, 2800, \'2009-09-20\');INSERT INTO Product VALUES (\'0005\', \'高壓鍋\', \'廚房用具\',6800, 5000, \'2009-01-15\');INSERT INTO Product VALUES (\'0006\', \'叉子\', \'廚房用具\',500, NULL, \'2009-09-20\');INSERT INTO Product VALUES (\'0007\', \'擦菜板\', \'廚房用具\',880, 790, \'2008-04-28\');INSERT INTO Product VALUES (\'0008\', \'圓珠筆\', \'辦公用品\',100, NULL,\'2009-11-11\');COMMIT;
特定的SQL
DBMS 不同,代碼清單1-6中的DML語句也略有不同。
在MySQL 中運行時,需要把①中的BEGIN TRANSACTION;改寫成
START TRANSACTION;
在Oracle 和DB2中運行時,無需使用①中的BEGIN TRANSACTION;(請予以刪除)。
使用插入行的指令語句INSERT,就可以把表1-2 中的數(shù)據(jù)都插入到表中了。開頭的BEGIN TRANSACTION 語句是開始插入行的指令語句,結(jié)尾的COMMIT 語句是確定插入行的指令語句。
怎么入門SQL?近年來,和其他系統(tǒng)領(lǐng)域一樣,數(shù)據(jù)庫領(lǐng)域也實現(xiàn)了飛速發(fā)展,應(yīng)用范圍不斷擴(kuò)大,不但出現(xiàn)了具有新功能的數(shù)據(jù)庫,而且操作的數(shù)據(jù)量也大幅增長。
估計很多讀者今后都會慢慢積累各個領(lǐng)域、各種規(guī)模的系統(tǒng)開發(fā)經(jīng)驗(或者可能已經(jīng)開始從事開發(fā)方面的工作了),到那時,所有的系統(tǒng)必定都需要使用數(shù)據(jù)庫。它們使用的數(shù)據(jù)庫,即便不是關(guān)系數(shù)據(jù)庫,也一定是以關(guān)系數(shù)據(jù)庫為基礎(chǔ)的數(shù)據(jù)庫。從這個意義上看,如果掌握了關(guān)系數(shù)據(jù)庫和 SQL,就能成為任何系統(tǒng)開發(fā)都需要的數(shù)據(jù)庫專家了。
下面分享一本口碑不錯的SQL入門書,它介紹了時下最流行的數(shù)據(jù)庫——關(guān)系數(shù)據(jù)庫,這也是理解其他數(shù)據(jù)庫的基礎(chǔ)。在系統(tǒng)領(lǐng)域,通常所講的數(shù)據(jù)庫指的就是關(guān)系數(shù)據(jù)庫,其重要性可見一斑。
日本知名數(shù)據(jù)庫工程師寫給初學(xué)者的實用指南!107張圖表+209段代碼+88個法則,讓菜鳥完美進(jìn)階!基于標(biāo)準(zhǔn)SQL編寫,明示各RDBMS(PostgreSQL/DB2/MySQL/Oracle/SQL Server)的差異!本書是編程學(xué)習(xí)系列的 SQL 和關(guān)系數(shù)據(jù)庫篇。該系列注重對初學(xué)者編程能力的培養(yǎng),本書秉承了這一宗旨。本書不僅可以用于自學(xué),也可以作為大學(xué)、專科學(xué)校和企業(yè)新人的培訓(xùn)用書。書中提供了大量的示例程序和詳實的操作步驟說明,大家可以親自動手解決具體的問題,切實提高自身的編程能力。
另外,在各章的結(jié)尾處還安排了習(xí)題來幫助大家復(fù)習(xí)該章的知識要點,習(xí)題的答案和講解收錄在附錄中。
本文內(nèi)容節(jié)選自《SQL基礎(chǔ)教程(第2版)》。
以上就是關(guān)于pos機(jī)sql數(shù)據(jù)庫,怎么入門SQL的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)sql數(shù)據(jù)庫的知識,希望能夠幫助到大家!









