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)[语法差异分析]因为数据库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()分别返回日期参数,在一周、一月、一年中的位置。
SQLServer,MySQL,Oracle三者的区别
SQLServer,MySQL,Oracle三者的区别目录1 Oracle、Sql Server、MySql简介1.1 Oracle1.2 SQL Server1.3 MySQL2 Oracle和MySQL的主要区别2.1 客户端和命令窗口2.2 市场占有率及其他2.3 Oracle也与MySQL操作上的一些区别2.3.1 组函数用法规则2.3.2 自动增长的数据类型处理2.3.3 主键2.3.4 单引号的处理2.3.5 翻页的SQL语句的处理2.3.6 长字符串的处理2.3.7 日期字段的处理2.3.8 空字符的处理2.3.9 字符串的模糊比较1 Oracle、Sql Server、MySql简介返回1.1 OracleOracle 能在所有主流平台上运行(包括Windows)。
完全支持所有的工业标准。
采用完全开放策略。
可以使客户选择最适合的解决方案。
对开发商全力支持,Oracle并行服务器通过使一组结点共享同一簇中的工作来扩展Windows NT的能力,提供高可用性和高伸缩性的簇的解决方案。
如果Windows NT不能满足需要,用户可以把数据库移到UNIX中。
Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。
Oracle获得最高认证级别的ISO标准认证.Oracle性能最高,保持开放平台下的TPC-D和TPC-C的世界记录Oracle多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。
Oracle 在兼容性、可移植性、可联结性、高生产率上、开放性也存在优点。
Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。
与 IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。
Oracle的产品可运行于很宽范围的硬件与操作系统平台上。
可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。
各个数据库语法的不同
1、group by:sql server中group by后要将select后的所有字段名都加上,否则会报:选择列表中的列‘。
’无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
而mysql和sybase则不需要。
具体参考mon.database.daoAPViewAPDaoImp中loadApPosiStat()方法。
2、对于取符合条件的数据的前几条:sql server、sybase和mysql均不同,具体可参考:mon.database.dao.PerfStaDAO中getIpList()方法。
3、对于查询语句中的round()函数,sybase与sql server、mysql不同,具体参考:mon.database.dao.PerfStaDAO中getIps()方法。
4、sybase对大小写敏感,必须保证数据库中、拼的sql语句中、hibernate配置文件中大小写一致,否则会报错查不到数据。
5、如果要判空应涉及到是否为null、‘’、空格三种。
因为sybase会把插入的‘’默认为空格插入。
6、对于查询语句中如果是字符一定要加单引号,如果是整型一定不要加单引号,sybase对此很敏感。
7、Level、count是sybase的关键字,起字段名或别名是不要用。
file、USER、rule、view为sql server中的关键字,,起字段名或别名是不要用。
8、对于max、avg、sum等函数中的字段如果是varchar型,sql server和mysql直接在字段名后加0就可以,eg:max(num+0),但是sybase应用convert 函数先对其进行转换,eg:max(convert(numeric(18,0),num))9、自增长:sybase:id numeric(15,0) identitySqlServer:id int IDENTITY(1,1) NOT NULLMysql:`id` int(11) NOT NULL auto_increment10、sqlserver/sybase 批量插入记录时,对有标识列的字段要设置setIDENTITY_INSERT 表名 on,然后再执行插入记录操作;插入完毕后恢复为off 设置格式: set IDENTITY_INSERT 表名 on set IDENTITY_INSERT 表名 off(具体在sqlserver和sybase中dbserver_data.sql中有体现) 11、解决sybase乱码问题:(用以下的方法,也可以在server config中配置)解决乱码:(默认装到c:)1.c:\>cd \sybase\charsets\cp936(utf8)2.c:\sybase\charsets\cp936> charset -Usa -P -Sxueyijuan binary.srtcp936(charset –Usa –Pxxx –Sxxx nocase.srt utf8)3.在SQL环境中(直接在命令行处写isql) 1>select name,id fromsyscharsets2>go找到name为cp936对应的id(假设为171)4.1>sp_configure "default character set id",1712>go5.重启server两次。
SQLServerMySqlOracle语法对比及区别
SQLServerMySqlOracle语法对⽐及区别操作SQLServer Oracle Mysql查看表结构exec sp_help 表名desc 表名在command window看desc 表名或 describe 表名或show columns from 表名;修改数据库名称exec sp_renamedb ‘旧数据库名’,’新数据库名’不详修改表名exec sp_rename ‘旧表明’,’新表明’rename 旧表名 to 新表名alter table 表名 rename to 新表名修改列名exec sp_rename ‘表.旧列名’,’新列名’alter table 表名 rename column 旧列名 to 新列名alter table test change column address address1 varchar(30)--修改表列名删除数据库drop database 数据库名不详Drop database添加表中⼀列alter table 表名 Add 列名数据库类型alter table 表明 add(列名数据类型) 或alter table 表名 Add 列名数据库类型alter table test add column name varchar(10); --添加表列删除表中⼀列alter table 表名 drop column 列名alter table 表名 drop column 列名alter table test drop column name;修改表现有列alter table 表名 alter column 列名新数据库类型⼤⼩alter table 表明 modify(列名数据类型)alter table test modify address char(10) --修改表列类型||alter table test change address address char(40)删除约束alter table 表名 drop constraint约束名完全⼀样添加主键约束alter table 表名add constraint 主键约束名primary key (列名)完全⼀样alter table 表明add primary key (列名)删除主键约束alter table 表名 drop primary key添加唯⼀约束alter table 表名add constraint 唯⼀约束名unique (列名)完全⼀样alter table 表名 add unique (列名)添加默认约束alter table 表名add constraint default (值) for 列名完全⼀样添加检查约束alter table 表名add constraint check (列名 > 10)完全⼀样添加外键约束alter table ⼦表add constraint 外键约束名foreign key(⼦表的列名) references 主表 (列名)on update cascade / on updateaction注意:默认和加 on update action 表⽰更新受限加on update cascade 表⽰更新不受限,多项操作时⽤逗号隔开完全⼀样添加索引约束alter table 表名 add index 索引名 (列名)添加普通索引:create index 索引名 ON 表名 (列名)添加唯⼀索引:create unique索引名 ON 表名 (列名)删除索引drop index 索引名 on 表名alter table 表名 drop index 索引名⾝份: exec sp_grantlog域名\密码’⾝份: exec sp_addlogin ‘登陆’,’密码’SET PASSWORD FOR'username'@'host'= PASSWORD('newpassword');数据库名⾝份: Exec域名密码’,’数据库⽤户名’⾝份: Exec sp_grantdbaccess登陆帐户’,’数据库⽤户名’create user HDEAM_TYMBidentified by ""default tablespace HDEAM_TYMBtemporary tablespace TEMPprofile DEFAULT;mysql>insert intoer(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("localhost","pppadmin",password("passwd"),'','','');CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY'123456';CREATE USER 'pig'@'%' IDENTIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '';CREATE USER 'pig'@'%';权限 [on 表明] to 数据库grant dba to HDEAM_TYMB with admin option;-- Grant/Revoke system privilegesgrant unlimited tablespace to HDEAM_TYMBwith admin option;“abc”;grant all privileges on phplampDB.* to phplamp@localhostidentified by '1234';mysql>flush privileges;权限 [on 表名] from 数据REVOKE SELECT ON*.* FROM'pig'@'%';数据库’drop user HDEAM_SBFF cascade;mysql>Delete FROM user Where User="phplamp" andHost="localhost";mysql>flush privileges;⾝份: exec sp_droplogin⾝份: exec sp_revokelogin 登分离数据库:数据库名附加数据库:数据库名,主数据⽂件路径’,⽇志⽂件路径’exp hdeam_product/d3B68Apk29v34Dj@orclfile=E:/tymb.dmp log=E:/tymb.logimp HDEAM_LHSH/HDEAM_LHSH@orcldevfile=E:\TYMBHDEAM_BAK_2013-03-25.dmpfull=Y;mysqldump -h localhost -u root -pmysql oa >d:\oa.sqlmysql -h localhost -u root -p jira<d:\jira.sql:Select *select * from表)Exec Sp_helpExecExec数据库名exec表名exec sp_helpindex注意: 下⾯都是通过( select * from 对象 ) 来查看信息触发器 user_triggers过程 user_procedures查看源代码 user_source查看数据库对象 user_objects查看错误信息 show errors查看索引信息 user_indexes查看分区索引 user_ind_partitions查看有关基于列创建的索引 user_ind_columns查看表空间 -- user_tablespaces查看所有数据库 show databases;查看库所有表 show tables;查看表结构和属性use information_schema;select * from columns where table_name=’表名’查看表源代码show create table 表名;查看存储过程源代show create procedure 过程名查看视图源代码show create procedure 过程名查看视图资代码show create VIEW 视图名查看表的索引show index from 表名查看表的索引show keys from 表明表储蓄过/空过程,函数,视图,表的源代码:对象名::查看序列 -- user_sequences查看同义词 -- user_ind_columns查看⽤户表信息 -- user_tables查看⽤户所有的表信息 user_all_tables查看表的索引show keys from 表明sysdate NOW()varchar2(20)不⼀定要指定具体列名必须指定具体列名标识的开始值, 标识种右)create sequence 序列名1.序列名.nextval 获取下⼀个序列的值2.序列名.currval 获取当前的序列的值: *.mdf =1 :*.ndf >=0 : *.log >=1数据⽂件: *.dbf >=1⽇志⽂件: *.log >=11位置开始查找t字符串(默认从1开始)从pos位置len获取字符串的长度把字符串全部转换成把字符串全部转换成清除左边的空格清楚右边的空格从左边返回指定长度的从右边返回指定长度将s t替换成字符串我的⾳乐我’)A我的⾳乐我的世界EFG2位置开3的字符串,并在该位置索引从1开始substr(char, pos, len) 截取字符串length(char) 返回字符串的长度lower(char) 转换为⼩写upper(char) 转换为⼤写trim() 截取左右空格initcap(char) ⾸字母⼤写ltrim(char,set) 左剪裁rtrim(char,set) 右剪裁replace(char oldchar, newchar) 字符串替换concat(char1, char2) 连接字符串cha(67) 根据ASCII码返回对应的字符lpad()和rpad() 在字符串的左边或右边添加东西需要3个参数第⼀个是字符串第⼆个是返回值的总长度, 第三个是⽤来填充的字符值 as varchar) 不需指定长度to_char(d|n, fmt)将数字或⽇期转换为指定格式的值 as varchar) 不需指定长度值) 必须指to_char(d|n, fmt)将数字或⽇期转换为指定格式的字符串to_date(char,frm)将char 或varchar 转换为⽇期数据类型to_number() 将包含数字的字符转换为number数据类型取绝对值取上界最⼩整取下界最⼤整数取幂四舍五⼊,正数返回1 ,负数返-1求平⽅根获取计算机名称nvl(ex1,ex2)如果ex1为null则返回ex2;如果ex1不为null则返回ex1;nvl2(ex1,ex2,ex3)如果ex1不为null则返回ex2如果ex1为null则返回ex3nullif(ex1,ex2)如果ex1=ex2则返回null 否则返回ex1;聚合)列名) 求这列的平均值列名) 求这列的最⼩值列名) 求这列的最⼤值统计所有的⾏包括重复列名) 统计指定列中⾮空值列名) 统计不是重复右句⽤于将信息表划分,按组进⾏聚合运算avg(列名) 求这列的平均值min(列名) 求这列的最⼩值max(列名) 求这列的最⼤值count(*) 统计所有的⾏包括重复值和空值count(列名) 统计指定列中⾮空值的个数count(distinct 列名) 统计不是重复值的个数group by右句⽤于将信息表划分为组,按组进⾏聚合运算返回当前系统时间返回指+指定部分后的⽇期返回返回指a. add_months(d,n) 返回给指定的⽇期加上指定的⽉数后的⽇期值 selectadd_months(sysdate,2) from dual;b. months_between(d,d) 返回2个⽇期之间的⽉数select months_between (date '2005-05-06',date '2005-9-01') from dual;c. last_day(d) 返回指定⽇期当⽉的最后⼀天的⽇期select last_day(sysdate) from dual;d. round(d, [fmt]) 返回⽇期值⽇期四舍五⼊为格式模型指定的单位 select round(date'2005-09-08','year') from dual; 返回 2005-01-01 selectround(date'2005-09-08','month') from dual; 返回2005-09-01 select round(date'2005-09-08','day')from dual; 返回最靠近的⼀个星期⽇e. next_day(d, day) 返回指定的下⼀个星期⼏的⽇期 select next_day(sysdate,'星期⼆') fromdualf.trunc 语法与round 相同区别:trunc 是只舍不⼊g.extract 提取⽇期时间类型中的特定部分|| 连接字符串⽤于将2个或多个字符串合并成⼀个字符串两个)重复的⾏select orderno from order_master union select orderno from order_detail;b.union all 合并2个查询选定的所有⾏包括重复的⾏c.intersect 返回2个查询都有的⾏d.minus 第1个查询在第2个查询中不存在的数据)个,⾄n-个条)::对1 :)左别名.列名,右别名.列from 左表 as 左别名 inner右表 as 右别名on 左别名.列= 右别名.列名左表名.列名,右表名.列from 左表 ,右表 where 左表.列名 = 右表名.列名左外连接:(返回左表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由左表决定)左别名.列名,右别名.列名左表 as 左别名 left join 右as 右别名on 左别名.列名 = 右.列名右外连接:(返回右表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由右表决定)左别名.列名,右别名.列名左表 as 左别名 right join右表 as 右别名on 左别名.列名 =完全⼀样连接分类:1内连接:条件2外连接1)左外连接: left join 或 left outer join2)右外连接:right join 或 right outer join3)完整外连接: Full join 或 Full outer join3交叉连接: from …4. 交叉连接:(返回左右表的所有⾏,如果左表没有与右表匹配的⾏则全部⽤null代替,如果右表没有与左表匹配的⾏则全部⽤null代替,存在则显⽰具体数据,显⽰出来的总⾏数=左表和右表⾏数和决定)Select 左别名.列名,右别名.列名 from 左表 as左别名 right join 右表 as 右别名on 左别名.列名= 右别名.列名完全拷贝: insert into ⽬标表源表部分拷贝: insert into ⽬标表 (列) select 列名 from 源表表不存完全拷贝: select * into 新表源表部分拷贝: select 列名 into 新from 源表拷贝表结构: select * into 新表源表 Where 1=2emp;b.拷贝⼀部分create table temp as select 列1,列2 from 表c.只拷贝⼀个空表(根据⼀个假条件)create table temp as select * from 表 where 1=2d.使⽤列别名: select stu_id, stu_name as "学⽣姓名" from student;A表,B1:⽬标表 set 列 = a.列 froma where a.关联列 = ⽬标表.2:列 = a.列 from 源a , ⽬标表b where a.关联列 =关联列3:⽬标表 set 列 = a.列 froma , ⽬标表b where a.关联列关联列4:⽬标表 set ⽬标表.列 = a.from 源表 a , ⽬标表 b where关联列 = b.关联列5:⽬标表 set⽬标表.列 = a.from 源表 a where a.关联列 =update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列from 源表 a where a.关联列 = .关联列6:update语创建⼀个新表修改表中的列表名 alter column 列新数据库类型⼤⼩添加表中的列表名 Add 列名数据库删除表中的列表名 drop column 列删除表中的记录⽽不删除表的truncate table student只是查看表的结构删除表中的数据及表的结构a.创建⼀个新表create table student(stu_id int, stu_name varchar2(20)) tablespace lijiaob.修改表中的列alter table student modify(stu_name varchar2(40))c.添加表中的列alter table student add(stu_age int)d.删除表中的列alter table student drop column stu_agee.删除表中的记录⽽不删除表的结构truncate table studentf.只是查看表的结构desc studentg.删除表中的数据及表的结构drop table student;:.必须)a. commit 命令(⽤于提交并结束事务处理)commitb.savepoint 保存点类似于标记它将很长的事务处理划分为较⼩的部分他们⽤来标记事务中可以应⽤回滚的点save point savepoint_idc.rollbace work ,rollbackd.回滚到某个保存点rollback to savepoint伪列,但a.rowid(可以唯⼀的标识数据库中的⼀⾏)b.rownum (代表⾏的序号)rownum 不跟> , = , >= 操作使⽤储在,)变量名 = 值变量名 = 列名 from 表明列名 =⽤户)最后⼀个T-SQL错误号最后⼀次插⼊的标识本地服务器的名值’ 只出现在查询分析器中值’,16,1) 能在前台⽤条件) begin … end条件) begin …end else begin表名 where= 值)表名列名 = 值) begin …. enda) if condition then exp_bodyend if;b) if condition then exp_bodyelse exp_body end if;c) if condition then exp_bodyelsif condition then exp_bodyelse exp_body end if;1) loop condition end loop2) while condition Loop exp_body end loop3)for varable in [REVERSE] value1...value2 (varable 变量不需声明 , ... 是范围连接符 )loop exp_body end loop别名=case条件 then 值条件 then 值值表列名值 then 值值 then 值值表a) select case 列名when 值 then 值when 值 then 值else 值end case from 表明b) select casewhen 列名=值 then 值when 列名=值 then 值else 值end case from 表:1.列类型: %TYPEvarable tableName.columnName%TYPE;varable tableName.columnName%TYPE;2.⾏类型: %ROWTYPEvarable tableName%ROWTYPE;3.使⽤⾏类型:varable.列名;异常信息’,16,1) 能在 1)⾃定义异常:a)定义异常:(位 declare和 begin之间)DECLARE varable EXCEPTION;b)显⽰引发异常(为 begin 和 end 之间):RAISE varable;2)处理预定义异常:(位 begin 和 end 之间)EXCEPTIONwhen Too_Many_ROWS thenDBMS_OUTPUT.PUT_LINE('返回多⾏');when others thenDBMS_OUTPUT.PUT_LINE('全部处理');3) 引发应⽤程序错误:RAISE_APPLICATION_ERROR(error_number,error_message);原理: ):(重复⼦查询,不能单)(只执⾏⼀次,能单独执, 查询原理: 从外(外sql⼀次查出sql)到⾥把外不查出来的值传):查询到结果可以作为表来使⼀样切套⼦查询:Select * from AuthorBook a where CopyRight =(select Max(CopyRight) from AuthorBookwhere BookName = a.BopokName)(效率低)>连接查询(效), ⽽连. 右查询有连接查完全⼀样返回多⾏⼀列完全⼀样完全⼀样:只能出现在Group by分组,不能单独使⽤group by 就没有Having完全⼀样完全⼀样相对于mssql oracle显著的书写特点:1.代码⽚段必须放到begin end .. 中2.虚拟表 dual 的使⽤3.每⾏代码强制分号";"结束,包括end4.赋值符号 :=;(select xx into xx from daul;也可以⽤于赋值)5.省略了 as...补充:⼏种关系数据库中字符编码和存储长度需要注意的⼏个问题1.mysql中char(n) varchar(n) 中再utf8编码存储⽅式下数字表⽰的是字符数,但是在其他⽅式下就根据情况定,需要再相应环境下探索⼀下。
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()分别返回日期参数,在一周、一月、一年中的位置。
MySQL和SqlServer的sql语句区别
MySQL和SqlServer的sql语句区别1、⾃增长列的插⼊:SQLServer中可以不为⾃动增长列插⼊值,MySQL中需要为⾃动增长列插⼊值。
2、获取当前时间函数:SQLServer写法:getdate()MySQL写法:now()3、从数据库定位到表。
Sqlserver写法:库名.dbo.表名;或者:库名..表名(注:中间使⽤两个点)select password from ers where userName='boss'或者select password from ers where userName='boss'mysql写法:库名.表名select password from ers where userName='boss'4、判断是否存在某个数据库,若存在,则删除Sqlserver写法:IF DB_ID('users') IS NOT NULLDROP DATABASE usersMysql写法:Drop DATABASEif existsusers拓展:若sqlserver数据库正在使⽤中,删除之前,先要把数据库变成“单⼀⽤户”,再删除ALTER DATABASE users SET SINGLE_USER with ROLLBACK IMMEDIATE IF DB_ID('users') IS NOT NULL DROP DATABASE users 另附:判断某数据库中是否存在某张表,若存在,则删除Sqlserver写法:if exists(select * from sysobjects where name ='Users_test')drop table Users_testMysql写法:DROP TABLE IF EXISTSUsers_test5、主键存在,则更新,不存在,则插⼊Mysql写法:INSERT into users (userID,userName,password) VALUES (1,’jmj’,’123’) ON DUPLICATE KEY UPDATE userName='jmj', password =123Sqlserver没有mysql这样的关键字,只能组合sql语句来实现操作:if not exists (select userID from users where userID= 1)insert into users (userID,userName,password) values(1,’jmj’,’123’) else update users set userName= ’jmj’, password=’123’ where userID = 1(关于On duplicate key update的两篇⽂章,推荐给⼤家!可遇不可求的Question之SQLServer的INSERT ON DUPLICATE KEY UPDATE语法篇MySql避免重复插⼊记录⽅法(ignore,Replace,ON DUPLICATE KEY UPDATE))6、符号的使⽤mysql对参数可以使⽤单引号,也可以使⽤双引号,对字段名和表明可以使⽤反引号。
mysql与sqlserver语句的区别
MySql与SqlServer的一些常用用法的差别由于工作的原因:上家公司的数据库全采用MySql,所以不得不用它。
因此也学到了MySql 的一些知识,但考虑到今后可能没机会使用了,所以想趁现在离职在家休息,打算把这些东西整理一下,也为了万一今后能用上,留个参考的资源。
考虑到一直在使用SqlServer,所以就打算直接与SqlServer对比来写。
本文将主要列出MySql与SqlServer不同的地方,且以常用的存储过程的相关内容为主。
1. 标识符限定符SqlServer []MySql ``2. 字符串相加SqlServer 直接用+MySql concat()3. isnull()SqlServer isnull()MySql ifnull()注意:MySql也有isnull()函数,但意义不一样4. getdate()SqlServer getdate() MySql now()5. newid()SqlServer newid()MySql uuid()6. @@ROWCOUNT SqlServer @@ROWCOUNTMySql row_count()注意:MySql的这个函数仅对于update, insert, delete有效7. SCOPE_IDENTITY() SqlServer SCOPE_IDENTITY() MySql last_insert_id()8. if ... else ...SqlServer IF Boolean_expression{ sql_statement | statement_block }[ ELSE{ sql_statement | statement_block } ]-- 若要定义语句块,请使用控制流关键字BEGIN 和END。
MySql IF search_condition THEN statement_list[ELSEIF search_condition THEN statement_list] ...[ELSE statement_list]END IF注意:对于MySql来说,then, end if是必须的。
mysql 转sql server sql语句-概述说明以及解释
mysql 转sql server sql语句-概述说明以及解释1.引言1.1 概述概述MySQL是一种开源的关系型数据库管理系统,而SQL Server是由微软公司开发和发布的关系型数据库管理系统。
虽然它们都是流行的数据库系统,但它们在一些方面存在一些差异。
本文将探讨将MySQL数据库转换为SQL Server数据库的方法和必要性。
MySQL转SQL Server的过程可能是由于不同原因的需求,比如迁移已有的应用程序、利用SQL Server的特定功能以及与现有的SQL Server环境进行集成等。
在本文中,我们将分析MySQL与SQL Server之间的区别,并介绍转换过程的必要性。
此外,我们还将提供一些转换的方法以及在转换过程中需要注意的一些建议和注意事项。
通过本文的阅读,读者将能够了解MySQL与SQL Server之间的差异,以及为什么有时候需要将MySQL数据库转换为SQL Server。
同时,读者还将获得一些有用的指导,帮助他们顺利完成转换过程并避免一些常见的问题。
接下来的章节将更进一步地探讨MySQL与SQL Server之间的区别,并详细介绍MySQL转SQL Server的必要性。
1.2文章结构1.2 文章结构本文主要围绕将MySQL转换为SQL Server的SQL语句展开讨论。
为了更好地组织内容,本文分为以下几个部分:1. 引言:介绍本文的背景和目的,概述MySQL和SQL Server之间的区别。
2. 正文:2.1 MySQL与SQL Server的区别:详细介绍MySQL和SQL Server的特点和功能差异,包括数据类型、存储引擎、事务处理、语法等方面的对比。
2.2 MySQL转SQL Server的必要性:探讨为何需要将MySQL 迁移到SQL Server,并分析转换过程中可能遇到的问题和挑战。
3. 结论:3.1 总结MySQL转SQL Server的方法:总结转换的步骤和方法,包括数据迁移、语法转换、索引和约束的处理等方面。
MySQL与SQLServer的区别(一千条语句)
MySQL与SQLServer的区别(⼀千条语句)ER图、分页、差异、Java连接MySQLSELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT ⼦句可以被⽤于强制 SELECT 语句返回指定的记录数。
LIMIT 接受⼀个或两个数字参数。
参数必须是⼀个整数常量。
如果给定两个参数,第⼀个参数指定第⼀个返回记录⾏的偏移量,第⼆个参数指定返回记录⾏的最⼤数⽬。
初始记录⾏的偏移量是 0(⽽不是 1):为了与 PostgreSQL 兼容,MySQL 也⽀持句法: LIMIT #OFFSET #。
区别⼀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,M12 mysql在创建表时要为每个表指定⼀个存储引擎类型,⽽mssql只⽀持⼀种存储引擎13 mysql不⽀持默认值为当前时间的datetime类型(mssql很容易做到),在mysql⾥⾯是⽤timestamp类型14 mssql⾥⾯检查是否有这个表再删除,需要这样:1516if exists (select*from dbo.sysobjects where id =object_id(N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable') =1)1718但是在mysql⾥⾯只需要DROP TABLE IF EXISTS cdb_forums;19 mysql⽀持⽆符号型的整数,那么⽐不⽀持⽆符号型的mssql就能多出⼀倍的最⼤数存储20 mysql不⽀持在mssql⾥⾯使⽤⾮常⽅便的varchar(max)类型,这个类型在mssql⾥⾯既可做⼀般数据存储,也可以做blob数据存储21 mysql创建⾮聚集索引只需要在创建表的时候指定为key就⾏,⽐如:KEY displayorder (fid,displayorder) 在mssql⾥⾯必须要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers 2223 (username asc,appid asc)24 mysql text字段类型不允许有默认值2526 mysql的⼀个表的总共字段长度不超过65XXX。
oracle、MySQL、SQLServer的比较
oracle、MySQL、SQLServer的⽐较MySql的优点:1 MYSQL⽀持5000万条记录的数据仓库(3.x版本就⽀持了)2 MYSQL适应所有平台。
3 MYSQL是开源软件,开源的东西似乎总是⽐较实在⼀点,不会有太多商业化的考虑。
4 学起来简单5 MYSQL 因为是开源的,所以⽀持任意修改,也就是说你可以去除你不需要的功能,从⽽简化MYSQL,提⾼速度。
6美国西部时间2006年2⽉4⽇,测试⼚商Coverity公司发表声明,称对MySQL数据库软件的源代码进⾏分析后,结果表明其缺陷数量远远⼩于商业数据库软件的⽔平。
7使⽤C和C++编写,并使⽤了多种编译器进⾏测试,保证源代码的可移植性8⽀持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统9为多种编程语⾔提供了API。
这些编程语⾔包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
10⽀持多线程,充分利⽤CPU资源11优化的SQL查询算法,有效地提⾼查询速度12既能够作为⼀个单独的应⽤程序应⽤在客户端服务器⽹络环境中,也能够作为⼀个库⽽嵌⼊到其他的软件中提供多语⾔⽀持,常见的编码如中⽂的GB 2312、BIG5,⽇⽂的Shift_JIS等都可以⽤作数据表名和数据列名13 提供TCP/IP、ODBC和JDBC等多种数据库连接途径14 提供⽤于管理、检查、优化数据库操作的管理⼯具MySql的缺点:1、MySQL最⼤的缺点是其安全系统,主要是复杂⽽⾮标准,另外只有到调⽤mysqladmin来重读⽤户权限时才发⽣改变。
2、MySQL的另⼀个主要的缺陷之⼀是缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的⼀种固定的范围限制)可以通过⼤量的数据类型来补偿。
SQLserver与MySQL的区别(数据库小白须知!!!)
SQLserver与MySQL的区别(数据库⼩⽩须知)SQLserver与mysql的区别1、概述的不同 SQL Server 是Microsoft 公司推出的关系型数据库管理系统。
具有使⽤⽅便可伸缩性好与相关软件集成程度⾼等优点,可跨越从运⾏Microsoft Windows 98 的膝上型电脑到运⾏Microsoft Windows 2012 的⼤型多处理器的服务器等多种平台使⽤。
Microsoft SQL Server 是⼀个全⾯的数据库平台,使⽤集成的商业智能 (BI)⼯具提供了企业级的数据管理。
Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理⽤于业务的⾼可⽤和⾼性能的数据应⽤程序。
MySQL是⼀个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,⽬前属于 Oracle 旗下公司。
MySQL 最流⾏的关系型数据库管理系统,在 WEB 应⽤⽅⾯ MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应⽤软件之⼀。
MySQL 是⼀种关联数据库管理系统,关联数据库将数据保存在不同的表中,⽽不是将所有数据放在⼀个⼤仓库内,这样就增加了速度并提⾼了灵活性。
MySQL 所使⽤的 SQL 语⾔是⽤于访问数据库的最常⽤标准化语⾔。
2、应⽤范围的不同 SQL Server的应⽤范围,和其具体的版本有⼀定的关系,基本上是:企业版(Enterprise Edition)(⼤中型企业商⽤);标准版(Standard Edition)(⼩型企业商⽤);开发版(Developer Edition)(开发公司、开发⼈员使⽤);个⼈版(Personal Edition)(开发⼈员使⽤);MSDE 2000(Microsoft SQL Server 2000 Desktop Engine)(简单的单机数据库、开发⼈员开发测试使⽤) mysql的应⽤:Web⽹站系统:安装配置简单,性能优越,开源。
- 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值。