mysql和sqlserver比较
mysql 与 sql server 排序规则
mysql 与sql server 排序规则MySQL和SQL Server是两种不同的关系型数据库管理系统(RDBMS),它们在排序规则方面有一些区别。
下面将详细介绍MySQL和SQL Server的排序规则。
1. MySQL的排序规则(Collation):MySQL使用Collation来确定字符串和文本数据的排序规则。
Collation规则由字符集(Character Set)和比较规则(Comparison Rule)组成。
MySQL支持多种字符集和比较规则,其中最常见的是utf8mb4_general_ci。
在utf8mb4_general_ci字符集中,ci表示大小写不敏感,即'A'和'a'被认为是相等的。
MySQL的排序规则基于Unicode字符集,它通过比较字符的Unicode编码值来确定排序顺序。
每个字符在Unicode中都有一个唯一的编码值,比较规则通过比较这些编码值来确定字符的排序位置。
MySQL的排序规则可通过以下方式设置:- 在创建数据库或表时,可以指定特定的字符集和排序规则。
- 可以通过ALTER TABLE语句修改表的字符集和排序规则。
- 可以为查询语句的特定列指定排序规则。
2. SQL Server的排序规则(Collation):SQL Server也使用Collation来确定字符串和文本数据的排序规则。
与MySQL 类似,SQL Server的Collation规则也包括字符集和比较规则。
SQL Server支持多种字符集和比较规则,其中最常见的是SQL_Latin1_General_CP1_CI_AS。
在SQL_Latin1_General_CP1_CI_AS字符集中,CI表示大小写不敏感。
SQL Server的排序规则基于Windows操作系统的本地设置。
它使用Windows 排序规则(Windows Collation)来确定字符的排序顺序。
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%的记录。
数据库管理系统比较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;。
MySQL、Oracle、SqlServer三种数据库的优缺点
MySQL、Oracle、SqlServer三种数据库的优缺点这篇文章主要介绍了sqls erver、Mysql、Oracle三种数据库的优缺点总结,需要的朋友可以参考下。
一、sqlserv er优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。
从数据管理和分析角度看,将原始数据转化为商业智能和充分利用We b带来的机会非常重要。
作为一个完备的数据库和数据分析包,SQLServ er为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。
作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServ er是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Inter net上和防火墙外进行查询的能力;缺点:开放性:SQL Server只能windo ws上运行没有丝毫开放性操作系统系统稳定对数据库十分重要Windows9X系列产品偏重于桌面应用NT server只适合小型企业而且wind ows平台靠性安全性和伸缩性非常有限象unix样久经考验尤其处理大数据库;伸缩性并行性:S QL server并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限;安全性:没有获得任何安全证书。
性能:SQL Server多用户时性能佳;客户端支持及应用模式:客户端支持及应用模式。
只支持C/S模式,SQL Server C/S结构只支持w indows客户用ADO、DAO、OLEDB、ODBC连接;使用风险:SQL server完全重写代码经历了长期测试断延迟许多功能需要时间来证明并十分兼容;二、Oracle优点:开放性:Oracle能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持;可伸缩性,并行性:Oracle并行服务器通过使组结点共享同簇工作来扩展windo wnt能力提供高用性和高伸缩性簇解决方案wind owsNT能满足需要用户把数据库移U NIXOra c le并行服务器对各种U NIX平台集群机制都有着相当高集成度;安全性:获得最高认证级别的ISO标准认证。
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的区别
MySQL和SqlServer的区别⼀、查看表结构数量等mysql语句:-- 查看系统内所有数据库show databases;-- 查询数据库内所有表show tables;-- 显⽰表结构desc表名;sql server语句:-- 查看系统内所有数据库SELECT name, database_id, create_date FROM sys.databases ;-- 查询数据库内所有表select* from sysobjects where xtype= 'U';-- 显⽰表结构sp_help orderssp_columns orders⼆、查询前⼏条记录查询前10条记录:mysql语句:select* from student limit 10;sql server语句:select top10 * from student;三、获取当前时间mysql语句:now()sql server语句:getdate()四、使⽤表全限定名mysql语句:select password from ers where userName='boss'sql server语句:select password from ers where userName='boss'或者select password from ers where userName='boss'五、⾃增字段设置mysql语句:id int primary key auto_incrementsql server语句:id int primary key identity(1,1)六、⽇期时间格式转换⽅式INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,cast('1980-12-17'as datetime ),800,NULL,20); //sql servers和mysql都可⽤,⽽且mysql还可以直接⽤'1980-12-17';INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,convert(datetime,'1981-2-20',110),1600,300,30); //sql server可⽤,但mysql不可⽤INSERT INTO emp VALUES (7935,'MILLER','CLERK',7782,convert(nvarchar,getdate(),120),1300,NULL,10);//sql server可⽤,但mysql不可⽤七、修改字段的数据类型mysql语句:alter table test2 modify id bigint;sql server语句:alter table emp alter column[id] bigint⼋、约束类型mysql常⽤的⼏种约束:⾮空约束(not null)唯⼀性约束(unique)主键约束(primary key) PK外键约束(foreign key) FK默认值(default)检查约束(⽬前MySQL不⽀持、Oracle⽀持)sql server常⽤的⼏种约束:⾮空约束主键约束(PK) Primary key唯⼀约束(UQ) Unique默认约束(DF) Default外键约束(FK) Foreign key检查约束(CK) Check九、对枚举字段的处理mysql语句:create table t1(id int primary key auto_increment,name varchar(16) not null,sex enum('male','female') not null default'male');sql server语句:CREATE TABLE Users(id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,name NVARCHAR(50) NOT NULL,sex NVARCHAR(2) CHECK(sex='男'OR sex='⼥'))或者:ALTER TABLE ersADD CONSTRAINT CK_UserSex CHECK(Gender='男'OR Gender='⼥')⼗、 MySQL不⽀持默认值为当前时间的datetime类型(MS SQL很容易做到),在MySQL⾥⾯是⽤timestamp类型⼗⼀、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)。
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、SqlServer、Oracle三大数据库的区别
浅谈Mysql、SqlServer、Oracle三⼤数据库的区别⼀、MySQL优点:1. 体积⼩、速度快、总体拥有成本低,开源;2. ⽀持多种操作系统;3. 是开源数据库,提供的接⼝⽀持多种语⾔连接操作;MySQL的核⼼程序采⽤完全的多线程编程。
线程是轻量级的进程,它可以灵活地为⽤户提供服务,⽽不过多的系统资源。
⽤多线程和C语⾔实现的mysql能很容易充分利⽤CPU;MySql有⼀个⾮常灵活⽽且安全的权限和⼝令系统。
当客户与MySql服务器连接时,他们之间所有的⼝令传送被加密,⽽且MySql⽀持主机认证;⽀持ODBC for Windows,⽀持所有的ODBC 2.5函数和其他许多函数,可以⽤Access连接MySql服务器,使得应⽤被扩展;⽀持⼤型的数据库,可以⽅便地⽀持上千万条记录的数据库。
作为⼀个开放源代码的数据库,可以针对不同的应⽤进⾏相应的修改;拥有⼀个⾮常快速⽽且稳定的基于线程的内存分配系统,可以持续使⽤⾯不必担⼼其稳定性;MySQL同时提供⾼度多样性,能够提供很多不同的使⽤者介⾯,包括命令⾏客户端操作,⽹页浏览器,以及各式各样的程序语⾔介⾯,例如C+,Perl,Java,PHP,以及Python。
你可以使⽤事先包装好的客户端,或者⼲脆⾃⼰写⼀个合适的应⽤程序。
MySQL可⽤于Unix,Windows,以及OS/2等平台,因此它可以⽤在个⼈电脑或者是服务器上。
缺点:1. 不⽀持热备份;2. MySQL最⼤的缺点是其安全系统,主要是复杂⽽⾮标准,另外只有到调⽤mysqladmin来重读⽤户权限时才发⽣改变;3. 没有⼀种存储过程(Stored Procedure)语⾔,这是对习惯于企业级数据库的程序员的最⼤限制;4. MySQL的价格随平台和安装⽅式变化。
Linux的MySQL如果由⽤户⾃⼰或系统管理员⽽不是第三⽅安装则是免费的,第三⽅案则必须付许可费。
Unix或linux ⾃⾏安装免费、Unix或Linux 第三⽅安装收费。
sql server和mysql底层原理
sql server和mysql底层原理SQL Server和MySQL是两个常用的关系型数据库管理系统(RDBMS),它们在底层原理上有一些不同之处,本文将对它们的底层原理进行比较和分析。
一、概述SQL Server是由Microsoft开发和维护的,而MySQL则是由Oracle公司开发和维护的。
两者都是基于客户端/服务器架构设计的数据库管理系统,可以通过SQL语言来操作和管理数据。
二、存储引擎SQL Server和MySQL的存储引擎不同。
SQL Server使用了称为“SQL Server数据库引擎”的存储引擎,而MySQL则支持多种存储引擎,如InnoDB、MyISAM等。
不同的存储引擎在底层实现上有一些差异,会影响到数据的存储方式、事务处理能力等方面。
三、锁机制SQL Server和MySQL在锁机制上也有所不同。
SQL Server采用了多粒度锁机制,包括行级锁、页级锁和表级锁,可以根据不同的需求选择合适的锁粒度。
而MySQL的默认存储引擎InnoDB使用了行级锁,可以提供更好的并发性能和事务处理能力。
四、事务处理事务是数据库管理系统中重要的概念,用于保证数据的一致性和完整性。
SQL Server和MySQL都支持事务处理,但在底层实现上有所不同。
SQL Server使用了称为“写前日志”的机制来保证事务的ACID特性,即原子性、一致性、隔离性和持久性。
而MySQL的InnoDB存储引擎也使用了类似的日志机制来实现事务处理。
五、查询优化查询优化是数据库管理系统中的重要环节,能够提高查询效率。
SQL Server和MySQL在查询优化上也有一些差异。
SQL Server 使用了称为“查询优化器”的组件来生成查询计划,通过选择合适的索引、重新排序查询语句等方式来提高查询效率。
而MySQL也有自己的查询优化器,可以根据查询的复杂度和数据量选择合适的查询策略。
六、索引索引是提高数据库查询效率的重要手段。
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。
mysql和sqlserver中的text数据类型 -回复
mysql和sqlserver中的text数据类型-回复MySQL和SQL Server是两种常用的关系型数据库管理系统(RDBMS),它们在数据存储和处理方面有许多共同点,但也存在一些差异。
其中,text 数据类型是它们之间的一个关键区别点。
本文将一步一步回答有关MySQL和SQL Server中text数据类型的问题,以帮助读者更好地理解和使用它们。
2. 什么是text数据类型?text是一种用于存储大量文本数据的数据类型。
它可以容纳数千或数百万个字符,适用于存储较长的文本、文章、帖子等数据。
尽管MySQL和SQL Server都具有text数据类型,但它们的实现方式有所不同。
3. MySQL中的text数据类型在MySQL中,有四个相关的数据类型可以用于存储文本数据:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。
它们之间的区别在于允许存储的最大字符数。
TINYTEXT可以存储最多255个字符,TEXT可以存储最多65,535个字符,MEDIUMTEXT可以存储最多16,777,215个字符,而LONGTEXT可以存储最多4,294,967,295个字符。
使用text数据类型时,需要注意以下事项:- text列不能有默认值。
- text列的排序和索引会有一些限制。
- text列的值不参与计算列宽。
- text列的值在查询时被视为长字符串,因此不能使用普通字符串函数对其进行操作。
4. SQL Server中的text数据类型与MySQL不同,SQL Server只有一个text数据类型,可以存储最多2^31-1个字符(即2,147,483,647个字符)。
text数据类型在SQL Server 中用于存储大型文本和字符数据。
然而,在SQL Server 2005及更高版本中,text数据类型已过时,并被nvarchar(max)和varchar(max)所取代。
nvarchar(max)和varchar(max)也可以存储大量的文本数据,且提供了更好的性能和灵活性。
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)。
Mysql和sqlServer命令比较按语句功能划分,依次讲解目录一数据定义 (2)1 数据库操作基本命令 (2)2 CREATE TABLE --创建一个数据库表 (2)2.1PRIMARY KEY 约束(主键)区别解析: (2)2.1.1 创建primary key (2)2.1.2 撤销PRIMARY KEY 约束 (3)2.1.3 创建外健约束 (3)2.1.4 撤销外健约束 (4)2.2UNIQUE 约束(唯一的,独一无二的)区别解析 (4)2.2.1 创建UNIQUE约束 (4)2.2.2 撤销UNIQUE 约束 (5)2.3CHECK 约束 (5)2.3.1 创建CHECK约束 (5)2.3.2 撤销CHECK约束 (6)2.4DEFAULT 约束(系统默认值) (6)2.4.1 创建DEFAULT约束 (6)2.4 .2 撤消DEFAULT约束 (7)2.5索引区别 (7)2.6主键自动增加的区别 (7)2.7MySQL支持enum,和set类型,SQL Server不支持 (8)2.7.1枚举enum (8)2.7.2集合set (9)2.8MySQL不支持nchar,nvarchar,ntext类型 (10)3DROP TABLE –删除一个数据库表 (10)4显示库表 (11)5alter 修改库表 (11)二数据操作 (12)2.1 limit和top (12)2.2 ISNULL()函数 (12)2.3 select查询 (12)2.4 insert 插入 (12)2.6 update 修改 (12)2.7 delete 删除 (13)三语法定义 (13)3.1 注释符区别 (13)3.2 识别符的区别 (13)3.3存储过程的区别(未经验证,从网上找的) (13)3.4字符串连接 (14)四函数和数据类型的区别 (14)4.1 Date 函数 (14)五性能比较 (15)一数据定义1 数据库操作基本命令Mysql:create database name; 创建数据库use databasename; 选择数据库drop database name 直接删除数据库,不提醒–2 CREATE TABLE --创建一个数据库表2.1PRIMARY KEY 约束(主键)区别解析:2.1.1 创建primary keyMysql:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),PRIMARY KEY (Id_P) //声明主健写在最后)SqlServer:CREATE TABLE Persons(Id_P int NOT NULL PRIMARY KEY, //声明主健紧跟列后LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))但是如果表存在,之后给表加主健时:Mysql 和SqlServerALTER TABLE Persons ADD PRIMARY KEY (Id_P)2.1.2撤销PRIMARY KEY 约束MySQL:ALTER TABLE Persons DROP PRIMARY KEYSQL ServerALTER TABLE Persons DROP CONSTRAINT pk_PersonID2.1.3 创建外健约束MySQL:CREATE TABLE Orders(O_Id int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (O_Id),FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) //写在最后)SQL ServerCREATE TABLE Orders(O_Id int NOT NULL PRIMARY KEY,OrderNo int NOT NULL,Id_P int FOREIGN KEY REFERENCES Persons(Id_P) //顺序不同)如果在"Orders" 表已存在的情况下为"Id_P" 列创建FOREIGN KEY 约束,请使用下面的SQL:MySQL / SQL ServerALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)2.1.4 撤销外健约束MySQL:ALTER TABLE Orders DROP FOREIGN KEY f k_PerOrdersSQL ServerALTER TABLE Orders DROP CONSTRAINT fk_PerOrders2.2UNIQUE 约束(唯一的,独一无二的)区别解析UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的UNIQUE 约束。
请注意,每个表可以有多个UNIQUE 约束,但是每个表只能有一个PRIMARY KEY 约束。
2.2.1 创建UNIQUE约束MySQL:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),UNIQUE (Id_P) //写在最后)SQL ServerCREATE TABLE Persons(Id_P int NOT NULL UNIQUE, //紧跟列后LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))2.2.2 撤销UNIQUE 约束MySQL:ALTER TABLE Persons DROP INDEX uc_PersonIDSQL ServerALTER TABLE Persons DROP CONSTRAINT uc_PersonID2.3CHECK 约束CHECK 约束用于限制列中的值的范围。
如果对单个列定义CHECK 约束,那么该列只允许特定的值。
如果对一个表定义CHECK 约束,那么此约束会在特定的列中对值进行限制。
2.3.1 创建CHECK约束下面的SQL 在"Persons" 表创建时为"Id_P" 列创建CHECK 约束。
CHECK 约束规定"Id_P" 列必须只包含大于0 的整数。
My SQL:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CHECK (Id_P>0) //写在最后)SQL ServerCREATE TABLE Persons(Id_P int NOT NULL CHECK (Id_P>0), //紧跟列后LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))如果需要命名CHECK 约束,以及为多个列定义CHECK 约束,请使用下面的SQL 语法:MySQL / SQL Server:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') //多个条件)如果在表已存在的情况下为"Id_P" 列创建CHECK 约束,请使用下面的SQL:MySQL / SQL Server:ALTER TABLE Persons ADD CHECK (Id_P>0)2.3.2 撤销CHECK约束Sqlserver:ALTER TABLE Persons DROP CONSTRAINT chk_PersonMysql我没有找到怎么删除。
2.4DEFAULT 约束(系统默认值)DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新纪录。
2.4.1 创建DEFAULT约束下面的SQL 在"Persons" 表创建时为"City" 列创建DEFAULT 约束:My SQL / SQL Server:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255) DEFAULT 'Sandnes' //紧跟列后,默认值字符串Sandnes)通过使用类似GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:CREATE TABLE Orders(Id_O int NOT NULL,OrderNo int NOT NULL,Id_P int,OrderDate date DEFAULT GETDATE() //紧跟列后,函数)如果在表已存在的情况下为"City" 列创建DEFAULT 约束,请使用下面的SQL:MySQL:ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'SQL Server:ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'2.4 .2 撤消DEFAULT约束MySQL:ALTER TABLE Persons ALTER City DROP DEFAULTSQL Server:ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT2.5索引区别CREATE INDEX 语句CREATE INDEX 语句用于在表中创建索引。