概述
今日新接到任务,让比对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 与sqlserver对比?哪个更好用?的全部内容,希望文章能够帮你解决mysql 与sqlserver对比?哪个更好用?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复