今日新接到任务,让比对mysql与sqlserver有啥不同,哪个更好用,以便以后做数据库迁移的时候能统计工作量,现在我所在的作坊是用sqlserver给客户安装,大家都知道sqlserver是收费的,我的亲娘啊啊,是收费的,万一哪天来张传票,就over了~

行吧,为了世界和平,我就再此做个总结

首先一想到该数据库,显示我库里的这些东西能不能原模原样搬过去,我带大家捋一下一个库里基本存在的东西

第一个是建库 ,没库谈个啥

第二是建表,表里呢包括字段,字段类型,尤其那个id自增,主键,外键 索引 是否为空等等

第三个是存储过程

第四个是函数,库里自带的内置函数,比如日期类型函数、数值型函数 等

第五个导出导入库时候是啥样的

第六个,是啥呢,是和开发环境VS选择ORM时,能够是否简单的操作使用呢?

今天就先列这六个,再多了小编就该掉头发了,掉头发了,肿么办?

第一个创建数据库

很幸运,mysql与sqlserver没有不同,pass!

第二个创建表

这里有个坑爹的语法不同,不过都是小问题,待小主给你们贴码!是不是就喜欢这个源码,源码,我要源码~

SqlServer:
CREATE TABLE [dbo].[UserInfo](
     [ID] [int] IDENTITY(1,1) NOT NULL,
     [Name] [nvarchar](50) NULL,
     [age] [int] NULL    
 )Mysql
CREATE TABLE `userinfo` (
     `id` INT(11) NOT NULL AUTO_INCREMENT,
     `UserName` VARCHAR(50) NULL DEFAULT NULL,
     `Age` INT(11) NOT NULL
 )

很明显吧,不用我说了~ 其他字段,字段有哪些类型,常用的通用,自己看着去比吧

第三个存储过程,这是一个坑,想要搬存储过程的,小伙,你得费点劲,本来写一个就够费劲了,还得改

SqlServer
create procedure proc_stu1
@a int,
@b int,
@c int output
as
set @c=@a+@b
select @c
go
执行时:
DECLARE @return_value int
EXEC proc_stu1 1,2,@return_value output
MySql
CREATE DEFINER=`root`@`localhost` PROCEDURE `addmath`(in a int,in b int ,out c int )
BEGIN
set c=a+b;
END

执行时

call addmath (1,2,  @c);
select @c
Call ProName(参数1,参数2,...)

传参方式不同,这是最大的一个雷区,另外还有一个小雷区 

sqlserver 存储过程中 else  if 中间是有空格的,但是mysql呢? 是elseif,它是连起来的,细心的朋友仔细看出来了吧;

可能其他地方还有细微的不同,小编就不写了

第四个触发器

MySql
DROP TRIGGER IF EXISTS `tri_insert_user`;
DELIMITER ;;
CREATE TRIGGER `tri_insert_user` AFTER INSERT ON `user` FOR EACH ROW begin
    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (new.id, 'add a user',  now());
end
;;
DELIMITER ;
 
SqlServer
 
CREATE TRIGGER    tri_insert_user
  on usertable
   AFTER INSERT 
   as
   declare @new_id int
   select @new_id=id from usertable
   
    INSERT INTO user_history(user_id, operatetype, operatetime)
    VALUES (@new_id, 'add a user',  getdate());
Go

这个触发器好似前后 on after,一个在前,一个在后,写的时候注意吧

第五个 数据库备份

Mysql备份文件是.sql文件、

SqlServer 备份文件是.bak文件

第六个 与ORM结合使用比较,我主要做了三个测试 dapper,EF,ADO

of couse dapper 是最好用,Nugut包安装好就可以使用

ADO也可以,只不过语法多一点

最头疼的是EF框架

大家都知道sqlserver 是微软的亲生,而mysql就没有那么容易了

首先我的mysql 用的是8.0.18,如果你也是8.0以上版本的话,就不要用vs2015是不支持的,因为在创建实体模型时候会出现对话框闪退现象,变态中的变态,各方测试后,方法只有要么选择降低mysql的版本,要么升级vs

我选择是升级到vs2019,好啦这次nuget包里的版本能对应上了,但是连接不上数据库,第二个变态,

为什么呢,因为mysql8 跟mysql5的一个区别是 密码加密不用 mysql_native_password 方式, 默认用的是 caching_sha2_password。

所以,我们试着改一下密码规则吧,测试之后很简单

找到安装的mysql文件夹下的 my.ini 文件,修改默认的密码规则

填上这句就可以,记得把之前的defalut——authentication_plugin 注释掉

default_authentication_plugin=mysql_native_password 

差不多了,再试试吧,就可以了哈!

再就是编辑器了,除了官网的mysql workbeench外,再就是heidisql,heidisqls 是中文版的,不会英语的就用这个

 

 

好像漏了函数了哈

补一下

mysql与sql server性能 mysql和sql server哪个用的多_存储过程

mysql与sql server性能 mysql和sql server哪个用的多_mysql与sql server性能_02