SQLSERVER和MYSQL语法和关键字的区别详解
SQLserver与MySQL语法的区别

SQLserver与MySQL语法的区别 SQL server与MySQ虽然同样是基于SQL语法的,但它们之间的差异也是不可忽略的。
本博⽂缘由: 在学习《数据库系统概论》⾥⾯使⽤的为SQLsever语法,与最先接触的MySQL部分语法有些许不同。
下⾯是我在做数据库习题与到的⼀些差异。
1、limit语句mysql中SELECT ageFROM personORDER BY age ASCLIMIT 3SQL server中SELECT TOP 3 WITH TIES *FROM personORDER BY age ASC#应⽤-- 从 "Persons" 表中选取 50% 的记录SELECT TOP 50 PERCENT * FROM Persons2、DATEDIFF() 函数mysql中#DATEDIFF() 函数返回两个⽇期之间的天数-- DATEDIFF(date1,date2)SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDateSQL server中#DATEDIFF() 函数返回两个⽇期之间的时间-- DATEDIFF(datepart,startdate,enddate)SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate/*注意:SQL server中的DATEDIFF() 函数等效于mysql中的 TIMESTAMPDIFF() 函数*/-- TIMESTAMPDIFF(unit,begin,end);3、DATE函数mysql中1、NOW() 返回当前的⽇期和时间-- CURDATE() 返回当前的⽇期-- CURTIME() 返回当前的时间2、DATE() 提取⽇期或⽇期/时间表达式的⽇期部分-- EXTRACT(unit FROM date) 返回⽇期/时间按的单独 unit部分3、DATE_FORMAT(date,format) ⽤不同的格式 format显⽰⽇期/时间4、DATEDIFF(date1,date2) 返回两个⽇期之间的天数-- TIMESTAMPDIFF(unit,begin,end); 相当于SQL sever中的DATEDIFF() 函数5、DATE_ADD() 给⽇期添加指定的时间间隔DATE_SUB() 从⽇期减去指定的时间间隔SQL sever中1、GETDATE() 返回当前⽇期和时间2、DATEPART(datepart,date) 返回⽇期/时间的单独 datepart3、CONVERT(data_type(length),data_to_be_converted,style) ⽤不同的格式 style显⽰⽇期/时间4、DATEDIFF(datepart,startdate,enddate) 返回两个⽇期之间的时间5、DATEADD() 在⽇期中添加或减去指定的时间间隔4、百分⽐约束例:查询课程表中的前30%的记录。
postgresql与mysqlsql语句一样吗

postgresql与mysqlsql语句一样吗postgresql 与mysql sql语句一样吗PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多MySQL 使用者都遇到过Server级的资料库丢失的场景——mysql系统库是MyISAM的,相比之下,PG资料库这方面要好一些。
sql server与mysql语句一样么LabVIEW是一种程式开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文字的语言产生程式码,而LabVIEW使用的是图形化编辑语言G编写程式,产生的程式是框图的形式。
LabVIEW软体是NI设计平台的核心,也是开发测量或控制系统的理想选择。
LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。
hibernate的hql语句和sql语句一样吗?一样.都是资料库操作语句.只是有区别.sql语句貌似裸奔.hql整装.......sql可比作用dos操作的老版windows系统.hql.....windows xp SQL SERVER和ORACLE中SQL语句一样吗?Oracle与Sql server都遵循SQL-92标准:区别如下:1.Oracle中表名,栏位名,储存过程名,变数名不能超过30个字串长度。
2.Oracle中不支援T op 语法。
使用whererownum < n 代替。
但需要注意如果在Top前有排序的操作,则需要先排序在利用rownum 取得。
3.Oracle中游标的使用与SqlServer中有挺大差别,主要是在回圈控制方面不一致。
在Oracle中如果某列是Date型别,那么它预设的格式是yyyy-MM-dd,如果使用where colDate = ‘2005-06-08 17:14:57’就会出错,‘2005-06-08’可以。
数据库管理系统比较MySQLvsOraclevsSQLServer

