北京艾銻無限為您整理:常用數(shù)據(jù)庫SQL語句大全
2020-02-09 15:10 作者:admin 瀏覽量:
迎戰(zhàn)疫情,艾銻無限用愛與您同行
為中國中小企業(yè)提供免費(fèi)IT外包服務(wù)

這次的肺炎疫情對(duì)中國的中小企業(yè)將會(huì)是沉重的打擊,據(jù)釘釘和微信兩個(gè)辦公平臺(tái)數(shù)據(jù)統(tǒng)計(jì)現(xiàn)有2億左右的人在家遠(yuǎn)程辦公,那么對(duì)于中小企業(yè)的員工來說不懂IT技術(shù)將會(huì)讓他們面臨的最大挑戰(zhàn)和困難。
電腦不亮了怎么辦?系統(tǒng)藍(lán)屏如何處理?辦公室的電腦在家如何連接?網(wǎng)絡(luò)應(yīng)該如何設(shè)置?VPN如何搭建?數(shù)據(jù)如何對(duì)接?服務(wù)器如何登錄?數(shù)據(jù)安全如何保證?數(shù)據(jù)如何存儲(chǔ)?視頻會(huì)議如何搭建?業(yè)務(wù)系統(tǒng)如何開啟等等一系列的問題,都會(huì)困擾著并非技術(shù)出身的您。
好消息是當(dāng)您看到這篇文章的時(shí)候,就不用再為上述的問題而苦惱,您只需撥打艾銻無限的全國免費(fèi)熱線電話:400 650 7820,就會(huì)有我們的遠(yuǎn)程工程師為您解決遇到的問題,他們可以遠(yuǎn)程幫您處理遇到的一些IT技術(shù)難題。
如遇到免費(fèi)熱線占線,您還可以撥打我們的24小時(shí)值班經(jīng)理電話:15601064618或技術(shù)經(jīng)理的電話:13041036957,我們會(huì)在第一時(shí)間接聽您的來電,為您提供適合的解決方案,讓您無論在家還是在企業(yè)都能無憂辦公。
那艾銻無限具體能為您的企業(yè)提供哪些服務(wù)呢?
艾銻無限始創(chuàng)于2005年,歷經(jīng)15年服務(wù)了5000多家中小企業(yè)并保障了幾十萬臺(tái)設(shè)備的正常運(yùn)轉(zhuǎn),積累了豐富的企業(yè)IT緊急問題和特殊故障的解決經(jīng)驗(yàn),制定了相對(duì)應(yīng)的解決方案。我們?yōu)槟钠髽I(yè)提供的IT服務(wù)分為三大版塊:
第一版塊是保障性IT外包服務(wù):如電腦設(shè)備運(yùn)維,辦公設(shè)備運(yùn)維,網(wǎng)絡(luò)設(shè)備運(yùn)維,服務(wù)器運(yùn)維等綜合性企業(yè)IT設(shè)備運(yùn)維服務(wù)。
第二版塊是功能性互聯(lián)網(wǎng)外包服務(wù):如網(wǎng)站開發(fā)外包,小程序開發(fā)外包,APP開發(fā)外包,電商平臺(tái)開發(fā)外包,業(yè)務(wù)系統(tǒng)的開發(fā)外包和后期的運(yùn)維外包服務(wù)。
第三版塊是增值性云服務(wù)外包:如企業(yè)郵箱上云,企業(yè)網(wǎng)站上云,企業(yè)存儲(chǔ)上云,企業(yè)APP小程序上云,企業(yè)業(yè)務(wù)系統(tǒng)上云,阿里云產(chǎn)品等后續(xù)的云運(yùn)維外包服務(wù)。
您要了解更多服務(wù)也可以登錄艾銻無限的官網(wǎng):
www.bjitwx.com查看詳細(xì)說明,
在疫情期間,您企業(yè)遇到的任何困境只要找到艾銻無限,能免費(fèi)為您提供服務(wù)的我們絕不收一分錢,我們?nèi)w艾銻人承諾此活動(dòng)直到中國疫情結(jié)束,我們將這次活動(dòng)稱為——春雷行動(dòng)。
以下還有我們?yōu)槟峁┑囊恍┘夹g(shù)資訊,以便可以幫助您更好的了解相關(guān)的IT知識(shí),幫您渡過疫情中辦公遇到的困難和挑戰(zhàn),艾銻無限愿和中國中小企業(yè)一起共進(jìn)退,因?yàn)槲覀兿嘈湃f物同體,能量合一,只要我們一起齊心協(xié)力,一定會(huì)成功。再一次祝福您和您的企業(yè),戰(zhàn)勝疫情,您和您的企業(yè)一定行。
北京艾銻無限為您整理:常用數(shù)據(jù)庫SQL語句大全
1、說明:創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE database-name
2、說明:刪除數(shù)據(jù)庫
drop database dbname
3、說明:備份sql server
--- 創(chuàng)建 備份數(shù)據(jù)的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創(chuàng)建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據(jù)已有的表創(chuàng)建新表:
A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:刪除新表
drop table tabname
6、說明:增加一個(gè)列
Alter table tabname add column col type注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說明:創(chuàng)建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個(gè)簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數(shù):select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個(gè)高級(jí)查詢運(yùn)算詞
A: UNION 運(yùn)算符
UNION 運(yùn)算符通過組合其他兩個(gè)結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B:EXCEPT 運(yùn)算符
EXCEPT運(yùn)算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時(shí) (EXCEPT ALL),不消除重復(fù)行。
C:INTERSECT 運(yùn)算符
INTERSECT運(yùn)算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL隨 INTERSECT 一起使用時(shí) (INTERSECT ALL),不消除重復(fù)行。
注:使用運(yùn)算詞的幾個(gè)查詢結(jié)果行必須是一致的。
12、說明:使用外連接
A、left (outer) join:
左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full/cross (outer) join:
全外連接:不僅包括符號(hào)連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。
12、分組:Group by:
一張表,一旦分組 完成后,查詢后只能得到組相關(guān)的信息。
組相關(guān)的信息:(統(tǒng)計(jì)信息) count,sum,max,min,avg 分組的標(biāo)準(zhǔn))
在SQLServer中分組時(shí):不能以text,ntext,image類型的字段作為分組依據(jù)
在selecte統(tǒng)計(jì)函數(shù)中的字段,不能和普通的字段放在一起;
13、對(duì)數(shù)據(jù)庫進(jìn)行操作:
分離數(shù)據(jù)庫: sp_detach_db;附加數(shù)據(jù)庫:sp_attach_db 后接表明,附加需要完整的路徑名
14.如何修改數(shù)據(jù)庫的名稱:
sp_renamedb 'old_name', 'new_name'
4.文章出處
https://mp.weixin.qq.com/s/ZLIogpD2sMD43MJRjwTSJg
艾銻無限告訴你:SQL 注入的原理及防范
什么是SQL注入?
SQL注入是一種非常常見的數(shù)據(jù)庫攻擊手段,SQL注入漏洞也是網(wǎng)絡(luò)世界中最普遍的漏洞之一。大家也許都聽過某某學(xué)長通過攻擊學(xué)校數(shù)據(jù)庫修改自己成績的事情,這些學(xué)長們一般用的就是SQL注入方法。
SQL注入其實(shí)就是惡意用戶通過在表單中填寫包含SQL關(guān)鍵字的數(shù)據(jù)來使數(shù)據(jù)庫執(zhí)行非常規(guī)代碼的過程。簡單來說,就是數(shù)據(jù)「越俎代庖」做了代碼才能干的事情。這個(gè)問題的來源是,SQL數(shù)據(jù)庫的操作是通過SQL語句來執(zhí)行的,而無論是執(zhí)行代碼還是數(shù)據(jù)項(xiàng)都必須寫在SQL語句之中,這就導(dǎo)致如果我們?cè)跀?shù)據(jù)項(xiàng)中加入了某些SQL語句關(guān)鍵字(比如說SELECT、DROP等等),這些關(guān)鍵字就很可能在數(shù)據(jù)庫寫入或讀取數(shù)據(jù)時(shí)得到執(zhí)行。
多言無益,我們拿真實(shí)的案例來說話。下面我們先使用SQLite建立一個(gè)學(xué)生檔案表。
SQL數(shù)據(jù)庫操作示例
import sqlite3
# 連接數(shù)據(jù)庫
conn = sqlite3.connect('test.db')
# 建立新的數(shù)據(jù)表
conn.executescript('''DROP TABLE IF EXISTS students;
CREATE TABLE students
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL);''')
# 插入學(xué)生信息
students = ['Paul','Tom','Tracy','Lily']
for name in students:
query = "INSERT INTO students (name) VALUES ('%s')" % (name)
conn.executescript(query);
# 檢視已有的學(xué)生信息
cursor = conn.execute("SELECT id, name from students")
print('IDName')
for row in cursor:
print('{0}{1}'.format(row[0], row[1]))
conn.close()
點(diǎn)擊運(yùn)行按鈕將會(huì)打印目前表中的內(nèi)容。上述程序中我們建立了一個(gè)test.db數(shù)據(jù)庫以及一個(gè)students數(shù)據(jù)表,并向表中寫入了四條學(xué)生信息。
那么SQL注入又是怎么一回事呢?我們嘗試再插入一條惡意數(shù)據(jù),數(shù)據(jù)內(nèi)容就是漫畫中的"Robert');DROP TABLE students;--",看看會(huì)發(fā)生什么情況。
SQL數(shù)據(jù)庫注入示例
conn = sqlite3.connect('test.db')
# 插入包含注入代碼的信息
name = "Robert');DROP TABLE students;--"
query = "INSERT INTO students (name) VALUES ('%s')" % (name)
conn.executescript(query)
# 檢視已有的學(xué)生信息
cursor = conn.execute("SELECT id, name from students")
print('IDName')
for row in cursor:
print('{0}{1}'.format(row[0], row[1]))
conn.close()
你將會(huì)發(fā)現(xiàn),運(yùn)行后,程序沒有輸出任何數(shù)據(jù)內(nèi)容,而是返回一條錯(cuò)誤信息:表單students無法找到!
這是為什么呢?問題就在于我們所插入的數(shù)據(jù)項(xiàng)中包含SQL關(guān)鍵字DROP TABLE,這兩個(gè)關(guān)鍵字的意義是從數(shù)據(jù)庫中清除一個(gè)表單。而關(guān)鍵字之前的Robert');使得SQL執(zhí)行器認(rèn)為上一命令已經(jīng)結(jié)束,從而使得危險(xiǎn)指令DROP TABLE得到執(zhí)行。也就是說,這段包含DROP TABLE關(guān)鍵字的數(shù)據(jù)項(xiàng)使得原有的簡單的插入姓名信息的SQL語句
"INSERT INTO students (name) VALUES ('Robert')"
變?yōu)榱送瑫r(shí)包含另外一條清除表單命令的語句
"INSERT INTO students (name) VALUES ('Robert');DROP TABLE students;--"
而SQL數(shù)據(jù)庫執(zhí)行上述操作后,students表單被清除,因而表單無法找到,所有數(shù)據(jù)項(xiàng)丟失。
如何防止SQL注入問題
那么,如何防止SQL注入問題呢?
大家也許都想到了,注入問題都是因?yàn)閳?zhí)行了數(shù)據(jù)項(xiàng)中的SQL關(guān)鍵字,那么,只要檢查數(shù)據(jù)項(xiàng)中是否存在SQL關(guān)鍵字不就可以了么?的確是這樣,很多數(shù)據(jù)庫管理系統(tǒng)都是采取了這種看似『方便快捷』的過濾手法,但是這并不是一種根本上的解決辦法,如果有個(gè)美國人真的就叫做『Drop Table』呢?你總不能逼人家改名字吧。
合理的防護(hù)辦法有很多。首先,盡量避免使用常見的數(shù)據(jù)庫名和數(shù)據(jù)庫結(jié)構(gòu)。在上面的案例中,如果表單名字并不是students,則注入代碼將會(huì)在執(zhí)行過程中報(bào)錯(cuò),也就不會(huì)發(fā)生數(shù)據(jù)丟失的情況——SQL注入并不像大家想象得那么簡單,它需要攻擊者本身對(duì)于數(shù)據(jù)庫的結(jié)構(gòu)有足夠的了解才能成功,因而在構(gòu)建數(shù)據(jù)庫時(shí)盡量使用較為復(fù)雜的結(jié)構(gòu)和命名方式將會(huì)極大地減少被成功攻擊的概率。
使用正則表達(dá)式等字符串過濾手段限制數(shù)據(jù)項(xiàng)的格式、字符數(shù)目等也是一種很好的防護(hù)措施。理論上,只要避免數(shù)據(jù)項(xiàng)中存在引號(hào)、分號(hào)等特殊字符就能很大程度上避免SQL注入的發(fā)生。
另外,就是使用各類程序文檔所推薦的數(shù)據(jù)庫操作方式來執(zhí)行數(shù)據(jù)項(xiàng)的查詢與寫入操作,比如在上述的案例中,如果我們稍加修改,首先使用execute()方法來保證每次執(zhí)行僅能執(zhí)行一條語句,然后將數(shù)據(jù)項(xiàng)以參數(shù)的方式與SQL執(zhí)行語句分離開來,就可以完全避免SQL注入的問題,如下所示:
SQL數(shù)據(jù)庫反注入示例
conn = sqlite3.connect('test.db')
# 以安全方式插入包含注入代碼的信息
name = "Robert');DROP TABLE students;--"
query = "INSERT INTO students (name) VALUES (?)"
conn.execute(query, [name])
# 檢視已有的學(xué)生信息
cursor = conn.execute("SELECT id, name from students")
print('IDName')
for row in cursor:
print('{0}{1}'.format(row[0], row[1]))
conn.close()
而對(duì)于PHP而言,則可以通過mysql_real_escape_string等方法對(duì)SQL關(guān)鍵字進(jìn)行轉(zhuǎn)義,必要時(shí)審查數(shù)據(jù)項(xiàng)目是否安全來防治SQL注入。
當(dāng)然,做好數(shù)據(jù)庫的備份,同時(shí)對(duì)敏感內(nèi)容進(jìn)行加密永遠(yuǎn)是最重要的。某些安全性問題可能永遠(yuǎn)不會(huì)有完美的解決方案,只有我們做好最基本的防護(hù)措施,才能在發(fā)生問題的時(shí)候亡羊補(bǔ)牢,保證最小程度的損失。