我的SQL總結---未完待續
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
總結:
主要的SQL 語句:
數據操作(select, insert, delete, update)
訪問控制(grant, revoke)
事務控制(commit, rollback, set transaction)
數據定義(create table, drop table, alter table, create view, drop view, create index, drop index,
create schema, drop schema, create domain, alter domain, drop domain)
編程中的SQL(declare, explain, open, fetch, close, prepare, execute, describe)
一、數據操作(select, insert, delete, update)
Insert into 表名 (字段1, 字段2….) values (值1, 值2….)


以下是工作中應用的SQL 語句截圖:
1、 set transaction isolation level read uncommitted
這個語句是讀取為認可的交易隔離級別的數據,這樣數據庫可以讀取到未被提交的數據。在SQL server中數據庫引擎支持五種交易隔離級別:
set transaction isolation level read uncommitted 讀取未認可
set transaction isolation level read committed 讀取認可
set transaction isolation level repeatable read 可重復讀取
set transaction isolation level read committed snapshot 讀取提交的快照
set transaction isolation level read serializable 序列化

2、使用已有的database,或者是創建新的database,為新的database創建一張表,並賦予表字段及記錄值,驗證database是否成功創建,驗證database下是否有新創建的表,表里的字段是否正確,表數據是否正確。







對於單表多數據來說,delete 和 delete from都可以將表里的所有數據刪除,但是對於多表的連結,則delete和delete from是有一些區別。
Update 語句用於修改表中的數據,語法:UPDATE table SET feilds1 = value1 … WHERE condition
一條語句可以修改表中的多個值,也可以將允許null值得字段設置成null。

