SqlServer 與 MySQL 語句對比區別
SqlServer版本:SqlServer 2008
MySQL版本: MySQL 5.5
執行符號:
MySQL :分號';'
SqlServer :字元'GO'
自增列:MySQL必須要索引,不能設定增量;
預設值:MySQL預設值不用加括號;SqlServer可加或不加;
--MySQL
CREATE TABLE tabName(
ID INTPRIMARYKEY AUTO_INCREMENT,
Value INTDEFAULT 12
) AUTO_INCREMENT= 100ENGINE=MyISAM DEFAULTCHARSET=utf8;
--SqlServer
CREATE TABLE tabName(
ID INTIDENTITY(100,1)PRIMARYKEY,
Value INTDEFAULT(12)
)
查看錶結構定義:
--SqlServer
EXEC sp_help'tabName'
--MySQL
DESC tabName
更改表名:
--SqlServer
EXEC sys.sp_rename@objname=N'tabName',@newname= 'newTabName'
--MySQL
ALTER TABLE tabName RENAME newTabName
更改欄位型別:
--SqlServer
ALTER TABLE[dbo].[tabName]ALTERCOLUMN [ID] BIGINT
--MySQL
ALTER TABLE tabName MODIFY IDBIGINT
更改欄位名:
--SqlServer
EXEC sys.sp_rename@objname=N'tabName.ID',@newname='IewID',@objtype='column'
--MySQL
ALTER TABLE tabName CHANGE IDIewIDBIGINT
新增欄位:(一樣)
--SqlServer
ALTER TABLE[dbo].[tabName]
--MySQL
ALTER TABLE tabName ADD NAMENVARCHAR(200)NULL
刪除欄位:
--SqlServer
ALTER TABLE[dbo].[tabName]DROPCOLUMN NAME
--MySQL
ALTER TABLE tabName DROP NAME
新增主鍵/外來鍵或約束:
--SqlServer
ALTER TABLE[dbo].[tabName]ADDCONSTRAINT pk_tabNamePRIMARYKEY (id);
--MySQL
ALTER TABLEtabNameADD CONSTRAINT pk_tabNamePRIMARYKEYtabName(id);
ALTER TABLEsubTabNameADD CONSTRAINT fk_subTabName_tabNameFOREIGNKEYsubTabName(fid)REFERENCEStabName(id);
刪除主鍵/外來鍵或約束:
--SqlServer(統一語法)
ALTER TABLE[dbo].[tabName]DROPCONSTRAINT pk_tabName
--MySQL
ALTER TABLEtabNameDROP CONSTRAINT constaintName
ALTER TABLEtabNameDROP PRIMARY KEY pk_tabName
ALTER TABLE subTabName DROP FOREIGNKEYfk_subTabName_tabName
刪除表:
--SqlServer
DROP TABLEtabName,TabName2;
--MySQL
DROP TABLE IF EXISTS tabName,TabName2;
#######################################################################################
建立檢視:
--MySQL
CREATE ORREPLACEVIEW VtabName
AS
SELECT *FROMtabName
WITH CHECK OPTION;
--SqlServer
CREATE VIEWVtabName
AS
SELECT *FROMtabName
WITH CHECK OPTION;
檢視結構和定義:
--MySQL
DESC VtabName;
SHOW CREATEVIEWVtabName;
SHOW TABLE STATUS LIKE 'VtabName';
--SqlServer
sp_help VtabName
sp_helptext VtabName
刪除檢視:
--MySQL
DROP VIEWtabName;
DROP VIEW IF EXISTS tabName;
--SqlServer
DROP VIEWtabName;
#######################################################################################
建立索引:
--MySQL
CREATE TABLEtabName(id INT NOTNULL,KEYindName(id));
ALTER TABLEtabNameADD INDEX indName(Value);
CREATE UNIQUE INDEX indName ONtabName(Value);
--SqlServer
CREATE TABLE tabName(IDINTIDENTITY(100,1)CONSTRAINTPK_tabNamePRIMARYKEY)
CREATE UNIQUE INDEX indName ONtabName(Value);
重建索引:
--MySQL
REPAIR TABLE tabName QUICK;
--SqlServer
DBCC DBREINDEX('dbo.tabName','',100)
ALTER INDEXindNameON tabName REBUILD;
ALTER INDEX ALL ON tabNameREORGANIZE;
刪除索引:
--MySQL
ALTER TABLEtabNameDROP INDEX indName;
ALTER TABLEtabNameDROP PRIMARY KEY pk_tabName;
ALTER TABLEsubTabNameDROP FOREIGN KEY fk_subTabName_tabName;
DROP INDEX indName ON tabName;
--SqlServer
DROP INDEX indName ON tabName;
ALTER TABLE tabName DROP CONSTRAINTPK_tabName
檢視索引:
--MySQL
SHOW INDEX FROM tabName;
--SqlServer
SELECT *FROMsys.indexesWHEREobject_id= OBJECT_ID('tabName')
SELECT * FROM sys.sysindexesWHEREid = OBJECT_ID('tabName')
#######################################################################################
檢視儲存過程/函式定義:
--MySQL
SHOW CREATE{PROCEDURE | FUNCTION }name;
SHOW {PROCEDURE| FUNCTION } STATUS[ LIKE 'pattern'];
SELECT * FROM information_schema.RoutinesWHEREROUTINE_NAME='name';
--SqlServer
exec sp_helpf_getdate
exec sp_helptextf_getdate
SELECT * FROM information_schema.RoutinesWHEREROUTINE_NAME='name';
儲存過程:
--MySQL
DELIMITER //
CREATE PROCEDUREsp_name(INparam1 INT,OUTparam2INT)
BEGIN
{sql_statement}
END//
DELIMITER ;
CALL sp_name();
DROP PROCEDUREIFEXISTS sp_name;
--SqlServer
CREATE PROCEDUREsp_name(@param1INT,@param2INTOUTPUT)
AS
BEGIN
{sql_statement}
END
GO
EXEC sp_name();
DROP PROCEDUREsp_name;
函式:
--MySQL
DELIMITER //
CREATE FUNCTIONfn_name()
RETURNS Decimal(10,2)
RETURN 3.14;
//
DELIMITER ;
SELECT fn_name();
DROP PROCEDUREIFEXISTS fn_name;
--SqlServer
CREATE FUNCTIONdbo.fn_name()
RETURNS Decimal(10,2)
AS
BEGIN
RETURN 3.14
END
GO
SELECT dbo.fn_name();
DROP FUNCTIONdbo.fn_name;
觸發器:
--MySQL
DELIMITER //
CREATE TRIGGERtr_name
{ AFTER|BEFORE } { INSERT| UPDATE | DELETE}
ON tabName
FOR EACHROW
BEGIN
{sql_statement;}
END
DELIMITER ;
DROP TRIGGER IF EXISTS tr_name;
--SqlServer
CREATE TRIGGERdbo.tr_name
ON [dbo].[tabName]
{ FOR|AFTER | INSTEAD OF}{ INSERT | UPDATE| DELETE }
AS
BEGIN
{sql_statement;}
END
GO
DROP TRIGGER dbo.tr_name
#######################################################################################
迴圈語句:
--MySQL(1至100之和)
WHILE 迴圈:
DELIMITER //
CREATE PROCEDURETESTPRO()
BEGIN
DECLARE I,K INTDEFAULT 0 ;
WHILE I<= 100DO
SET K=I + K;
SET I=I + 1;
END WHILE;
SELECT K;
END;//
DELIMITER ;
REPEAT UNTIL 迴圈:
DELIMITER //
CREATE PROCEDURETESTPRO()
BEGIN
DECLARE I,K INTDEFAULT 0 ;
REPEAT
SET K=I + K;
SET I=I + 1;
UNTIL I>100
END REPEAT;
SELECT K;
END;//
DELIMITER ;
LOOP 迴圈:
DELIMITER //
CREATE PROCEDURETESTPRO()
BEGIN
DECLARE I,K INTDEFAULT 0 ;
LABEL: LOOP
SET K=I + K;
SET I=I + 1;
IF I>100THEN
LEAVE LABEL;
END IF;
END LOOP;
SELECT K;
END;//
DELIMITER ;
CALL TESTPRO();
DROP PROCEDUREIFEXISTS TESTPRO;
--SqlServer
DECLARE @I INT = 1
DECLARE @K INT = 0
WHILE @I<= 100
BEGIN
SET @K = @K + @I
SET @I = @I + 1
END
SELECT @K
遊標:
--MySQL(引數名稱不能與列明一樣)
DELIMITER //
CREATE PROCEDURETESTPRO()
BEGIN
DECLARE FName varchar(50);
DECLARE LName varchar(50);
DECLARE IsDone BOOLEAN DEFAULTFALSE;
DECLARE cursor_name CURSOR FOR SELECT FirstName,LastNameFROMPerson;
DECLARE CONTINUE HANDLER FOR NOT FOUNDSETIsDone = TRUE;
OPEN cursor_name;
LABEL: LOOP
FETCH cursor_name INTO FName,LName;
IF IsD