继上篇 MySQL 基本操作语句 后,个人测试和补充了 sqlServer 与 MysqL 的 基本操作语句对比,主要是对比sql命令的一些差异,不作更多说明。
(由于MysqL 没有系统学习过,欢迎大侠们拍砖~~O(∩_∩)O~)
执行符号:
MysqL :分号';'
sqlServer :字符'GO'
自增列:MysqL必须要索引,不能设置增量;
默认值:MysqL默认值不用加括号;sqlServer可加或不加;
--MysqL
CREATE TABLE tabName(
ID INTPRIMARY KEY AUTO_INCREMENT,
Value INTDEFAULT 12
) AUTO_INCREMENT= 100 ENGINE=MyISAM DEFAULT CHARSET=utf8;
--sqlServer
CREATE TABLE tabName(
ID INTIDENTITY(100,1)PRIMARY KEY,
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]ALTER COLUMN [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 IDIewID BIGINT
添加字段:(一样)
--sqlServer
ALTER TABLE[dbo].[tabName]ADD NAME NVARCHAR(200)NULL
--MysqL
ALTER TABLE tabName ADD NAMENVARCHAR(200)NULL
删除字段:
--sqlServer
ALTER TABLE[dbo].[tabName]DROP COLUMN NAME
--MysqL
ALTER TABLE tabName DROP NAME
添加主键/外键或约束:
--sqlServer
ALTER TABLE[dbo].[tabName]ADD CONSTRAINT pk_tabNamePRIMARY KEY (id);
--MysqL
ALTER TABLEtabName ADD CONSTRAINT pk_tabNamePRIMARYKEY tabName(id);
ALTER TABLEsubTabName ADD CONSTRAINT fk_subTabName_tabNameFOREIGNKEY subTabName(fid)REFERENCES tabName(id);
删除主键/外键或约束:
--sqlServer(统一语法)
ALTER TABLE[dbo].[tabName]DROP CONSTRAINT pk_tabName
--MysqL
ALTER TABLEtabName DROP CONSTRAINT constaintName
ALTER TABLEtabName DROP PRIMARY KEY pk_tabName
ALTER TABLE subTabName DROP FOREIGNKEY fk_subTabName_tabName
删除表:
--sqlServer
DROP TABLEtabName,TabName2;
--MysqL
DROP TABLE IF EXISTS tabName,TabName2;
#######################################################################################
创建视图:
--MysqL
CREATE ORREPLACE VIEW VtabName
AS
SELECT *FROM tabName
WITH CHECK OPTION;
--sqlServer
CREATE VIEWVtabName
AS
SELECT *FROM tabName
WITH CHECK OPTION;
视图结构和定义:
--MysqL
DESC VtabName;
SHOW CREATEVIEW VtabName;
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,KEY indName(id));
ALTER TABLEtabName ADD INDEX indName(Value);
CREATE UNIQUE INDEX indName ONtabName(Value);
--sqlServer
CREATE TABLE tabName(IDINT IDENTITY(100,1)CONSTRAINT PK_tabNamePRIMARYKEY)
CREATE UNIQUE INDEX indName ONtabName(Value);
重建索引:
--MysqL
REPAIR TABLE tabName QUICK;
--sqlServer
DBCC DBREINDEX('dbo.tabName','',100)
ALTER INDEXindName ON tabName REBUILD;
ALTER INDEX ALL ON tabNameREORGANIZE;
删除索引:
--MysqL
ALTER TABLEtabName DROP INDEX indName;
ALTER TABLEtabName DROP PRIMARY KEY pk_tabName;
ALTER TABLEsubTabName DROP 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 *FROM sys.indexesWHERE object_id= OBJECT_ID('tabName')
SELECT * FROM sys.sysindexesWHERE id = OBJECT_ID('tabName')
#######################################################################################
查看存储过程/函数定义:
--MysqL
SHOW CREATE{ PROCEDURE | FUNCTION }name ;
SHOW {PROCEDURE | FUNCTION } STATUS[ LIKE 'pattern'];
SELECT * FROM information_schema.RoutinesWHERE ROUTINE_NAME='name';
--sqlServer
exec sp_helpf_getdate
exec sp_helptextf_getdate
SELECT * FROM information_schema.RoutinesWHERE ROUTINE_NAME='name';
存储过程:
--MysqL
DELIMITER //
CREATE PROCEDUREsp_name(IN param1 INT,OUTparam2 INT)
BEGIN
{sql_statement}
END//
DELIMITER ;
CALL sp_name();
DROP PROCEDUREIF EXISTS sp_name;
--sqlServer
CREATE PROCEDUREsp_name(@param1INT,@param2INT OUTPUT)
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 PROCEDUREIF EXISTS 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<= 100 DO
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 PROCEDUREIF EXISTS 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
游标:
DELIMITER //
CREATE PROCEDURETESTPRO()
BEGIN
DECLARE FName varchar(50);
DECLARE LName varchar(50);
DECLARE IsDone BOOLEAN DEFAULTFALSE;
DECLARE cursor_name CURSOR FOR SELECT FirstName,LastNameFROM Person;
DECLARE CONTINUE HANDLER FOR NOT FOUNDSET IsDone = TRUE;
OPEN cursor_name;
LABEL: LOOP
FETCH cursor_name INTO FName,LName;
IF IsDoneTHEN
LEAVE LABEL;
END IF;
SELECT CONCAT('Contact Name:',FName,LName)AS Name;
END LOOP;
CLOSE cursor_name;
END;//
DELIMITER ;
--sqlServer
DECLARE @LastName varchar(50),@FirstName varchar(50);
DECLARE contact_cursor CURSOR FOR SELECT LastName,FirstName FROM Person
OPEN contact_cursor;
FETCH NEXTFROM contact_cursorINTO @LastName,@FirstName;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT 'Contact Name: ' + @FirstName + ' '+ @LastName
FETCH NEXT FROM contact_cursorINTO @LastName,@FirstName;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
#######################################################################################
查看账户信息:
--MysqL
select Host,User,Passwordfrom MysqL.user;
show grantsfor 'username'@'localhost';
--sqlServer
select *from sys.syslogins
select * from sys.sysuserswhere issqluser = 1
添加账户:
--MysqL(insertinto MysqL.user 默认禁止,去掉my.init\sql-mode\STRICT_TRANS_TABLES)
CREATE USER 'username'@'localhost'IDENTIFIEDBY 'password';
INSERT INTOMysqL.user(Host,Password)
VALUES ('localhost','username',PASSWORD('password'));
--sqlServer
USE [master]
GO
CREATE LOGIN[username] WITH PASSWORD=N'password',CHECK_POLICY=OFF
GO
USE [YourDatabase]
GO
CREATE USER [username] FORLOGIN [username]
GO
更改密码:
--MysqL
MysqLadmin -uusername -p123456 password 654321
set password=password("kk");
set passwordfor 'username'@'localhost'= password('123456');
update MysqL.userset Password = PASSWORD('123456')WHERE user='username';
flush privileges;
--sqlServer
ALTER LOGIN[username] WITH PASSWORD=N'123456'
sp_password @new = '123456',@loginame= 'username'--,@old = 'old_password'
授权和回收权限:(SqlServer服务器角色和数据库角色相关操作)
--MysqL
GRANT SELECTon *.* to 'username'@'localhost'identified by 'password';
REVOKE allprivileges, grant option FROM'username'@'localhost';
--sqlServer
USE [master]
GRANT CONNECTsql TO [username]
REVOKE CONNECTsql TO [username]
EXEC master..sp_addsrvrolemember@loginame= N'username',@rolename = N'sysadmin'
EXEC master..sp_dropsrvrolemember@loginame= N'username' ,@rolename =N'sysadmin'
GO
USE [YourDatabase]
GRANT INSERT,UPDATE,DELETE,SELECTON [dbo].[TestTab]TO [username]
REVOKE INSERT,SELECTON [dbo].[TestTab]TO [username]
EXEC sp_addrolememberN'db_owner',N'username'
EXEC sp_droprolememberN'db_owner',N'username'
GO
删除账户:
--MysqL
DROP user 'username'@'localhost';
DELETE FROMMysqL.userWHERE user='username';
--sqlServer
USE [master]
GO
DROP LOGIN[TUser]
sp_droplogin @loginame = 'username'
GO
USE [YourDatabase]
GO
DROP USER [TUser]
sp_dropuser @name_in_db = 'username'
GO