二、訪問控制(grant, revoke)
grant, revoke 授權和回收權限,主要是用來做數據庫維護。
SQL可以為不同的用戶分配嚴格的、復雜的權限。這些操作大多都可以用SQL指令Grant(分配權限)和Revoke(回收權限)來實現。 Grant可以把指定的權限分配給特定的用戶,如果這個用戶不存在,則會創建一個用戶。
Grant 常用格式:
grant 權限1,權限2,…權限n on 數據庫名稱.表名稱 to 用戶名@用戶地址 identified by ‘連接口令’;
權限1,權限2,…權限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權限。
當權限1,權限2,…權限n被all privileges或者all代替,表示賦予用戶全部權限。
當數據庫名稱.表名稱被*.*代替,表示賦予用戶操作服務器上所有數據庫所有表的權限。
用戶地址可以是localhost,也可以是ip地址、機器名字、域名。也可以用’%'表示從任何地址連接。
‘連接口令’不能為空,否則創建失敗。
比較重要的是priveleges(權限)。
普通用戶的權限權限應用於描述
SELECT表,列允許用戶從表中選擇行(記錄)
INSERT表,列允許用戶在表中插入新行
UPDATE表,列允許用戶修改現存表里行中的值
DELETE表允許用戶刪除現存表的行
INDEX表允許用戶創建和拖動特定表索引
ALTER表允許用戶改變現存表的結構。例如,可添加列、重命名列或表、修改列的數據類型
CREATE數據庫,表允許用戶創建新數據庫或表。如果在GRANT中指定了一個特定的數據庫或表,他們只能夠創建該數據庫或表,即他們必須首先刪除(Drop)它
DROP數據庫,表允許用戶拖動(刪除)數據庫或表
管理員權限權限描述
CREATE TEMPORARY TABLES允許管理員在CREATE TABLE語句中使用TEMPORARY關鍵字
FILE允許將數據從文件讀入表,或從表讀入文件
LOCK TABLES允許使用LOCK TABLES語句
PROCESS允許管理員查看屬於所有用戶的服務器進程
RELOAD允許管理員重新載入授權表、清空授權、主機、日志和表格
REPLICATION CLIENT允許在復制主機(Master)和從機(Slave)上使用SHOW STATUS
REPLICATION SLAVE允許復制從服務器連接到主服務器
SHOW DATABASES允許使用SHOW DATABASES語句查看所有的數據庫列表。沒有這個權限,用戶只能看到他們能夠看到的數據庫
SHUTDOWN允許管理員關閉SQL服務器
SUPER允許管理員關閉屬於任何用戶的線程
特別的權限權限描述
ALL(或ALL PREVILEGES)授予所有權限
USAGE不授予權限。這將創建一個用戶並允許他登錄,但不允許其他操作,如update/select 等
實例:
例如:
sql>grant select,insert,update,delete on test.user to mql@localhost identified by ‘123456′;
給本地的用戶mql分配可對數據庫test的user表進行select,insert,update,delete操作的權限,並設定口令為123456。若mql用戶不存在,則將自動創建此用戶. 具體的權限控制在sql.db表中可以查看到.也可直接對這個表進行更新操作進行權限的修改.
sql>grant all privileges on test.* to mql@localhost identified by ‘123456′;
給本地用戶mql分配可對數據庫test所有表進行所有操作的權限,並設定口令為123456。
sql>grant all privileges on *.* to mql@localhost identified by ‘123456′;
給本地用戶mql分配可對所有數據庫的所有表進行所有操作的權限,並設定口令為123456。
sql>grant all privileges on *.* to mql2@61.127.46.128 identified by ‘123456′;
給來自61.127.46.128的用戶mql2分配可對所有數據庫的所有表進行所有操作的權限,並設定口令為123456。
REVOKE
REVOKE和作用和GRANT相反,語法格式為:
REVOKE privileges ON 數據庫名[.表名] FROM user_name
例如:
創建用戶Bob,密碼為“bob”,但不給他任何權限:
GRANT usage on * to Bob identified by ’bob’;
授予Bob在books數據庫中的查詢和插入權限:
GRANT select, insert on books.* to Bob;
取消Bob在books數據庫中的所有權限:
REVOKE all on books.* from Bob;
注:需要指出的是,REVOKE all...僅僅是回收用戶的權限,並不刪除用戶。在SQL中,用戶信息存放在sql.User中。SQL可以通過DROP USER來徹底刪除一個用戶,其用法為:
DROP USER user_name;
例如,要刪除用戶Bob,可以用:
DROP USER Bob;
三、事務控制(commit, rollback, set transaction)
commit, rollback, set transaction來進行事務處理,保證數據庫不包括不完整的操作結果,只有全部語句都成功執行后,事務處理才算成功,若其中有一個語句執行失敗,則整個處理就算失敗,並恢復到處理前的狀態。
四、數據定義(create table, drop table, alter table, create view, drop view, create index, drop index, create schema, drop schema, create domain, alter domain, drop domain)
Create table 語法:
Create table Tablename (
列名稱1, 數據類型,
列名稱2, 數據類型,
….
)


Drop table 語法:
Drop table Tablename ; 這樣做與delete,alter的區別是,drop table直接刪除了整張表,delete是刪除表里面的記錄值,alter是改變表結構。

刪除了這張表之后在想查找表中的記錄,則會有找不到目標文件的error。
Alter table語法:
Alter table語句用於在已有的表中添加、修改或刪除列。
1.添加列
Alter table tablename
Add column_name datatype

注意在新添加的列時,alter table允許null值添加,如果強制not null系統會報error:
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'test22' cannot be added to non-empty table 'VendorEntity' because it does not satisfy these conditions.

2、刪除列
Alter table tablename
Drop column column_name

3、改變列表的數據類型
Alter table tablename
Alter column column_name datatype

