今日新接到任务,让比对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 是中文版的,不会英语的就用这个

 

 

好像漏了函数了哈

补一下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

更多推荐