数据库管理系统比较MySQLvsOraclevsSQLServer 数据库管理系统比较:MySQL vs Oracle vs SQL Server引言:数据库管理系统是现代信息技术领域中不可或缺的一环。
随着数据量的急剧增加和数据库应用的广泛应用,选择适合自己需求的数据库管理系统变得至关重要。
在本文中,我们将比较三种常见的数据库管理系统:MySQL、Oracle和SQL Server。
通过对比它们的性能、功能、可扩展性和使用成本,为读者提供一个更好地了解和选择的依据。
一、性能比较在数据库管理系统中,性能是一个至关重要的因素。
下面将对MySQL、Oracle和SQL Server的性能进行比较。
1.1 MySQL性能MySQL是一个轻量级的开源数据库管理系统,以其高性能而闻名。
它采用多线程处理机制和高效的索引算法,能够处理大规模的数据访问和高并发请求。
此外,MySQL还支持垂直和水平扩展,可根据实际需求进行灵活配置和调整。
因此,在对于大多数中小型应用来说,MySQL提供了相对较好的性能。
1.2 Oracle性能Oracle是一个功能强大且成熟的商业数据库管理系统。
它具有出色的性能,并且能够处理大规模的复杂数据模型。
Oracle采用了先进的事务处理机制和高效的查询优化算法,使其在处理高并发访问和复杂查询时具有出色的性能表现。
然而,Oracle的性能和功能也伴随着更高的硬件要求和许可成本。
1.3 SQL Server性能SQL Server是由微软公司开发的关系型数据库管理系统。
它在处理大规模数据时表现出色,并且支持高并发访问和复杂查询。
SQL Server 采用了先进的内存管理和缓存技术,以提高查询速度和响应时间。
此外,SQL Server还具有良好的稳定性和可靠性,适用于中小型企业的应用场景。
综合比较,MySQL适用于中小型应用,对性能要求较高且成本敏感的场景;Oracle适用于大规模企业级应用,对功能和可靠性要求较高的场景;SQL Server适用于中小型企业应用,对性能和稳定性要求较高的场景。
SQL server与mysql的区别