SQL server中的數據類型:
Character 字符串:
| 數據類型 |
描述 |
存儲 |
| char(n) |
固定長度的字符串。最多 8,000 個字符。 |
n |
| varchar(n) |
可變長度的字符串。最多 8,000 個字符。 |
|
| varchar(max) |
可變長度的字符串。最多 1,073,741,824 個字符。 |
|
| text |
可變長度的字符串。最多 2GB 字符數據。 |
|
Unicode 字符串:
| 數據類型 |
描述 |
存儲 |
| nchar(n) |
固定長度的 Unicode 數據。最多 4,000 個字符。 |
|
| nvarchar(n) |
可變長度的 Unicode 數據。最多 4,000 個字符。 |
|
| nvarchar(max) |
可變長度的 Unicode 數據。最多 536,870,912 個字符。 |
|
| ntext |
可變長度的 Unicode 數據。最多 2GB 字符數據。 |
|
Binary 類型:
| 數據類型 |
描述 |
存儲 |
| bit |
允許 0、1 或 NULL |
|
| binary(n) |
固定長度的二進制數據。最多 8,000 字節。 |
|
| varbinary(n) |
可變長度的二進制數據。最多 8,000 字節。 |
|
| varbinary(max) |
可變長度的二進制數據。最多 2GB 字節。 |
|
| image |
可變長度的二進制數據。最多 2GB。 |
|
Number 類型:
| 數據類型 |
描述 |
存儲 |
| tinyint |
允許從 0 到 255 的所有數字。 |
1 字節 |
| smallint |
允許從 -32,768 到 32,767 的所有數字。 |
2 字節 |
| int |
允許從 -2,147,483,648 到 2,147,483,647 的所有數字。 |
4 字節 |
| bigint |
允許介於 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間的所有數字。 |
8 字節 |
| decimal(p,s) |
固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 之間的數字。 p 參數指示可以存儲的最大位數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。 s 參數指示小數點右側存儲的最大位數。s 必須是 0 到 p 之間的值。默認是 0。 |
5-17 字節 |
| numeric(p,s) |
固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 之間的數字。 p 參數指示可以存儲的最大位數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。 s 參數指示小數點右側存儲的最大位數。s 必須是 0 到 p 之間的值。默認是 0。 |
5-17 字節 |
| smallmoney |
介於 -214,748.3648 和 214,748.3647 之間的貨幣數據。 |
4 字節 |
| money |
介於 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之間的貨幣數據。 |
8 字節 |
| float(n) |
從 -1.79E + 308 到 1.79E + 308 的浮動精度數字數據。 參數 n 指示該字段保存 4 字節還是 8 字節。float(24) 保存 4 字節,而 float(53) 保存 8 字節。n 的默認值是 53。 |
4 或 8 字節 |
| real |
從 -3.40E + 38 到 3.40E + 38 的浮動精度數字數據。 |
4 字節 |
Date 類型:
| 數據類型 |
描述 |
存儲 |
| datetime |
從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 3.33 毫秒。 |
8 bytes |
| datetime2 |
從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 100 納秒。 |
6-8 bytes |
| smalldatetime |
從 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度為 1 分鍾。 |
4 bytes |
| date |
僅存儲日期。從 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 |
3 bytes |
| time |
僅存儲時間。精度為 100 納秒。 |
3-5 bytes |
| datetimeoffset |
與 datetime2 相同,外加時區偏移。 |
8-10 bytes |
| timestamp |
存儲唯一的數字,每當創建或修改某行時,該數字會更新。timestamp 基於內部時鍾,不對應真實時間。每個表只能有一個 timestamp 變量。 |
|
其他數據類型:
| 數據類型 |
描述 |
| sql_variant |
存儲最多 8,000 字節不同數據類型的數據,除了 text、ntext 以及 timestamp。 |
| uniqueidentifier |
存儲全局標識符 (GUID)。 |
| xml |
存儲 XML 格式化數據。最多 2GB。 |
| cursor |
存儲對用於數據庫操作的指針的引用。 |
| table |
存儲結果集,供稍后處理。 |
未完待續。。。
博主:海寧
聯系:whnsspu@163.com
