『壹』 sql Server 和 MySql 語法和關鍵字的區別
1. MySQL支持enum,和set類型,SQL Server不支持
2. MySQL不支持nchar,nvarchar,ntext類型
3. MySQL的遞增語句是AUTO_INCREMENT,而MS SQL是identity(1,1)
4. MS SQL默認到處表創建語句的默認值表示是((0)),而在MySQL裡面是不允許帶兩括弧的
5. MySQL需要為表指定存儲類型
6. MS SQL識別符是[],[type]表示他區別於關鍵字,但是MySQL卻是 `,也就是按鍵1左邊的那個符號
7. MS SQL支持getdate()方法獲取當前時間日期,但是MySQL裡面可以分日期類型和時間類型,獲取當前日期是current_date
(),當前完整時間是 now()函數
8. MS SQL不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法
9. MySQL支持insert into table1 set t1 = „‟, t2 = „‟ ,但是MS SQL不支持這樣寫
10. MySQL支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1),
(1,1), (1,1)
11. MySQL在創建表時要為每個表指定一個存儲引擎類型,而MS SQL只支持一種存儲引擎
12. MySQL不支持默認值為當前時間的datetime類型(MS SQL很容易做到),在MySQL裡面 是用timestamp類型
13. MS SQL裡面檢查是否有這個表再刪除,需要這樣:if exists (select * from dbo.sysobjects where
id = object_id(N'uc_newpm') and OBJECTPROPERTY(id,N'IsUserTable')=1)
但是在MySQL裡面只需要 DROP TABLE IF EXISTS cdb_forums;
14. MySQL支持無符號型的整數,那麼比不支持無符號型的MS SQL就能多出一倍的最大數 存儲
15. MySQL不支持在MS SQL裡面使用非常方便的varchar(max)類型,這個類型在MS SQL里
面既可做一般數據存儲,也可以做blob數據存儲
16. MySQL創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder)
在MS SQL裡面必須要:create unique nonclustered index
index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers (username
asc,appid asc)
17. MySQL text欄位類型不允許有默認值
18. MySQL的一個表的總共欄位長度不超過65XXX。
19. 一個很表面的區別就是MySQL的安裝特別簡單,而且文件大小才110M(非安裝版),相
比微軟這個龐然大物,安裝進度來說簡直就是.....
20. MySQL的存儲過程只是出現在最新的版本中,穩定性和性能可能不如MS SQL。
21. 同樣的負載壓力,MySQL要消耗更少的CPU和內存,MS SQL的確是很耗資源。
22. mysql的ifnull()函數對應sql的isnull()函數;
23. mysql的存儲過程中變數的定義去掉@;
24. mysql的每句結束要用";"
25. SQLServer存儲過程的AS在MySql中需要用begin .....end替換
26. 字元串連接用concat()函數;如 SQLServer: Temp=‟select * from ‟+‟tablename‟+…+…
MySql:Temp=concat(‟select * from‟, ‟tablecname‟,…,…)
27. mysql的uuid()對應mssql的GUID();
28. MySql的out對應SQLServer的output,且mysql 的out要放在變數的前面,SQLServer
的output放在變數後面
29. MySql out,in,inout的區別——MySQL 存儲過程 「in」 參數:跟 C 語言的函數參 數的值傳遞類似, MySQL
存儲過程內部可能會修改此參數,但對 in 類型參數的修改,對調用者(caller)來說是不可見的(not visible)。MySQL 存儲過程 「out」
參數:從存儲過程內部傳值給調用者。在存儲過程內部,該參數初始值為 null,無論調用者是否給存儲過程參數設置值。MySQL 存儲過程 inout 參數跟 out
類似,都可以從存儲過程內部傳值給調用者。不同的是:調用者還可以通過 inout 參數傳遞值給存儲過程。
30. MySQL的if語句為 if (條件) then end if; 或者 If (條件) then Else End if 或者
If(條件)then Elseif (注意不能寫成 Else if ) Elseif … End if
31. Mysql的Execute對應SqlServer的exec; (注意:必須想下面這樣調用) Set @cnt=‟select * from
表名‟; Prepare str from @cnt; Execute str;
32. MySql存儲過程調用其他存儲過程用call Call 函數名(即SQLServer的存儲過程名)(‟參數1‟,‟參數2‟,……)
33. mysql的日期
1) 獲得當前日期函數:curdate(),current_date()
2) 獲得當前時間函數:curtime();
3) 獲得當前日期+時間:now();
4) MySQL dayof... 函數:dayofweek(), dayofmonth(), dayofyear()分別返回日期參
數,在一周、一月、一年中的位置。
5) (註:周日=1,周一=2,周二=3,……)
6) 返回本月的天數:select day(last_day(now()));
7) MySQL 為日期增加一個時間間隔:date_add()
8) select date_add(CURRENT_DATE(),interval „要增加的天數‟ day) as Fdate
9) MySQL 為日期減去一個時間間隔:date_sub()
10) select date_sub('1998-01-01 00:00:00', interval '1 1:1:1'
day_second);
11) MySQL 日期、時間相減函數:datediff(date1,date2), timediff(time1,time2)
12) MySQL 拼湊日期、時間函數:makdedate(year,dayofyear),
maketime(hour,minute,second)
13) 例:select makedate(2001,31); -- '2001-01-31'
14) select makedate(2001,32); -- '2001-02-01'
15) 本周時間(起始)
16) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-2 day) as
Fdate
17) 本周時間(結束)
18) select date_add(CURRENT_DATE(),interval dayofweek(curdate())+3 day) as
Fdate
19) 上周時間(起始)
20) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())+5 day) as
Fdate
21) 上周時間(結束)
22) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-1 day) as
Fdate
23) 本月時間(起始)
24) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) as Fdate
25) 本月時間(結束)
26) Select date_add(current_date(),interval day(last_day(CURDATE()))
-day(CURDATE()) day) as Fdate
27) 上月時間(起始)
28) select DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())
DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY)))- 1
day) as Fdate
29) 上月時間(結束)
30) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY) as Fdate
31) 今年時間(起始)
32) select makedate(year(curdate()),1) as FDate
33) 今年時間(結束)
34) select DATE_SUB(makedate(year(curdate())+1,1) ,INTERVAL 1 day) as
Fdate
35) 去年時間(起始)
36) select makedate(year(curdate())-1,1) as Fdate
37) 去年時間(結束)
38) select DATE_SUB(makedate(year(curdate()),1) ,INTERVAL 1 day) as
FDate
39) DATE_FORMAT(date,format):根據format字元串格式化date值。下列修飾符 可以被用在format字元串中
40) %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語前綴的月份的日期(1st,
2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat) %d 月份中的天數,
數字(00……31) %e 月份中的天數, 數字(0……31) %m 月, 數字(01……12) %c 月, 數字(1……12) %b
縮寫的月份名字(Jan……Dec) %j 一年中的天數(001……366) %H 小時(00……23) %k 小時(0……23) %h 小時(01……12)
%I 小時(01……12) %l 小時(1……12) %i 分鍾, 數字(00……59) %r 時間,12 小時(hh:mm:ss [AP]M) %T
時間,24 小時(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM
41) %w 一個星期中的天數(0=Sunday ……6=Saturday ) %U 星期(0……52), 這里星期天是星期的第一天 %u
星期(0……52), 這里星期一是星期的第一天 %% 一個文字「%」。
42) 例:所有的其他字元不做解釋被復制到結果中。 mysql> select DATE_FORMAT('1997-10-04
22:23:00', '%W %M %Y'); ->'Saturday October 1997' mysql>select
DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
43) -> '22:23:00'
44) mysql>select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b
%j');
45) ->'4th 97 Sat 04 10 Oct 277'
46) mysql>select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S
%w');
47) ->'22 22 10 10:23:00 PM 22:23:00 00 6'
34. MySql存儲過程中沒有return函數,在MySql中可以用循環和out參數代替 If EXISTS(SELECT * FROM
T_Chance WHERE FCustID=CostomerID) return 0 改寫為: (在參數中定義一個out變數:out temp
varchar(100);) BEGIN Loop1:loop SELECT count(*) FROM T_Chance WHERE
FCustID=CostomerID int @cnt If @cnt>0 then begin set temp=0; leave loop1;
end; end if end loop loop1;
35. (13) select @a=count(*) from VW_Action 在mySql中修改為:select count(*) from
VW_Action into @a;
36. (14)MySQL中沒有top關鍵字,需要用limit代替且放在後面
注意,在MySQL中的limit不能放在子查詢內,limit不同與SQLServer,它可 以規定范圍 limit a,b——范圍a-b SQL SERVER
: select top 8 * from table1 MYSQL: select * from table1 limit 5;
37. (15)即使存儲過程沒有參數也要寫括弧「()」
38. (16) 當一個存儲過程中有創建臨時表時 create procere up_test () begin drop table if
exists tb1; create TEMPORARY table tb1//注意添加TEMPORARY table ( id int, name
varchar(20) );//注意最後加分號 insert tb1 values('1','jim'); select * from tb1; end
39. (17)建表中自增長問題: create table user ( Id varchar(10) primary key
auto_increment not null, Name varchar(20) not null, Password varchar(20),
create_date datetime ); auto_increment 自增長
40. (18) "Unable to convert MySQL date/time value to
System.DateTime"這是因為在日期
列中有"0000-00-00"數據值,要修正這個問題,你可以把這些數據設為null,或者在連接字元串中設置"Allow Zero Datetime=True"
。 41. (19) MySQL視圖的FROM子句不允許存在子查詢,因此對於SQL Server中FROM
子句帶有子查詢的視圖,需要手工進行遷移。可通過消除FROM子句中的子查詢,或將FROM子句中的子查詢重構為一個新的視圖來進行遷移。
『貳』 15個MySQL常用基本SQL語句
在學習SQL語句之前,首先需要區分幾個概念,我們常說的資料庫是指資料庫軟體,例如MySQL、Oracle、SQL Server等,而本文提到的資料庫是指資料庫軟體中的一個個用於存儲數據的容器。
在MySQL中,資料庫稱為database,數據表稱為table,一個資料庫軟體中有多個資料庫(databases),每個資料庫中又可以有多個數據表(tables),最終,數據是存儲在數據表中。
資料庫和數據表之間的關系可以用下面這個圖來表示,對於一個資料庫來說,有多個數據表。
在正式開始寫SQL語句之前,需要說明兩點。
這里通過MySQL Workbench來寫SQL代碼,在Workbench中,執行一條SQL語句的方式有兩種。
了解了這之後,接下來介紹一些常見的命令,分兩部分:資料庫常用命令和數據表常用命令。
1、查看有哪些資料庫
2、創建資料庫
創建一個名為Testdb的資料庫。
3、創建資料庫並指定編碼格式
有些時候,為了防止中文亂碼,創建資料庫的時候需要指定編碼格式。
4、使用某個資料庫
使用mydb這個資料庫,或者進入mydb這個資料庫。
5、刪除資料庫
刪除Testdb這個資料庫。
1、查看有哪些數據表
進入某個資料庫之後,想查看有哪些數據表,SQL語句為:
mydb是一個新建的資料庫,所以自然是沒有數據表。
2、創建數據表
建表SQL語句格式為:
說明: 每個欄位以逗號分隔,最後一個欄位不加逗號。
例如,給定一個學員信息表,如下表所示。
根據以上表格,建表SQL語句如下。
以上語句中,primary key表示主鍵,意思是這個欄位作為記錄的唯一標識,就像每個人的身份證號,都是唯一確定的。
3、查看錶結構
查看錶結構的SQL命令為:
執行該命令會顯示表stuinfo的基本結構,例如有哪些欄位,每個欄位是什麼類型,誰是主鍵等。
4、修改數據表
修改數據表通過drop子句進行,比如,建完表後,想增加一個欄位,SQL語句的格式為:
想在指定位置增加一個欄位,例如,在某個欄位後增加一個欄位,SQL語句的格式為:
如果在某個欄位之前增加欄位,用before即可。
例如,在欄位age後增加一個欄位major(專業),SQL語句為:
執行這個命令,再通過describe查看錶結構,會發現表中多了一個欄位major。
如果要刪除major這個欄位,通過drop子句,SQL語句為:
5、重命名表
重命名表通過alter+rename來實現,SQL語句格式為:
這里為了不影響之前創建的表,我們創建一個新表,SQL語句如下。
以上創建一個名為stuInfoTest的表,現在想將它的名稱改成stuinfotest1,SQL語句為:
6、刪除數據表
刪除數據表通過drop進行,SQL語句格式為:
例如,刪除數據表stuinfotest1,SQL語句為:
7、插入記錄
此時的表stuinfo是空的,沒有數據,我們要向表中插入記錄。
插入記錄通過insert into進行,SQL語句格式為:
例如,向表stuinfo插入一條記錄,SQL語句為:
注意:上方是一條SQL語句,為了可讀性換行,記住一條SQL語句默認以分號結尾。
如果需要一次性插入多條記錄,SQL語句格式為:
例如,向表stuinfo再插入兩條記錄,SQL語句為:
注意:如果設置了主鍵,插入記錄的主鍵欄位是不能重復的,也就是不能插入重復的記錄。
作業:大家可以按照上述方法將上面的學員信息表中的所有記錄都插入表stuinfo中。
8、查詢記錄
有了數據之後,就可以查詢記錄了,查詢記錄通過select子句進行。
例如,想查詢表stuinfo中的所有記錄,SQL語句為:
執行之後,就可以看到表stuinfo中的所有記錄了。
如果想查詢符合某個條件的記錄,就要用到where子句了,SQL格式為:
例如,想查詢stuid為20161001的記錄,SQL語句為:
9、刪除記錄
刪除記錄通過delete子句進行,SQL語句格式為:
例如,想刪除stuid為20161002的記錄,SQL語句為:
10、修改記錄
修改記錄通過update子句進行,update就是更新的意思,SQL語句格式為:
例如,想將學號(stuid)為20161001的記錄的姓名(stuname)更新為Jack,SQL語句為:
以上,就是MySQL中的基本SQL語句。
零基礎如何學習數據分析?查看下方專欄。
『叄』 mysql的語句和sql語句是一樣的嗎
總體差不多,但有些小區別;我列給你看看:1 mysql支持enum,和set類型,sql server不支持
2 mysql不支持nchar,nvarchar,ntext類型
3 mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)
4 msms默認到處表創建語句的默認值表示是((0)),而在mysql裡面是不允許帶兩括弧的
5 mysql需要為表指定存儲類型
6 mssql識別符是[],[type]表示他區別於關鍵字,但是mysql卻是 `,也就是按鍵1左邊的那個符號
7 mssql支持getdate()方法獲取當前時間日期,但是mysql裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數
8 mssql不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法
9 mysql支持insert into table1 set t1 = 『』, t2 = 『』 ,但是mssql不支持這樣寫
10 mysql支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
11 mssql不支持limit語句,是非常遺憾的,只能用top 取代limt 0,N,row_number() over()函數取代limit N,M
12 mysql在創建表時要為每個表指定一個存儲引擎類型,而mssql只支持一種存儲引擎
13 mysql不支持默認值為當前時間的datetime類型(mssql很容易做到),在mysql裡面是用timestamp類型
14 mssql裡面檢查是否有這個表再刪除,需要這樣:
if exists (select * from dbo.sysobjects where id = object_id(N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
但是在mysql裡面只需要 DROP TABLE IF EXISTS cdb_forums;
15 mysql支持無符號型的整數,那麼比不支持無符號型的mssql就能多出一倍的最大數存儲
16 mysql不支持在mssql裡面使用非常方便的varchar(max)類型,這個類型在mssql裡面既可做一般數據存儲,也可以做blob數據存儲
17 mysql創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder) 在mssql裡面必須要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers
(username asc,appid asc)
18 mysql text欄位類型不允許有默認值
19mysql的一個表的總共欄位長度不超過65XXX。
20一個很表面的區別就是mysql的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是.....
21mysql的管理工具有幾個比較好的,mysql_front,和官方那個套件,不過都沒有SSMS的使用方便,這是mysql很大的一個缺點。
22mysql的存儲過程只是出現在最新的版本中,穩定性和性能可能不如mssql。
23 同樣的負載壓力,mysql要消耗更少的CPU和內存,mssql的確是很耗資源。
24php連接mysql和mssql的方式都差不多,只需要將函數的mysql替換成mssql即可。
25mysql支持date,time,year類型,mssql到2008才支持date和time。
『肆』 SQL和MySQL有什麼區別
mssql和mysql的區別
mssql 是微軟的那個 SQL Server,運行於windows 2000,2003等平台
mysql 是個開源的資料庫Server,可運行在windows平台、unix\\linux平台,其標准版是免費的,可以到www.mysql.com 看看
asp\\php只是一種解釋語言,不一定mssql不能用php,也不一定mysql非得用php,只不過asp-mssql,php-mysql是一種常用的組合
SQL資料庫完全手冊_1
SQL是Structured Quevy Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。
##1 二、SQL資料庫數據體系結構
SQL資料庫的數據體系結構基本上是***結構,但使用術語與傳統關系模型術語不同。在SQL中,關系模式(模式)稱為「基本表」(base table);存儲模式(內模式)稱為「存儲文件」(stored file);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^:
##1 三、SQL語言的組成
在正式學習SQL語言之前,首先讓我們對SQL語言有一個基本認識,介紹一下SQL語言的組成:
1.一個SQL資料庫是表(Table)的集合,它由一個或多個SQL模式定義。
2.一個SQL表由行集構成,一行是列的序列(集合),每列與行對應一個數據項。
3.一個表或者是一個基本表或者是一個視圖。基本表是實際存儲在資料庫的表,而視圖是由若干基本表或其他視圖構成的表的定義。
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應。
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。
6.SQL用戶可以是應用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶介面,供交互環境下的終端用戶使用。
##1 四、對資料庫進行操作
SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
下面我們將分別介紹:
##2 (一)數據定義
SQL數據定義功能包括定義資料庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^)
1.資料庫的建立與刪除
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為:
CREATE DATABASE <資料庫名> 〔其它參數〕
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。
例:要建立項目管理資料庫(xmmanage),其語句應為:
CREATE DATABASE xmmanage
(2) 資料庫的刪除:將資料庫及其全部內容從系統中刪除。
其語句格式為:DROP DATABASE <資料庫名>
例:刪除項目管理資料庫(xmmanage),其語句應為:
DROP DATABASE xmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。
(1)基本表的定義:基本表是非導出關系,其定義涉及表名、列名及數據類型等,其語句格式為:
CREATE TABLE〔<資料庫名>.〕<表名>
(<列名> 數據類型 〔預設值〕 〔NOT NULL / NULL〕
〔,<列名> 數據類型 〔預設值〕 〔NOT NULL / NULL〕〕......
〔,UNIQUE (列名〔,列名〕......)〕
〔,PRIMARY KEY(列名)〕
〔,FOREIGN KEY(列名〔,列名〕......)REFERENCE <表名>(列名〔,列名〕......)〕
〔,CHECK(條件)〕 〔其它參數〕)
其中,〈資料庫名〉.〕指出將新建立的表存放於該資料庫中;
新建的表由兩部分組成:其一為表和一組列名,其二是實際存放的數據(即可在定義表的同時,直接存放數據到表中);
列名為用戶自定義的易於理解的名稱,列名中不能使用空格;
數據類型為上面所介紹的幾種標准數據類型;
〔NOT NULL/NULL〕指出該列是否允許存放空值,SQL語言支持空值的概念,所謂空值是「不知道」或「無意義」的值,值得注意的是數據「0」和空格都不是空值,系統一般默認允許為空值,所以當不允許為空值時,必須明確使用NOT NULL;
〔,UNIQUE〕將列按照其規定的順序進行排列,如不指定排列順序,則按列的定義順序排列;
〔PRIMARY KEY〕用於指定表的主鍵(即關系中的主屬性),實體完整性約束條件規定:主鍵必須是唯一的,非空的;
〔,FOREIGN KEY (列名〔,列名〕......) REFERENCE<表名>(列名〔,列名〕......)〕是用於指定外鍵參照完整性約束條件,FOREIGN KEY指定相關列為外鍵,其參照對象為另外一個表的指定列,即使用REFERENCE引入的外表中的列,當不指定外表列名時,系統將默認其列名與參照鍵的列名相同,要注意的是:使用外鍵時必須使用參照,另外數據的外鍵參照完整性約束條件規定:外鍵的值要麼與相對應的主鍵相同,要麼為空值(具體由實現系統不同而異)
〔,CHECK〕用於使用指定條件對存入表中的數據進行檢查,以確定其合法性,提高數據的安全性。
例:要建立一個學生情況表(student)
CREATE TABLE student //創建基本表student
(st_class CHAR(8),// 定義列st_class班級,數據類型為8位定長字元串
st_no CHAR(10) NOT NULL,//定義列st_no學號,類型為10位定長字元串,非空
st_name CHAR(8) NOT NULL,//定義列st_name姓名,類型為8位定長字元串,非空
st_sex CHAR(2),//定義列st_sex性別,類型為2位定長字元串
st_age SMALLINT,//定義列st_age年齡,類型為短整型
PRIMARY KEY (st_no))//定義st_no學號為主鍵。
例:要建立課程設置表(subject)
CREATE TABLE subject//創建基本表subject
(su_no CHAR(4) NOT NULL,// 定義列su_no課號,類型為4位定長字元串,非空
su_subject CHAR(20) NOT NULL,// 定義列su_subject課程名,類型為20位定長字元串,非空
su_credit INTEGER,// 定義列su_credit學分,類型為長整數
su_period INTEGER,//定義列su_period學時,類型為長整數
su_preno CHAR(4),//定義列su_preno先修課號,類型為4位定長字元串
PRIMARY KEY(su_no))//定義su_no課號為主鍵。
例:要建立學生選課表(score)
CREATE TABLE score //創建基本表score
(st_no CHAR(10),//定義列st_no學號,類型為10位定長字元串
su_no CHAR(4),//定義列su_no課號,類型為4位定長字元串
sc_score INTEGER NULL,//定義列sc_score,類型為長整形,可以為空值
FOREIGN KEY (st_no) REFERENCE student,//從表student中引入參照外鍵st_no,以確保本表與表student的關聯與同步
FOREIGN KEY (suno) REFERENCE subject)//從表subject中引入參照外鍵su_no,以確保本表與表subject的關聯與同步
(2)基本表的刪除:用以從資料庫中刪除一個基本表及其全部內容,其語句格式為:
DROP TABLE〔<資料庫名>.〕表名
例如:將上面建立的表都刪除
DROP TABLE student,subject,score
(3)基本表的修改:在基本表建立並使用一段時間後,可能需要根據實際要求對基本表的結構進行修改,即增加新的屬性或刪除屬性。
增加屬性的語句格式為:
ALTER TABLE 〔<資料庫名>.〕表名 ADD
(<列名> 數據類型 〔預設值〕 〔NOT NULL / NULL〕
〔,<列名> 數據類型〔預設值〕〔NOT NULL / NULL〕〕......
〔,UNIQUE (列名〔,列名〕......)〕
〔,PRIMARY KEY(列名)〕
〔,FOREIGN KEY(列名〔,列名〕......) REFERENCE <表名>(列名〔,列名〕......)〕
〔,CHECK(條件)〕〔其它參數〕)
例如:在基本表student中加入列stborn出生日期,數據類型為DATE,且不能為空值
ALTER TABLE student ADD (stborn DATE NOT NULL)
刪除屬性的語句格式為:
ALTER TABLE 〔<資料庫名>.〕表名 DROP
( <列名> 數據類型 〔預設值〕〔NOT NULL / NULL〕
〔,<列名> 數據類型 〔預設值〕〔NOT NULL / NULL〕〕......)
例如:將基本表student中的列st_age刪除
ALTER TABLE student DROP (st_age)
3.視圖定義與刪除
在SQL中,視圖是外模式一級數據結構的基本單位。它是從一個或幾個基本表中導出的表,是從現有基本表中抽取若乾子集組成用戶的「專用表」。這種構造方式必須使用SQL中的SELECT語句來實現。在定義一個視圖時,只是把其定義存放在系統的數據中,而並不直接存儲視圖對應的數據,直到用戶使用視圖時才去求得對應的數據。
(1)視圖的定義:定義視圖可以使用CREATE VIEW語句實現,其語句格式為:
CREATE VIEW 視圖名 AS SELECT語句
從一個基本表中導出視圖:
例:從基本表student中導出只包括女學生情況的視圖
CREATE VIEW WOMANVIEW AS //創建一個視圖WOMANVIEW
SELECT st_class,st_no,st_name,st_age //選擇列st_class,st_no,st_name,st_age顯示
FROM student //從基本表student引入
WHERE st_sex=『女』//引入條件為性別為「女」,注意字元變數都使用單引號引用
從多個基本表中導出視圖:
例如:從基本表student和score中導出只包括女學生且分數在60分以上的視圖
CREATEVIEW WOMAN_SCORE AS //定義視圖WOMANSCORE
SELECT student.st_class,student.st_no,student.st_name,student.st_age,score.sc_score //有選擇性顯示相關列
FROM student.score //從基本表student和score中引入
WHERE student.st_sex=『女』AND score.sc_score>=60 AND student.st_no=score.st_no //選擇條件:性別為「女」 且分數在60分以上。並使用st_no將兩表聯系起來。
以後如果進行這一視圖的應用,則只需使用語句
SELECT * FROM WOMAN_SCORE //其中「*」為通配符,代表所有元素
(2)視圖的刪除:用於刪除已不再使用的視圖,其語句格式如下:
DROP VIEW 視圖名
例:將上面建立的WOMAN_SCORE視圖刪除
DROP VIEW WOMAN_SCORE
4.索引的定義與刪除
索引屬於物理存儲概念,而不是邏輯的概念。在SQL中拋棄了索引概念,直接使用主鍵概念。值得一提的是,有些關系DBMS同時包括索引機制和主鍵機制,這里我們推薦使用主鍵機制,因為它對系統資源佔用較低且效率較高。
(1)索引的定義:索引是建立在基本表之上的,其語句格式為:
CREATE 〔UNIQUE〕 INDEX 索引名 ON
〔<資料庫名>.〕表名(列名 〔ASC/DESC〕〔,列名 〔ASC/DESC〕〕......)
這里,保留字UNIQUE表示基本表中的索引值不允許重復,若預設則表示索引值在表中允許重復;DESC表示按索引鍵降序排列,若預設或ASC表示升序排列。
例:對基本表student中的st_no和st_age建立索引,分別為升序與降序,且索引值不允許重復
CREATE UNIQUE INDEX STINDEX ON//創建索引STINDEX
student(st_no ASC,st_age DESC)//對student中的st_no和st_age建立索引
(2)索引的刪除:
DROP INDEX 索引名
例:刪除上面建立的索引STINDEX
DROP INDEX STINDEX
##2 (二)數據查詢
SQL是一種查詢功能很強的語言,只要是資料庫存在的數據,總能通過適當的方法將它從資料庫中查找出來。SQL中的查詢語句只有一個:SELECT,它可與其它語句配合完成所有的查詢功能。SELECT語句的完整語法,可以有6個子句。完整的語法如下:
SELECT 目標表的列名或列表達式集合
FROM 基本表或(和)視圖集合
〔WHERE條件表達式〕
〔GROUP BY列名集合
〔HAVING組條件表達式〕〕
〔ORDER BY列名〔集合〕…〕
整個語句的語義如下:從FROM子句中列出的表中,選擇滿足WHERE子句中給出的條件表達式的元組,然後按GROUPBY子句(分組子句)中指定列的值分組,再提取滿足HAVING子句中組條件表達式的那些組,按SELECT子句給出的列名或列表達式求值輸出。ORDER子句(排序子句)是對輸出的目標表進行重新排序,並可附加說明ASC(升序)或DESC(降序)排列。
『伍』 mysql和sql的區別
SQL的含義是"Structured Query Language",中文叫做"結構化查詢語言」。
包括SQLserver在內的所有關系型資料庫都是採用的SQL語言。
雖然都是SQL語言,但是不同的資料庫產品在內部實現機制上並不一樣,所以同樣的應用,SQL語言的優化手段也不一樣。
mysql是開源SQL資料庫,不是什麼小型資料庫,mysql同樣可以用於任何千萬級別以上的應用,比如facebook和推特就是應用了mysql,當然它們也應用了包括鍵值資料庫,緩沖層等等一系列手段。
mysql的內部機制和大部分商業資料庫有一定差別,所以國內很多人並不了解mysql,因為他們只知道學校裡面教的那些東西,自己沒有什麼學習能力,所以不了解mysql的真正實力。
除了關系型資料庫以外,近幾年還有一個NoSQL比較火,一般主要以鍵值資料庫為主。這個可以等你以後有興趣了再學。
『陸』 SQL Server 和 MySql 語法和關鍵字的區別
一、首先我們來看一下兩者的本質區別有哪些:
1.二者所遵循的基本原則是它們的主要區別:開放vs保守
2.從發行費用上來說,MySQL不全是免費,但很便宜
3.純粹就性能而言,MySQL是相當出色的,因為它包含一個預設桌面格式MyISAM。MyISAM 資料庫與磁碟非常地兼容而不佔用過多的CPU和內存;當提及軟體的性能,SQL伺服器的穩定性要比它的競爭對手強很多。但是,這些特性也要付出代價的。
總體上來說,兩者各有優缺點,總結如下:
優點:
MYSQL短小精悍,容易上手,操作簡單,免費供用的。相對其它資料庫有特色又實用的語法多一些。SQL怎麼也算是大型資料庫,穩定,能做一般大系統的數據倉庫,運行速度明顯比MYSQL快N多(海量數據下這個優勢顯而易見)。
缺點:
MYSQL難擔當大系統的數據倉庫,運行速度慢,不夠穩定,有掉線的情況。SQL SERVER價格貴(當然沒說5元盜版),使用起來比MYSQL要難一些,畢竟東西大了說道多點。
二、語法和關鍵字區別
1. MySQL支持enum,和set類型,SQL Server不支持
2. MySQL不支持nchar,nvarchar,ntext類型
3. MySQL的遞增語句是AUTO_INCREMENT,而MS SQL是identity(1,1)
4. MS SQL默認到處表創建語句的默認值表示是((0)),而在MySQL裡面是不允許帶兩括弧的
5. MySQL需要為表指定存儲類型
6. MS SQL識別符是[],[type]表示他區別於關鍵字,但是MySQL卻是 `,也就是按鍵1左邊的那個符號
7. MS SQL支持getdate()方法獲取當前時間日期,但是MySQL裡面可以分日期類型和時間類型,獲取當前日期是current_date (),當前完整時間是 now()函數
8. MS SQL不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法
9. MySQL支持insert into table1set t1 = 『』, t2 = 『』 ,但是MS SQL不支持這樣寫
10. MySQL支持insert into tabl1values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
11. MySQL在創建表時要為每個表指定一個存儲引擎類型,而MS SQL只支持一種存儲引擎
12. MySQL不支持默認值為當前時間的datetime類型(MS SQL很容易做到),在MySQL裡面是用timestamp類型
等等。。。。還有很多,這些都需要我們在日常學習和工作中總結認識。
『柒』 mysql和sql一樣嗎
MySQL是在90年代中期開發的。是市場上第一個可用的開源資料庫之一,今天有很多MySQL的替代變種但是,變體之間的差異並不重要因為它們使用相同的語法,並且基本功能也保持不變。
mysql和sql一樣的區別
MySQL是一種RDBMS,它允許保持資料庫中存在的數據MySQL的發音為「我的SQL」,但它也被稱為「我的續集」它以聯合創始人Michael,Widenius的女兒的名字命名MySQL提供對資料庫的多用戶訪問,在Linux發行版之上,此RDBMS系統與PHP和Apache,Web、Server的組合一起使用MySQL使用SQL語言來查詢資料庫。
SQL是一種用於操作資料庫的語言MySQL是市場上第一個可用的開源資料庫之一SQL用於訪問,更新和操作資料庫中的數據MySQL是一種RDBMS,它允許保持資料庫中存在的數據SQL是結構化查詢語言MySQL是一個使用MYSQL存儲,檢索修改和管理資料庫的RDBMS、SQL是一種查詢語言,而MYSQL是資料庫軟體。
『捌』 SQLServer和MySql語法和關鍵字的區別詳解
1. MySQL支持enum,和set類型,SQL Server不支持
2. MySQL不支持nchar,nvarchar,ntext類型
3. MySQL的遞增語句是AUTO_INCREMENT,而MS SQL是identity(1,1)
4. MS SQL默認到處表創建語句的默認值表示是((0)),而在MySQL裡面是不允許帶兩括弧的
5. MySQL需要為表指定存儲類型
6. MS SQL識別符是[],[type]表示他區別於關鍵字,但是MySQL卻是 `,也就是按鍵1左邊的那個符號
7. MS SQL支持getdate()方法獲取當前時間日期,但是MySQL裡面可以分日期類型和時間類型,獲取當前日期是current_date (),當前完整時間是 now()函數
8. MS SQL不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法
9. MySQL支持insert into table1 set t1 = „‟, t2 = „‟ ,但是MS SQL不支持這樣寫
10. MySQL支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
11. MySQL在創建表時要為每個表指定一個存儲引擎類型,而MS SQL只支持一種存儲引擎
12. MySQL不支持默認值為當前時間的datetime類型(MS SQL很容易做到),在MySQL裡面 是用timestamp類型
13. MS SQL裡面檢查是否有這個表再刪除,需要這樣:if exists (select * from dbo.sysobjects where id = object_id(N'uc_newpm') and OBJECTPROPERTY(id,N'IsUserTable')=1) 但是在MySQL裡面只需要 DROP TABLE IF EXISTS cdb_forums;
14. MySQL支持無符號型的整數,那麼比不支持無符號型的MS SQL就能多出一倍的最大數 存儲
15. MySQL不支持在MS SQL裡面使用非常方便的varchar(max)類型,這個類型在MS SQL里 面既可做一般數據存儲,也可以做blob數據存儲
16. MySQL創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder) 在MS SQL裡面必須要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers (username asc,appid asc)
17. MySQL text欄位類型不允許有默認值
18. MySQL的一個表的總共欄位長度不超過65XXX。
19. 一個很表面的區別就是MySQL的安裝特別簡單,而且文件大小才110M(非安裝版),相 比微軟這個龐然大物,安裝進度來說簡直就是.....
20. MySQL的存儲過程只是出現在最新的版本中,穩定性和性能可能不如MS SQL。
21. 同樣的負載壓力,MySQL要消耗更少的CPU和內存,MS SQL的確是很耗資源。
22. mysql的ifnull()函數對應sql的isnull()函數;
23. mysql的存儲過程中變數的定義去掉@;
24. mysql的每句結束要用";"
25. SQLServer存儲過程的AS在MySql中需要用begin .....end替換
26. 字元串連接用concat()函數;如 SQLServer: Temp=‟select * from ‟+‟tablename‟+…+… MySql:Temp=concat(‟select * from‟, ‟tablecname‟,…,…)
27. mysql的uuid()對應mssql的GUID();
28. MySql的out對應SQLServer的output,且mysql 的out要放在變數的前面,SQLServer 的output放在變數後面
29. MySql out,in,inout的區別——MySQL 存儲過程 「in」 參數:跟 C 語言的函數參 數的值傳遞類似, MySQL 存儲過程內部可能會修改此參數,但對 in 類型參數的修改,對調用者(caller)來說是不可見的(not visible)。MySQL 存儲過程 「out」 參數:從存儲過程內部傳值給調用者。在存儲過程內部,該參數初始值為 null,無論調用者是否給存儲過程參數設置值。MySQL 存儲過程 inout 參數跟 out 類似,都可以從存儲過程內部傳值給調用者。不同的是:調用者還可以通過 inout 參數傳遞值給存儲過程。
30. MySQL的if語句為 if (條件) then end if; 或者 If (條件) then Else End if 或者 If(條件)then Elseif (注意不能寫成 Else if ) Elseif … End if
31. Mysql的Execute對應SqlServer的exec; (注意:必須想下面這樣調用) Set @cnt=‟select * from 表名‟; Prepare str from @cnt; Execute str;
32. MySql存儲過程調用其他存儲過程用call Call 函數名(即SQLServer的存儲過程名)(‟參數1‟,‟參數2‟,……)
33. mysql的日期
1) 獲得當前日期函數:curdate(),current_date()
2) 獲得當前時間函數:curtime();
3) 獲得當前日期+時間:now();
4) MySQL dayof... 函數:dayofweek(), dayofmonth(), dayofyear()分別返回日期參 數,在一周、一月、一年中的位置。
5) (註:周日=1,周一=2,周二=3,……)
6) 返回本月的天數:select day(last_day(now()));
7) MySQL 為日期增加一個時間間隔:date_add()
8) select date_add(CURRENT_DATE(),interval „要增加的天數‟ day) as Fdate
9) MySQL 為日期減去一個時間間隔:date_sub()
10) select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
11) MySQL 日期、時間相減函數:datediff(date1,date2), timediff(time1,time2)
12) MySQL 拼湊日期、時間函數:makdedate(year,dayofyear), maketime(hour,minute,second)
13) 例:select makedate(2001,31); -- '2001-01-31'
14) select makedate(2001,32); -- '2001-02-01'
15) 本周時間(起始)
16) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-2 day) as Fdate
17) 本周時間(結束)
18) select date_add(CURRENT_DATE(),interval dayofweek(curdate())+3 day) as Fdate
19) 上周時間(起始)
20) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())+5 day) as Fdate
21) 上周時間(結束)
22) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-1 day) as Fdate
23) 本月時間(起始)
24) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) as Fdate
25) 本月時間(結束)
26) Select date_add(current_date(),interval day(last_day(CURDATE())) -day(CURDATE()) day) as Fdate
27) 上月時間(起始)
28) select DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY)))- 1 day) as Fdate
29) 上月時間(結束)
30) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY) as Fdate
31) 今年時間(起始)
32) select makedate(year(curdate()),1) as FDate
33) 今年時間(結束)
34) select DATE_SUB(makedate(year(curdate())+1,1) ,INTERVAL 1 day) as Fdate
35) 去年時間(起始)
36) select makedate(year(curdate())-1,1) as Fdate
37) 去年時間(結束)
38) select DATE_SUB(makedate(year(curdate()),1) ,INTERVAL 1 day) as FDate
39) DATE_FORMAT(date,format):根據format字元串格式化date值。下列修飾符 可以被用在format字元串中
40) %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat) %d 月份中的天數, 數字(00……31) %e 月份中的天數, 數字(0……31) %m 月, 數字(01……12) %c 月, 數字(1……12) %b 縮寫的月份名字(Jan……Dec) %j 一年中的天數(001……366) %H 小時(00……23) %k 小時(0……23) %h 小時(01……12) %I 小時(01……12) %l 小時(1……12) %i 分鍾, 數字(00……59) %r 時間,12 小時(hh:mm:ss [AP]M) %T 時間,24 小時(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM
41) %w 一個星期中的天數(0=Sunday ……6=Saturday ) %U 星期(0……52), 這里星期天是星期的第一天 %u 星期(0……52), 這里星期一是星期的第一天 %% 一個文字「%」。
42) 例:所有的其他字元不做解釋被復制到結果中。 mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); ->'Saturday October 1997' mysql>select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
43) -> '22:23:00'
44) mysql>select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j');
45) ->'4th 97 Sat 04 10 Oct 277'
46) mysql>select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
47) ->'22 22 10 10:23:00 PM 22:23:00 00 6'
34. MySql存儲過程中沒有return函數,在MySql中可以用循環和out參數代替 If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID) return 0 改寫為: (在參數中定義一個out變數:out temp varchar(100);) BEGIN Loop1:loop SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt If @cnt>0 then begin set temp=0; leave loop1; end; end if end loop loop1;
35. (13) select @a=count(*) from VW_Action 在mySql中修改為:select count(*) from VW_Action into @a;
36. (14)MySQL中沒有top關鍵字,需要用limit代替且放在後面 注意,在MySQL中的limit不能放在子查詢內,limit不同與SQLServer,它可 以規定范圍 limit a,b——范圍a-b SQL SERVER : select top 8 * from table1 MYSQL: select * from table1 limit 5;
37. (15)即使存儲過程沒有參數也要寫括弧「()」
38. (16) 當一個存儲過程中有創建臨時表時 create procere up_test () begin drop table if exists tb1; create TEMPORARY table tb1//注意添加TEMPORARY table ( id int, name varchar(20) );//注意最後加分號 insert tb1 values('1','jim'); select * from tb1; end
39. (17)建表中自增長問題: create table user ( Id varchar(10) primary key auto_increment not null, Name varchar(20) not null, Password varchar(20), create_date datetime ); auto_increment 自增長
40. (18) "Unable to convert MySQL date/time value to System.DateTime"這是因為在日期 列中有"0000-00-00"數據值,要修正這個問題,你可以把這些數據設為null,或者在連接字元串中設置"Allow Zero Datetime=True" 。 41. (19) MySQL視圖的FROM子句不允許存在子查詢,因此對於SQL Server中FROM 子句帶有子查詢的視圖,需要手工進行遷移。可通過消除FROM子句中的子查詢,或將FROM子句中的子查詢重構為一個新的視圖來進行遷移。
『玖』 mysql語句和標准sql語句的區別,請詳細闡述
標准sql語句可以在任何資料庫中運用
而mysql語句是mysql資料庫為了使寫語句時更加方便快捷而自定義的的一些語法
兩者不具備可比性
如果要比較也是不同資料庫中的語法不同做比較
比如sql server、mysql、oracle之間的語法不同
『拾』 sql server和mysql的區別是什麼
區別如下:
1、SQL適合使用「.NET」,而MySQL可以與幾乎所有其他語言配對,如「PHP」。
2、sqlserver和mysql的語法不同。
3、SQL使用單個存儲引擎,而不是為MySQL提供的多個引擎等等。
實際上,每個現代Web應用程序和資料庫都起著至關重要的作用。由於當前Web開發的動態特性,即使是基本的應用程序也需要一些存儲,檢索和修改數據的機制。當然,隨著資料庫的重要性飆升,某些關系資料庫管理系統(RDBMS)也越來越受歡迎。
其中兩個系統是MySQL和SQL Server。雖然它們具有獨特的用例,但它們都執行相同的功能。它們運行不同的風格,但是共同基於SQL或結構化查詢語言。
因此,開發人員可以期待MySQL和SQL Server之間的一些相似之處,例如使用表來存儲數據,引用主鍵和外鍵,以及單個環境或伺服器中的多個資料庫。
將MySQL和SQL Server稱為現有的兩種最流行的RDBMS解決方案並不是不準確的,盡管Oracle和Postgres可能會對此有所說明。即使我們逐漸見證了從SQL向NoSQL的轉變,前者仍然是更具主導地位的存在。這意味著現在是學習MySQL或SQL Server的好時機。