1、执行符号:①mysql:分号“;”②SQL server:字符“go”2、自增列:mysql必须要索引,不能设置增量3、默认值①mysql默认值不用加括号②SQL server可加可不加4、查看表结构定义:①SQL server:exec sp_help ‘tabname’②mysql:desc tabname5、更改表名:①mysql:alter table tabName rename newTabName②SQL server:exec sys.sp_rename @objname=N’tabn a me’,@newname=’newTabName’6、更改字段类型:①SQL server:alter table[dbo].[tabName] alter column [id] bigint②mysql:alter table tabName modify id bigint7、更改字段名:①SQL server:exec sys.sp_rename@objname=N’tabName.id’,@newname=’lewid’,@objtype=’column’②mysql:alter table tabName change idlew Id bigint8、添加字段:①SQL server:ALTER TABLE[dbo].[tabName] ADD NAME NVARCHAR(200) NULL②mysqlALTER TABLE tabName ADD NAME NVARCHAR(200) NULL、9、删除字段:①SQL server:ALTER TABLE[dbo].[tabName]DROP COLUMN NAME②mysqlALTER TABLE tabName DROP NAME10、添加主键/外键或约束:①SQL serverALTER TABLE[dbo].[tabName] DROP CONSTRAINT pk_tabName②mysqlALTER TABLE tabName DROP CONSTRAINT constaintNameALTER TABLE tabName DROP PRIMARY KEY pk_tabNameALTER TABLE subTabName DROP FOREIGN KEY fk_subTabName_tabName11、删除表:①SQL serverDROP TABLE tabName , TabName2;②mysqlDROP TABLE IF EXISTS tabName , TabName2;12、创建视图:①mysqlCREATE OR REPLACE VIEW VtabNameASSELECT* FROM tabNameWITH CHECK OPTION;②SQL serverCREATE VIEW VtabNameASSELECT* FROM tabNameWITH CHECK OPTION;13、视图结构和定义:①mysqlDESC VtabName;SHOW CREATE VIEW VtabName;SHOW TABLE STATUS LIKE'VtabName';②SQL serversp_help VtabNamesp_helptext VtabName14、删除视图:①mysqlDROP VIEW tabName;DROP VIEW IF EXISTS tabName;②SQL serverDROP VIEW tabName;15、创建索引:①mysqlCREATE TABLE tabName(id INT NOT NULL,KEY indName(id));ALTER TABLE tabName ADD INDEX indName(Value);CREATE UNIQUE INDEX indName ON tabName(Value);②SQL serverCREATE TABLE tabName(ID INTIDENTITY(100,1) CONSTRAINT PK_tabName PRIMARY KEY)CREATE UNIQUE INDEX indName ON tabName(Value);16、重建索引:①mysqlREPAIR TABLE tabName QUICK;②SQL serverDBCC DBREINDEX('dbo.tabName','',100)ALTER INDEX indName ON tabName REBUILD;ALTER INDEX ALL ON tabName REORGANIZE;17、删除索引:①mysqlALTER TABLE tabName DROP INDEX indName;ALTER TABLE tabName DROP PRIMARY KEY pk_tabName;ALTER TABLE subTabName DROP FOREIGN KEY fk_subTabName_tabName; DROP INDEX indName ON tabName;②SQL serverDROP INDEX indName ON tabName;ALTER TABLE tabName DROP CONSTRAINT PK_tabName18、查看索引:①mysqlSHOW INDEX FROM tabName;②SQL serverSELECT* FROM sys.indexes WHERE object_id =OBJECT_ID('tabName') SELECT*FROM sys.sysindexes WHERE id=OBJECT_ID('tabName')19、查看存储过程/函数定义:①mysqlSHOW CREATE{PROCEDURE|FUNCTION}name;SHOW{PROCEDURE|FUNCTION}STATUS[ LIKE 'pattern'];SELECT*FROM information_schema.Routines WHEREROUTINE_NAME='name';②SQL serverexec sp_help f_getdateexec sp_helptext f_getdateSELECT*FROM information_schema.Routines WHEREROUTINE_NAME='name';20、存储过程:①mysqlDELIMITER//CREATE PROCEDURE sp_name(IN param1INT,OUT param2 INT)BEGIN{sql_statement}END//DELIMITER;CALL sp_name();DROP PROCEDURE IF EXISTS sp_name;②SQL serverCREATE PROCEDURE sp_name(@param1 INT,@param2 INT OUTPUT) ASBEGIN{sql_statement}ENDGOEXEC sp_name();DROP PROCEDURE sp_name;21、函数:①mysqlDELIMITER//CREATE FUNCTION fn_name()RETURNS Decimal(10,2)RETURN 3.14;//DELIMITER;SELECT fn_name();DROP PROCEDURE IF EXISTS fn_name;②SQL serverCREATE FUNCTION dbo.fn_name()RETURNS Decimal(10,2)ASBEGINRETURN 3.14ENDGOSELECT dbo.fn_name();DROP FUNCTION dbo.fn_name;22、触发器:①mysqlDELIMITER//CREATE TRIGGER tr_name{AFTER|BEFORE}{INSERT|UPDATE|DELETE} ON tabNameFOR EACH ROWBEGIN{sql_statement;}ENDDELIMITER;DROP TRIGGER IF EXISTS tr_name;②SQL serverCREATE TRIGGER dbo.tr_nameON[dbo].[tabName]{FOR|AFTER|INSTEAD OF}{INSERT|UPDATE|DELETE} ASBEGIN{sql_statement;}ENDGODROP TRIGGER dbo.tr_name23、循环语句:①mysql(1至100之和)WHILE 循环:DELIMITER//CREATE PROCEDURE TESTPRO()BEGINDECLARE I,K INT DEFAULT 0 ;WHILE I<= 100 DOSET K=I+K;SET I=I+ 1;END WHILE;SELECT K;END;//DELIMITER;REPEAT UNTIL 循环:DELIMITER//CREATE PROCEDURE TESTPRO() BEGINDECLARE I,K INTDEFAULT 0 ; REPEATSET K=I+K;SET I=I+ 1;UNTIL I>100END REPEAT;SELECT K;END;//DELIMITER;LOOP 循环:DELIMITER//CREATE PROCEDURE TESTPRO() BEGINDECLARE I,K INTDEFAULT 0 ; LABEL:LOOPSET K=I+K;SET I=I+ 1;IF I>100 THENLEAVE LABEL;END IF;END LOOP;SELECT K;END;//DELIMITER;CALL TESTPRO();DROP PROCEDURE IF EXISTS TESTPRO;②SQL serverDECLARE@I INT= 1DECLARE@K INT= 0WHILE@I<= 100BEGINSET@K=@K+@ISET@I=@I+ 1ENDSELECT@K24、游标:①mysql(参数名称不能与列明一样)DELIMITER//CREATE PROCEDURE TESTPRO()BEGINDECLARE FName varchar(50);DECLARE LName varchar(50);DECLARE IsDone BOOLEAN DEFAULT FALSE;DECLARE cursor_name CURSOR FOR SELECT FirstName,LastName FROM Person; DECLARE CONTINUE HANDLER FOR NOT FOUND SET IsDone=TRUE;OPEN cursor_name;LABEL:LOOPFETCH cursor_name INTO FName,LName;IF IsDone THENLEAVE LABEL;END IF;SELECT CONCAT('Contact Name:',FName,LName)AS Name;END LOOP;CLOSE cursor_name;END;//DELIMITER;②SQL serverDECLARE@LastName varchar(50),@FirstName varchar(50);DECLARE contact_cursor CURSOR FOR SELECT LastName,FirstName FROM PersonOPEN contact_cursor;FETCH NEXT FROM contact_cursor INTO @LastName,@FirstName; WHILE@@FETCH_STATUS= 0BEGINSELECT'Contact Name: '+@FirstName+' '+@LastNameFETCH NEXT FROM contact_cursor INTO @LastName,@FirstName; ENDCLOSE contact_cursor;DEALLOCATE contact_cursor;GO25、查看账户信息:①mysqlselect Host,User,Password from er;show grants for 'username' @'localhost';②SQL serverselect*from sys.sysloginsselect*from sys.sysusers where is sqluser= 126、添加账户:①mysql(insert into er 默认禁止,去掉my.init\sql-mode\STRICT_TRANS_TABLES)CREATE USER'username'@'localhost'IDENTIFIED BY 'password'; INSERT INTO er (Host,User,Password)VALUES ('localhost','username',PASSWORD('password'));②SQL serverUSE[master]GOCREATE LOGIN [username] WITH PASSWORD=N'password',CHECK_POLICY=OFF GOUSE[YourDatabase]GOCREATE USER[username]FORLOGIN[username]GO26、更改密码:①mysqlmysqladmin-uusername-p123456password 654321set password=password("kk");set password for 'username' @'localhost'=password('123456');update er set Password=PASSWORD('123456') WHEREuser='username';flush privileges;②SQL serverALTER LOGIN[username]WITH PASSWORD=N'123456'sp_password@new='123456',@loginame='username',@old ='old_password'27、授权和回收权限:(SqlServer服务器角色和数据库角色相关操作)①mysqlGRANT SELECT on *.*to'username'@'localhost'identified by'password';REVOKE all privileges,grant option FROM 'username' @'localhost';②SQL serverUSE[master]GRANT CONNECTSQLTO[username]REVOKE CONNECTSQLTO[username]EXEC master..sp_addsrvrolemember @loginame=N'username',@rolename= N'sysadmin'EXEC master..sp_dropsrvrolemember@loginame=N'username',@rolename=N'sysadmin'GOUSE[YourDatabase]GRANT INSERT,UPDATE,DELETE,SELECTON[dbo].[TestTab]TO[username]REVOKE INSERT,UPDATE,DELETE,SELECTON[dbo].[TestTab]TO[username]EXEC sp_addrolemember N'db_owner',N'username'EXEC sp_droprolemember N'db_owner',N'username'GO28、删除账户:①mysqlDROP user'username'@'localhost';DELETE FROM er WHERE user='username';②SQL serverUSE[master]GODROP LOGIN [TUser]sp_droplogin@loginame='username'GOUSE[YourDatabase]GODROP USER[TUser]sp_dropuser@name_in_db='username'GO。
sqlserver和mysql命令(语句)的区别,sqlserver与mysql的比较

