基於sqlserver的常用查詢、檢視、觸發器、儲存過程用法
首先在這申明,sqlserver是不區分大小寫的。
SqlServer插入語句
insert into <表名> [<屬性1><屬性2><屬性3>] values(<常量1><常量1><常量1>)
SqlServer修改資料語句
update <表名> set <列名>=<表示式>,<列名>=<表示式> [where <條件>]
SqlServer刪除資料語句
delete from <表名> [where <條件>]
查詢中消除重複的行
select distinct Sno from sc;
where子句後面常跟的查詢條件
- 比較—(=、<、>、>=、<=、!=、!>、!<(不小於)、)
- 確定範圍—-(between and、not between and)
- 確定集合—–(in、not in)
- 字元匹配——(like、not like)
- 空值——(is null,is not null)
- 多重條件—–(and、or、not)
下面是上述的例子
select Sname from student where sdept='cs' ;
select Sname from student where sage between 20 and 30;(如果用not between and 就是不在這個範圍的)
//使用謂詞來查詢屬性是否屬於指定集合元祖
select sname from student where sdept in('cs','ma','is');
select sname from student where sname like '劉%';
select sname from student where sname like '_勇';
// %用來代表任意長度的字串
// _下劃線代表是任意字元
select sno from sc where grade is not null;
select sname from student where sdept='cs' and sage<20;
order by子句
使用者可以用order by子句對查詢結果按照一個或多個屬性列進行排序,預設是升序。
select sno ,grade from sc where cno='3' order by grade desc;//升序是asc
聚集函式
- count(*) ——-統計元祖的個數
- count(distinct 列名)——統計某個列值的個數
- sum(distinct 列名)——–統計列的總和
- avg(distinct 列名)——-計算列的平均值
- max(distinct 列名)——-計算列的最大值
- min(distinct 列名)——-計算列的最小值
select AVG(grade) from sc ;
注意:
where 子句是不能用聚集函式作為條件表示式,聚集函式只能用於select 子句和group by 的having子句中。
group by子句
顧名思義,這個子句將查詢結果按照某一列或者多列值分組,值相等的為一組。對查詢結果分組是為了細化聚集函式作用物件,分組後,聚集函式將作用於每一組,每一組都有一個函式值。
select cno,COUNT(sno) from SC group by Cno;
//查詢課程號下對應的選課人數。
// *凡是在group by後面出現的欄位,必須要在select後面出現,或者該欄位以聚合函數出現在select後面* 詳細的理由如下:
//這句話的意思,就是將相同學號的grade列的屬性值求平均值
select sno ,avg(grade) from sc group by sno;
正確的結果:
![這裡寫圖片描述](https://img-blog.csdn.net/20171104185913643?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmVudXMzMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果這時你不寫sno,沒問題,你自己知道是個啥就ok。
但是如果你這時寫了個下面這個
select grade ,avg(grade) from sc group by sno;
//就會產生錯誤選擇列表中的列 ‘sc.Grade’ 無效,因為該列沒有包含在聚合函式或 GROUP BY 子句中。
//很明顯呀,你是按照學號排,你把分組之後的結果和grade放在一起,你覺得符合人之常情嗎,明白了沒,這麼通俗易懂!!!!!!
having
having一般是跟在group by子句後面,是對分組之後的資訊篩選。
where作用物件是基本表或者是檢視,而having作用於組,從中選擇滿足條件的組。
select sno from sc group by having count(cno)>2;
//查詢選修課程兩名以上的學號。
兩表等值連線查詢
連線查詢,連線主要通過他們的公共屬性。
select sname ,cno from SC,student where SC.Sno = Student.Sno;
//*注意在連線查詢的時候,一定要注意如果出現的屬性兩個表都有一定要加表名區分*
兩表自身連線
是在一個表中進行自身的連線。主要通過給表起兩個不同名字,讓相關心的欄位等值連線。
例子:在一個表中要查每門課的先修課的先修課。
select first.cno,second.cno from Course first,Course second where first.Cno = second.Cpno;
//*在自身連線中如果查詢條件中和select後面出現的欄位一致,前面以示區分的表別名要不一致,否則有問題。*
tip
在這裡我說一下,sql查詢是採用的巢狀迴圈連線演算法思想,就是在一個表中,我查詢到一條資料,然後從另一個表,一一去尋找等值關係的資料,在返回。
外連線
就是在兩個表進行連線查詢,如果查詢的結果有一方面是為空的,那麼該結果是不儲存的。
例子:比如查詢考生的選課情況,及成績,如果該同學沒有選課,那麼就查不到該學生,所以要是想顯示該學生,必須按照學生表為主,顯示。
select Student.Sno,sname,grade,cno from student,SC where Student.Sno =SC.Sno;//它會直接忽略沒有選課成績的學生資訊
select Student.Sno,sname,grade,cno from student left outer join sc on( Student.Sno =SC.Sno);//這種查詢就是外連線查詢。//注意哪個表在前就是以哪個表為主
//其實有外連線就是換個說法,順序不一樣,自己看吧。
多表連線
其實對於已經掌握了兩個表連線,在多幾張表,其實道理都是一樣的。它本質,還是兩個表進行連線,每兩個連線好了,在連線第三個等。
select student.sno,sc.cno,grade,cname from Student,SC,Course where Student.Sno = SC.Sno and SC.Cno = Course.Cno;
巢狀查詢(可以多層巢狀)
巢狀查詢語句可以在where子句和having中,需要注意的是巢狀查詢中不能在使用group by,因為group by只能對最終結果排序。
巢狀查詢如果子查詢的結果是一個值,可以用=代替in,如果是多個還是用in。
查詢沒有選修“計算機導論”或者 “高等數學”的學生。
思路:我們要查詢的學生的學號應該不在選修“計算機導論”或者 “高等數學”的學生學號中。
select sno from Student where Sno not in (select Sno from SC where Cno in(select Cno from Course where Cname in('計算機導論','高等數學')));
不相關子查詢
子類查詢的條件不依賴於父類,一般先執行子查詢,然後根據子查詢的結果用於父類查詢的條件。
select sname from Student where Sdept in (select Sdept from Student where Sname='劉晨')
//查詢和劉晨一個系的學生
//自身連線
select first.sname from Student first ,Student second where first.Sdept = second.Sdept and second.Sname='劉晨'
//查詢選修資訊系統的學生資訊
select sc.sno,sname from SC,Student where Cno in(select Cno from Course where Cname='資訊系統') and SC.sno=Student.sno
select student.sno,sname from SC,Student,Course where Student.Sno = SC.Sno and SC. cno= Course.Cno and Cname='資訊系統'
相關查詢
在主查詢中,每查詢一條記錄,需要重新做一次子查詢,這種稱為相關子查詢。
找出每一個學生它的成績是超過他所有選課平均成績的學生資訊
select sno,cno from SC x where grade>=(select AVG(grade) from sc y where y.Sno = x.Sno)
執行過程,外面的查詢一個學號,就要根據這個學號去找他的對應的選課門數,並且求平均值,如果符合條件就輸出。
//相關子查詢還是有難度,靠以後多試去理解。
帶有any(some)、all謂詞子查詢
- >any 大於子查詢結果中的某個值
- >all 大於子查詢的所有值
- !=any 不等於子查詢結果中的某個值
- !=all 不等於子查詢結果中的所有值
//查詢非計算機系中比計算機系任意一個學生年級小的學生。
select sname,sno from student where sage<any(select sage from student where sdept='cs') and sdept!='cs';
//查詢非計算機系中比計算機系所有學生年級小的學生。
select sname,sno from student where sage<any(select sage from student where sdept='cs') and sdept!='cs';
帶謂詞(Exists)的子查詢
Exists代表存在量詞,帶Exists的謂詞子查詢不返回任何資料,只產生邏輯真和邏輯假。
//連線查詢
select sname from SC,Student where SC.Sno = Student.Sno and Cno=1;
//謂詞查詢
select sname from Student where exists(select * from sc where SC.sno = student.sno and cno=1)
//他的執行過程,先從student表中每一條記錄拿學號和對應的sc.sno並且cno =1,如果符合條件將student中的sname儲存到結果集。
//如果內層查詢結果非空,則外層where子句返回真值,否則返回假值。
//由於exists引出的子查詢,其目標列通常用*表示,因為exists子查詢不返回真值,給出列名無意義。
//與exist對應的是no exists(不存在)
select sname from Student where no exists(select * from sc where SC.sno = student.sno and cno=1)
查詢同時選修“計算機導論”或者 “高等數學”的學生
思考:這兩門課沒有一門是他沒有選修的。
select sno,sname from Student where not exists (select * from Course where Cname in ('計算機導論','高等數學') and not exists (select * from SC where Sno =Student.Sno and Cno = Course.cno));
集合查詢
主要包括:並(union)、交(intersect)、差(except)。
//其實我並不明白存在的意義,明明可以用or、and處理,也許我還沒發現其中奧妙。
在集合操作union會自動去除重複的,而or是所有的包括重複,在集合中如果不要重複union all
差運算就是返回除去條件後的所有結果集。
//查詢選修課程1或者課程2的學生
select sno from SC where cno=1 union select sno from SC where Cno =2
select sno from SC where Cno =1 or Cno =2;
基於派生表的查詢
子查詢可以在from子句出現,這時子查詢生成臨時表,成為主查詢物件。
//查詢超過他選修所有課程成績平均值的學生
select sc.sno,cno from SC ,(select sno,AVG(grade) from SC group by(sno)) as avg_1(sno,avg_grade)
where avg_1.sno = SC.Sno and grade>avg_1.avg_grade
//該執行過程,在執行到from後面將結果集儲存在臨時表中,然後在進行條件比較,最終返回符合的結果。
//*如果子查詢中沒有聚合函式,或者計算式,可以無需指定別名*
檢視
檢視是從一個或幾個基本表(或檢視匯出的表),它與基本表不同,是一個虛表。資料庫中只存放檢視的定義,而不存放檢視對應的資料,這些資料仍然放在原來的基本表中,所以基本表資料一旦發生改變,檢視中查詢的資料也會隨著改變。
檢視可以和基本表一樣被查詢、刪除,也可以在新的檢視上定義新的檢視,但是對檢視的更新、修改則有規定。
記住往檢視中插資料、更改資料、刪除資料,都是和基本表一樣,只不過換了一個套路,將表名換成檢視名。
建立檢視
create view [<列名><列名><列名><列名>] as <子查詢> [with check option]
//with check option 表示對檢視進行update、insert、delete的時候保證操作的,滿足子查詢的條件表示式
//組成檢視的屬性列要麼全部省略要麼全部指定,不存在其他,如果省略,那麼列名就是子查詢select後面的列組成。
下面3中情況必須指明檢視的所有列名
1. 子查詢中不是單純的屬性名,而是聚合函式或者是列表達式。
2. 多表連線的時候,選出同名列作為檢視的欄位。
3. 需要為檢視起一個更合適的名字。
查詢檢視
SELECT 欄位 FROM 檢視名
//這裡欄位如果你建立檢視給了欄位名,就直接用,不然還是子查詢的select後面的屬性列名。
檢視的檢查
create view view3 as select sno,sname,sage,sdept from Student where sdept ='資訊系' with check option;
//在後面對檢視的操作中,增刪改,讀必須有條件就是部門是資訊系,最簡單你不能往檢視中加一個別的系的,這個還懂嗎!!!!!!!!!!!
檢視上的建立
建立選修c01並且grade>90檢視
create view view5 as select sname from view4 where grade >90;
//這個檢視就是基於view4之上,view4中有grade欄位。
虛擬列檢視
建立學生的姓名,出生日期的檢視
該查詢中包含計算公式,所以必須建立一個新的列,所以整個查詢的都要顯示的賦一個名字。
create view view6(sname,sbirth) as select sname,2017-sage from Student;
基於分組的檢視
查詢每一個學生多門選修的平均成績的檢視
該查詢中包含聚合函式,所以要顯示指定每一個屬性列。
create view view7 (sno,savg) as select sno,AVG(grade) from SC group by Sno;
刪除檢視
Drop view <檢視名> [CASCADE]
如果該檢視上海匯出其他檢視,那麼需要加上級聯操作,這樣才可以將級聯的檢視一起刪除。
注意:刪除檢視,只是從資料字典中刪除,並不影響基本本的資料
檢視的查詢
在view1中查詢年紀小於22的學生資訊
select * from view1 where sage <22;//你可以利用檢視中屬性列名去做你需要的條件。
檢視是可以和基本表進行連線的
select grade from sc,view4 where view4.sno =SC.Sno;
檢視的修改
由於檢視是不實際儲存資料的虛表,因此對檢視的更新最終還是要轉化為對基本表的更新操作
修改學號為9521102學生成績為100
update view5 set grade =100 where sno='9521102'
在view中增加一個學生資訊
insert into view7(sno,sname) values ('99999','老槍1');
刪除學生資訊
delete from view7 where sno='99999'
觸發器
觸發器是使用者定義在關係表上的一類由事件驅動的特殊過程。它主要實現更復雜的約束。
當特定事件(如對一個表的增刪改,事務的結束等)發生時,對規則的條件進行檢查,如果條件成立則執行規則中的動作,否則不執行該動作。規則中的動作體可以很複雜,通常是一段SQL儲存過程。
觸發器可以建立基本表或者檢視上。
觸發器的優點
- 觸發器是自動的
- 觸發器可以通過資料庫中的相關表進行層疊更改。
- 觸發器可以強制限制,這些限制比用check約束更復雜。
create trigger <觸發器名> on {table|view}
[with encryption] for {after|instead of} {insert|update|delete}
as
sql_statement
//觸發器啟用後所作的操作,例如檢查、回滾,插入,刪除
觸發器after、instead of區別
AFTER:觸發發生在SQL操作後,若發生錯誤,可利用回滾恢復原資料。
INSTEAD OF:觸發發生在SQL操作前,且如何操作由觸發器操作來實現。
INSTEAD OF 觸發器的主要優點是可以使不能更新的檢視支援更新。(為什麼說INSTEAD OF對於檢視的更新有很大作用,首先我們都知道檢視是虛表,不可以對基本表進行修改,所以在檢視上修改就是不可能,那麼你用觸發器的INSTEAD OF,就是代替執行,可以轉化為對基本表的執行)基於多個基表的檢視必須使用 INSTEAD OF 觸發器來支援引用多個表中資料的插入、更新和刪除操作。
每個表只能有一個同類型的INSTEAD OF觸發器
After觸發器:這類觸發器是在記錄已經改變完之後(after),才會被啟用執行,它主要是用於記錄變更後的處理或檢查,一旦發現錯誤,也可以用Rollback Transaction語句來回滾本次的操作。
Instead Of觸發器:這類觸發器一般是用來取代原本的操作,在記錄變更之前發生的,它並不去執行原來SQL語句裡的操作(Insert、Update、Delete),而去執行觸發器本身所定義的操作。
建立trigger的注意點
- After只能用於資料表上,instead of可以用於表與檢視上 允許建立多個同類操作的after觸發器,但同類的insteadof觸發器只能有一個
- 只有after觸發器才能設定執行次序 可以設定 為first 或 last
- 可以用系統儲存過程sp_settriggerorder設定 sp_settriggerorder @triggername = ‘MyTrigger’, @order = ‘first’, @stmttype = ‘UPDATE’
- 在對基礎表進行更新前激發 INSTEAD OF 觸發器 ALTER TRIGGER 語句更改了第一個或最後一個觸發器,則將除去 First 或 Last 特性
- 兩個觸發器完全相同,會先執行後建立的觸發器。執行的順序與建立的順序相反。
DELETED表和INSERTED表(記憶體表)
DELETED 表用於儲存 DELETE 和 UPDATE 語句所影響的行的副本。
INSERTED 表用於儲存 INSERT 和 UPDATE 語句所影響的行的副本。INSERTED 表中的行是觸發器表中新行的副本。
觸發器例子
建立一個觸發器禁止插入,修改課程表,出現相同的課程名
create trigger courese_trigger on course for update ,insert
as
if((select count(*) from course ,inserted where course.cname=inserted.cname)>1)//sql語言的編寫,後面會講,你看看吧。
//這個inserted表,會儲存你插入的資訊,從這個記憶體表中找到呢要插入的cname,來判斷表中要沒有此過程。
begin
print '存在相同的課程名,操作無法執行'//打印出錯資訊
rollback transaction//事務回滾,不做任何操作
end
建立觸發器 ,學生選修同一門課程不能超過5人
create trigger sc_trigger on sc for insert
as
if((select count(*) from sc,inserted where sc.cno = inserted.cno)>5)
begin
print '該課程選修人數超過5人,該操作無法執行'
rollback transaction//注意對於條件約束檢查,如果不滿足一定要執行回滾事件,不然該操作還是會執行。
end
建立觸發器在訂單表(ORDER)中插入或修改訂購數量(NUM),必須滿足客戶相應等級的數量上限和下限。
CREATE TRIGGER [CHECK_NUM] ON [ORDER] //在寫該題有個注意點,就是sqlserver如果你自己定義和保留字一樣,那麼需要加[]以區分,注意以下。
FOR INSERT, UPDATE
AS
IF UPDATE(NUM)//如果你這樣指定的話,只有修改num列的時候才會觸發該觸發器
BEGIN
//*由該例子我們可以看到if後面的條件我們要刪除轉化為存在、不存在、count(*)的比較*
IF NOT EXISTS(
SELECT * FROM INSERTED ,CUSTOMER,CUSTOMERLEVEL
WHERE INSERTED.CID=CUSTOMER.CID AND
CUSTOMERLEVEL.CLEVEL=CUSTOMER.CLEVEL AND
NUM NOT BETWEEN CUSTOMERLEVEL .NUMDOWN AND
CUSTOMERLEVEL .NUMUP )
//該例項判斷也可這樣
/*if((select count(*) from customerlevel,inserted ,customer,[order] where inserted.cid = customer.cid and customer.clevel= customerlevel.clevel and inserted.num between numdown and numup)<1)*/
BEGIN
PRINT '訂購數量違反了客戶的限額!'
ROLLBACK
END
END
基於instead of 的觸發器
create view view8 as select sno,sname from student//建立檢視
select * from view8;
create trigger studnet_trigger on view8
instead of insert//在插入檢視前操作
as
begin
insert into Student (Sno,sname)values ((select sno from inserted),(select sname from inserted))//通過這個可以看出,觸發器還是轉化對基本表的操作
end
insert into view8(sno,sname) values('88888','槍仔')//往檢視中插入資料,和往表中插入資料一致。
Transact-SQL
SQL作為結構化查詢語言,是標準的關係型資料庫通用的標準語言;T-SQL是在SQL基礎上擴充套件的SQL Server中使用的語言。你自己聯想oracle的pl/sql,和這個就在一個層面上。有了這個你就可以在sqlserver上面寫程式了。
Transact-SQL 變數是 Transact-SQL 批處理和指令碼中能夠儲存資料值的物件。宣告或定義變數後,批處理中的一個 Transact-SQL 語句可以設定變數值,而該批處理中後面的語句可以從變數獲得此值。
T-SQL 常用語法
如果你要完整的學習該語法
變數申明
指定一個名稱。 名稱的第一個字元必須為一個 @。
DECLARE @MyCounter int;
一個簡單例子:
求和
declare @x int// declare不能少。
declare @y int
declare @z int
set @x =10//賦值給常數需要加set
set @y = 20
set @z = @x+@y
select @x,@y,@z;
是不是很神奇啦啦
指定查詢學生的學號
declare @sno char(7)//這邊的資料型別,你最好對應表的資料型別一致。
set @sno ='9512101'
select * from student where sno = @sno;
//需要注意的是,你必須一起執行上述程式碼,否則就會出現你沒申明該變數的錯誤,注意一下。
begin..end
BEGIN
{ sql_statement | statement_block }
END
定義一系列一起執行的 Transact-SQL 語句
雖然所有的 Transact-SQL 語句在 BEGIN…END 塊內都有效,但有些 Transact-SQL 語句不應分組在同一批處理或語句塊中。
if….else
IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
在判斷語句中可以沒有else,另外這個中是不需要{},所以我們要把if放在begin….end程式碼塊中。
儲存過程
我們之前寫的T-SQL語言都是你匿名塊,每次執行的時候,都需要進行編譯,並且不能儲存到資料庫中。而過程和函式是命名塊,他們被編譯後儲存在資料庫中,稱為持久化儲存塊,可以反覆呼叫,執行速度快。
儲存過程是由過程化sql語句書寫的過程,這個過程經編譯和優化後儲存在資料庫伺服器中,使用時呼叫即可。
儲存過程定義
create procedure ([procedure_name] [引數1]
[引數2] [引數3] [引數n])
as
sql_statement
建立不帶引數的儲存過程
create procedure student1
as
begin
select distinct sname,sc.cno,grade from student,sc,course where student.sno = sc.sno and sc.cno = course.cno and sdept='計算機系'
end
exec student1//執行儲存過程
建立帶引數的儲存過程
create procedure student2(@sdept char(20))//裡面變數,這裡不加declare可能定義儲存過程的底層已經有了
as
begin
select distinct sname,sc.cno,grade from student,sc,course where student.sno = sc.sno and sc.cno = course.cno and [email protected]//裡面賦值,這裡不加set可能定義儲存過程的底層已經有了
end
exec student2 '數學系'//傳入真正執行的引數
建立引數有預設值的儲存過程
create procedure student3(@sdept char(20)='數學系')
as
begin
select distinct sname,sc.cno,grade from student,sc,course where student.sno = sc.sno and sc.cno = course.cno and [email protected]
end
exec student3
建立輸出儲存過程的值
create procedure produce1 (@cname varchar(20),@avg int output)//建立一個輸出引數
as
begin
select @avg = avg(grade) from sc,course where sc.cno = course.cno and [email protected]
//將執行結果的值賦值給輸出引數
end
declare @return_avg int//申明要列印的引數
exec produce1 'vb' ,@return_avg output//後面的語句執行會將儲存過程的輸出值賦值給定義的變數然後列印,output不能少。
print @return_avg
儲存過程稍微複雜例子
create procedure proceduce2 (@sno char(7),@cno char(10))
as
begin
if((select count(*) from sc where sc.cno = @cno)>5)
return 0
else
begin
if((select COUNT(*) from SC where [email protected])>3)
return -1//可以使用return標誌執行結束
else
insert into SC(Sno,cno) values(@sno,@cno)
return 1
end
end
declare @out int
exec @out = proceduce2 '9512101','C05' //可以直接將儲存過程的返回值賦值給變數
print @out
相關推薦
Oracle中檢視丶觸發器丶儲存過程/函式
檢視 檢視就是封裝了一條複雜查詢的語句。 語法 1.:CREATE VIEW 檢視名稱 AS 子查詢 語法 2:CREATE OR REPLACE VIEW 檢視名稱 AS 子查詢 語法 3:CREATE OR REPLACE VIEW 檢視名稱 AS 子查詢 WITH
mysql檢視所有觸發器以及儲存過程等操作集合
mysql 查詢表,檢視,觸發器,函式,儲存過程 1. mysql查詢所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '資料庫名' AND
SQL語句優化,索引,檢視,觸發器,儲存過程,函式等。
一,SQL優化 主要解決海量資料操作時的全表搜尋,所以減少不必要的全表搜尋是SQL優化的主要目的,下面總結一下常用的優化有哪些: 1,避免在where條件中使用!=或者<>,這樣會是的查詢放棄索引而進行全域性掃描
【機房重構】——檢視,觸發器,儲存過程的使用
在機房收費系統中,對多個表的查詢,要寫多個SQL是很麻煩的事情,為了方便我們寫程式碼,同時對程式碼進行解耦和,我們引用了檢視,觸發器,儲存過程。 一、是什麼? 檢視 從若干
基於sqlserver的常用查詢、檢視、觸發器、儲存過程用法
首先在這申明,sqlserver是不區分大小寫的。 SqlServer插入語句 insert into <表名> [<屬性1><屬性2><屬性3>] values(<常量1><常量
基於樹的查詢(二叉排序樹、平衡二叉樹、B樹、B+樹、伸展樹和紅黑樹)
本文主要介紹幾種比較重要的樹形結構: ① 二叉排序樹 ② 平衡二叉樹 ③ B樹 ④ B+樹 ⑤ 伸展樹 ⑥ 紅黑樹 分為三個問題來描述每種樹: ① 是什麼?主要應用? ② 有什麼特點(性質)? ③ 基於它的操作?
Django API、檢視和模板、Django投票系統
一、Django API 1.1 使用python shell 1.1.1 載入python shell 1. 使用如下命令來呼叫Python shell: (django_env) [[email protected]
【學習筆記】啟動Nginx、檢視nginx程序、檢視nginx服務主程序的方式、Nginx服務可接受的訊號、nginx幫助命令、Nginx平滑重啟、Nginx伺服器的升級
1.啟動nginx的方式:cd /usr/local/nginxls./nginx -c nginx.conf2.檢視nginx的程序方式:[[email protected] nginx
mysql批量查詢、修改表, 批量刪除儲存過程
場景:有的時候需要批量更新部分有規律的表或者修改其屬性。 處理方案:使用 函式CONCAT 來生成批量執行sql語句,再執行批量sql語句。 如: 批量刪除所有表 SELECT CONCAT( 'drop table ', table_name, '
Android7.0呼叫系統拍照、系統相簿(圖片壓縮、檢視原圖、許可權處理)
效果以及需求 檢視原圖可點選放大,可兩指放大等 1.PopupWindow的簡單使用 PopupWindow最基本的三個條件是一定要設定的:View contentView
基於sqlserver 實現查詢兩個經緯度之間的距離
查詢兩個經緯度之間的距離,可以實現按照距離排序。 --通過經緯度計算兩點之間的距離 ALTER FUNCTION [dbo].[fnGetDistanceNew] --LatBegin 開始維度 --LngBegin 開始經度 --29.490295,106
sqlserver檢視觸發器,儲存過程,檢視及表的一些命令
select name from sysobjects where xtype='TR' --所有觸發器 select name from sysobjects where xtype='P' --所有儲存過程 select name from sysobjects
mysql 查詢表,檢視,觸發器,函式,儲存過程
轉載自 http://www.cnblogs.com/sx2zx/p/6245887.html -1. mysql查詢所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '資料庫名' AND
檢視——觸發器——事務——儲存過程
1、什麼是檢視 檢視就是通過查詢得到一張虛擬表,然後儲存下來,下次用的直接使用即可2、為什麼要用檢視 如果要頻繁使用一張虛擬表,可以不用重複查詢3、如何用檢視create view teacher2course asselect * from teacher inner join course
2018.11.26檢視,觸發器.事物.儲存過程.函式.資料備份與恢復.流程控制
2018.11.26 一檢視 1什麼是檢視 檢視是有一張表或多張表的查詢結果構成的一張虛擬表,本質儲存一個 sql 語句在data檔案裡,當你呼叫它的時候就會執行這段sql語句.如果對檢視的記錄內容進行修改原本的資料記錄也會被修改,反之亦然. 2為什麼使用檢視 當我們
mysql 檢視,事務,儲存過程,觸發器
一 檢視 檢視是一個虛擬表(非真實存在),是跑到記憶體中的表,真實表是硬碟上的表。使用檢視我們可以把查詢過程中的臨時表摘出來,儲存下來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即可,但檢視有明顯地效率問題,並且檢視是存放在資料庫中的,如果我們程式中使用的sql
建立兩張物化檢視。寫一個儲存過程,包括把兩個物化檢視手動全部重新整理,並把查詢結果返回cursor
--建立兩張物化檢視--第一張物化檢視create materialized view mv_ref_user_phone_allas select * from v_ref_user_phone_all;--第二張物化檢視create materialized view m
2020重新出發,MySql基礎,MySql檢視&索引&儲存過程&觸發器
@[toc] # 檢視是什麼 **檢視在資料庫中的作用類似於窗戶,使用者可以通過這個視窗看到只對自己有用的資料。既保障了資料的安全性,又大大提高了查詢效率**。 **MySQL 檢視(View)是一種虛擬存在的表,同真實表一樣,檢視也由列和行構成,但檢視並不實際存在於資料庫中**。行和列的資料來自於定義檢
惠州學院-資料庫實驗6-觸發器和儲存過程
計算機科學系實驗報告(首頁) 課程名稱 資料庫系統概論 班級 14計科2班 實驗名稱 觸發器和儲存過程
SQLServer(語法二)————新增一列(T_SQL+儲存過程)
判斷列是否存在