sqlserver和mysql命令(语句)的区别,sqlserver与mysql的⽐较sql与mysql的⽐较1、连接字符串sql :Initial Catalog(database)=x; --数据库名称Data Source(source)=x; --服务器Persist Security Info=True; --集成sql server⾝份验证Integrated Security=True --集成windows⾝份验证User ID(uid)=x; --⽤户名Password(pwb)=x; --密码mysql:Database=x; --数据库名称Data Source=x; --服务器User Id(uid)=bizhi; --⽤户名Password=x; --密码pooling=false; --CharSet=utf8; --编码port=x --端⼝2、连接对象sql :SqlConnectionmysql:MySqlConnection3、命令:sql :SqlCommandmysql:MySqlCommand4、参数sql :SqlParametermysql:MySqlParameter5、填充:sql :SqlDataAdaptermysql:MySqlDataAdapter6、查询所有库sql :select * from [master]..[SysDatabases];mysql:SHOW DATABASES;7、显⽰指定库的所有表sql :select * from [_DatatBaseName]..[SysObjects] where [type]='U';mysql:USE _DatatBaseName; SHOW TABLES;8、显⽰指定库的指定表的所有字段sql :select top 0 * from [_DatatBaseName]..[_TableName];select * from [syscolumns] where [ID]=OBJECT_ID('BPM..OrderFollow');mysql:USE _DatatBaseName; SHOW COLUMNS FROM _TableName;USE _DatatBaseName; DESCRIBE _TableName;9、查询当前时间sql :select getdate();mysql:SELECT NOW();10、备份数据库sql :backup _DatatBaseName to disk='d:\123.bak';mysql:11、创建数据库sql :use mastergo--删除数据库if exists(select * from sysdatabases where name='kl') drop database [HBDataBase]; --删除go--创建数据库create database [kl]on --主⽂件(name='kl',size=3mb,filename='D:\kl.mdf',maxsize=100mb,filegrowth=1mb)log on --⽇志⽂件(name='kl_Log',filename='D:\kl.ldf',size=1mb,maxsize=5mb,filegrowth=5%)gomysql:CREATE DATABASE _DatatBaseName;12、分页sql :top NROW_NUMBER() over(order by xx desc ) mysql:limit13、添加的⾃增列sql :insert into xx(bb) output inserted.vv vlaues('');select @@identity;mysql:SELECT @@session.identity;。
主流数据库复制表结构(SqlServerMysqlOracleSybase)[语法差异分析]
![主流数据库复制表结构(SqlServerMysqlOracleSybase)[语法差异分析]](https://img.taocdn.com/s3/m/03a0b83cec630b1c59eef8c75fbfc77da269970c.png)
主流数据库复制表结构(SqlServerMysqlOracleSybase)[语法差异分析]因为数据库SQL语句在各⼤产品中带有“⽅⾔性”,即SQLSERVER SYBASE都是⽤了T-SQL,Mysql是⽤的标准SQL,Oracle有有⾃⼰的PL/SQL。
由于这种“⽅⾔性”的差异导致很多SQL语句在移植的时候产⽣困难,在异构数据库的时候显得很尴尬。
当然对于DBA来说,⽆⾮是查查语法⽽已的事。
但是终究是不⽅便。
这⾥就跟⼤家分享下我⾃⼰实验整理的,复制表结构即数据的各数据库中的语法分析。
先来说说SQLSERVER⼤家最熟悉的。
--当数据库中没有新表的情况,⽐如有了A,没有B表。
select * into B from A --复制表及数据select * into B from A where 1>1 --只复制表结构--当数据中已经有了B表的情况,上⾯就不适⽤了。
insert into B select * from A --复制表数据,为了避免。
B表理论上应该没有数据,如果有,可能会造成违反主键。
insert into B select * from A where id>10 --加上where条件可以指定复制数据,上⾯没有表的情况也可以这样做。
这⾥要说的是,sybase和SQLSERVER是⼀样的。
因为从某种⾓度来说,SYBASE就是SQL的原型。
接下来是Mysql。
稍微语法有不同。
--数据库中没有B表的情况create table B select * from Acreate table B select * from A where 1<>1 --只复制表结构--有B表的情况和sqlserver基本相同insert into B select * from Aoracle 基本上合MYSQL是⼀样的,不过语法要求更严谨。
当然Mysql也可以这样写。
--数据库中没有B表的情况create table B as select * from Acreate table B as select * from A where 1<>1 --只复制表结构create table B like A--复制表结构--有B表的情况基本相同insert into B select * from A这些都是较为初级的SQL语句,但是也⽐较适⽤,以后会分析⼀些其他的常⽤SQL语句。
sqlserver mysql的触发器语法

SQL Server 和MySQL 的触发器语法有所不同。
下面分别介绍两者的触发器语法。
1.SQL Server 触发器语法:在SQL Server 中,触发器是一种数据库对象,它与表相关联,当表上发生特定事件(如INSERT、UPDATE 或DELETE)时,触发器就会被触发。
以下是SQL Server 触发器的基本语法:解释:•trigger_name是触发器的名称,可以根据需要自行定义。
•table_name是触发器所关联的表名。
•event_type是触发器所关联的事件类型,可以是INSERT、UPDATE或DELETE。
•column_list是触发器所关联的列名列表,如果触发器与所有列相关联,则可以省略列名列表。
•BEGIN和END之间是触发器的逻辑代码块。
2.MySQL 触发器语法:在MySQL 中,触发器是与表相关联的数据库对象,当满足特定条件时,触发器会自动执行预定义的操作。
以下是MySQL 触发器的基本语法:解释:•trigger_name是触发器的名称,可以根据需要自行定义。
•trigger_time是触发器的时间,可以是BEFORE或AFTER。
•trigger_event是触发器的操作事件,可以是INSERT、UPDATE或DELETE。
•table_name是触发器所关联的表名。
•FOR EACH ROW表示触发器将为每一行执行预定义的操作。
•BEGIN和END之间是触发器的逻辑代码块。
需要注意的是,SQL Server 和MySQL 的触发器语法在细节上可能略有不同,上述示例仅展示了基本的语法结构。
在实际使用中,请根据具体的数据库版本和需求进行适当的调整。
SQLServer与MySql区别(关键字和语法)

SQL Server 和MySql 语法和关键字的区别——用于SQLServer到MySql的转换(1)mysql的ifnull()函数对应sql的isnull()函数;(2)mysql的存储过程中变量的定义去掉@;(3)mysql的每句结束要用";"(4)SQLServer存储过程的AS在MySql中需要用begin .....end替换(5)字符串连接用concat()函数;如SQLServer: Temp=’select * from ’+’tablename’+…+…MySql:Temp=concat(’select * from’, ’tablecname’,…,…)(6)mysql的uuid()对应sql的GUID();(7)MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面MySql out,in,inout的区别——MySQL 存储过程“in”参数:跟C 语言的函数参数的值传递类似,MySQL 存储过程内部可能会修改此参数,但对in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。
MySQL 存储过程“out”参数:从存储过程内部传值给调用者。
在存储过程内部,该参数初始值为null,无论调用者是否给存储过程参数设置值。
MySQL 存储过程inout 参数跟out 类似,都可以从存储过程内部传值给调用者。
不同的是:调用者还可以通过inout 参数传递值给存储过程。
(8)MySQL的if语句为if (条件) thenend if;或者If (条件) thenElseEnd if或者If(条件)thenElseif (注意不能写成Else if )Elseif…End if(9)Mysql的Execute对应SqlServer的exec;(注意:必须像下面这样调用)Set @cnt=’select * from 表名’;Prepare str from @cnt;Execute str;(10)MySql存储过程调用其他存储过程用callCall函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)(11) mysql的日期○1获得当前日期函数:curdate(),current_date()○2获得当前时间函数:curtime();○3获得当前日期+时间:now();○4MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参数,在一周、一月、一年中的位置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Server和MySql语法和关键字的区别——用于SQLServer到MySql的转换对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。
这两者最基本的相似之处在于数据存储和属于查询系统。
你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。
还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。
同时,二者也都提供支持XML的各种格式。
除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。
◆根本的区别是它们遵循的基本原则二者所遵循的基本原则是它们的主要区别:开放vs保守。
SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。
虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM,Heap,InnoDB,and Berkeley DB。
MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。
同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。
◆发行费用:MySQL不全是免费,但很便宜当提及发行的费用,这两个产品采用两种绝然不同的决策。
对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。
但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。
学校或非赢利的企业可以不考虑这一附加的费用。
◆性能:先进的MySQL纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。
MyISAM数据库与磁盘非常地兼容而不占用过多的CPU和内存。
MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX 系统上运行则更好。
你还可以通过使用64位处理器来获取额外的一些性能。
因为MySQL在内部里很多时候都使用64位的整数处理。
Yahoo!商业网站就使用MySQL作为后台数据库。
当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。
但是,这些特性也要付出代价的。
比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。
如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。
◆安全功能MySQL有一个用于改变数据的二进制日志。
因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。
即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。
在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价。
安全性这两个产品都有自己完整的安全机制。
只要你遵循这些安全机制,一般程序都不会出现什么问题。
这两者都使用缺省的IP端口,但是有时候很不幸,这些IP也会被一些黑客闯入。
当然,你也可以自己设置这些IP端口。
◆恢复性:先进的SQL服务器恢复性也是MySQL的一个特点,这主要表现在MyISAM配置中。
这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。
然而,对于SQL服务器而言就表现得很稳键。
SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。
根据需要决定你的选择对于这两种数据库,如果非要让我说出到底哪一种更加出色,也许我会让你失望。
以我的观点,任一对你的工作有帮助的数据库都是很好的数据库,没有哪一个数据库是绝对的出色,也没有哪一个数据库是绝对的差劲。
我想要告诉你的是你应该多从你自己的需要出发,即你要完成什么样的任务?而不要单纯地从软件的功能出发。
如果你想建立一个.NET服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQL服务器。
如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。
这两者数据库都能够在.NET或J2EE下运行正常,同样,都能够利用RAID。
●优点分析:MYSQL短小精悍,容易上手,操作简单,免费供用的。
相对其它数据库有特色又实用的语法多一些。
SQL怎么也算是大型数据库,稳定,能做一般大系统的数据仓库,运行速度明显比MYSQL快N多(海量数据下这个优势显而易见)。
●缺点分析:MYSQL难担当大系统的数据仓库,运行速度慢,不够稳定,有掉线的情况。
SQL SERVER价格贵(当然没说5元盗版),使用起来比MYSQL要难一些,毕竟东西大了说道多点。
SQL-Server2000是微软公司开发的中型数据库,它的可视化方面做得很好,在安全性等方面功能非常强大,并且有微软的强大技术支持,当然价格比较昂贵,适合应用于中型系统。
MySQL是MySQL·AB开发的小型数据库,基本上具有了数据库所需的所有功能,但是功能没有SQL-Server强大,技术支持也跟不上,但是价格便宜,在满足它的许可协议的情况下可以免费使用,适合于小型系统。
语言都是一样的(SQL)是结构化查询语言.语法和关键字区别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类型13.MS SQL里面检查是否有这个表再删除,需要这样:14.MySQL支持无符号型的整数,那么比不支持无符号型的MS SQL就能多出一倍的最大数存储15.MySQL不支持在MS SQL里面使用非常方便的varchar(max)类型,这个类型在MS SQL里面既可做一般数据存储,也可以做blob数据存储16.MySQL创建非聚集索引只需要在创建表的时候指定为key就行,比如:KEY displayorder(fid,displayorder)在MS SQL里面必须要: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(条件)thenend if;或者If(条件)thenElseEnd if或者If(条件)thenElseif(注意不能写成Else if)Elseif…End if31.Mysql的Execute对应SqlServer的exec;(注意:必须想下面这样调用)Set@cnt=’select*from表名’;Prepare str from@cnt;Execute str;32.MySql存储过程调用其他存储过程用callCall函数名(即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 Fdate9)MySQL为日期减去一个时间间隔:date_sub()10)select date_sub('1998-01-0100:00:00',interval'11: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())-2day)as Fdate17)本周时间(结束)18)select date_add(CURRENT_DATE(),interval dayofweek(curdate())+3day)asFdate19)上周时间(起始)20)select date_sub(CURRENT_DATE(),interval dayofweek(curdate())+5day)asFdate21)上周时间(结束)22)select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-1day)as Fdate23)本月时间(起始)24)select DATE_SUB(CURDATE(),INTERV AL DAY(CURDATE())-1DAY)as Fdate25)本月时间(结束)26)Select date_add(current_date(),interval day(last_day(CURDATE()))-day(CURDATE())day)as Fdate27)上月时间(起始)28)select DATE_SUB(DATE_SUB(CURDATE(),INTERV AL DAY(CURDATE())DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERV ALDAY(CURDATE())DAY)))-1day)as Fdate29)上月时间(结束)30)select DATE_SUB(CURDATE(),INTERV AL DAY(CURDATE())DAY)as Fdate31)今年时间(起始)32)select makedate(year(curdate()),1)as FDate33)今年时间(结束)34)select DATE_SUB(makedate(year(curdate())+1,1),INTERV AL1day)as Fdate35)去年时间(起始)36)select makedate(year(curdate())-1,1)as Fdate37)去年时间(结束)38)select DATE_SUB(makedate(year(curdate()),1),INTERV AL1day)as FDate39)DATE_FORMAT(date,format):根据format字符串格式化date值。