MySQL8.0与SQL server 2016都是关系型数据库,两者在原理与技术方面有极高的相似度。本文主要简述笔者在学习过程中发现的两者有区别的部分,如果读者知道还有其他区别的点,欢迎进行评论补充,大家一起交流学习,共同成长!

1.MySQL 可使用 【CREATE TABLE 新表表名 LIKE  来源表表名 】语句将一个表的结构复制到另一个新表中去。新表的列名、数据类型、计算列的定义表达式以及主键、默认值、CHECK 等约束条件与原表相同。MySQL 还可使用 【CREATE  TABLE 新表表名 SELECT * FROM 来源表表名】语句将表结构和数据从其他表中批量复制过来。

在SQL server中,虽然通常使用 CREATE TABLE 语句建表,但是 SELECT … INTO 语句提供了一种不需要显式定义列名和数据类型的另一种建表途径,同时可以将一个查询结果复制到另一张新表中去。但必须指出的是,这个结果集中的每一列都必须有一个明确的、合法的以及互不相同的列名(或别名)。如果查询列表中包含表达式,则必须为表达式指定别名。SELECT … INTO 子句在复制一个表中的行到新表的同时,也将表中的列及列的部分特征复制到了新表,但不能完全复制源表中的约束条件,或者说它不可能复制完整的表结构。例如,源表中列的 IDENTITY 属性和 NOT NULL 约束可以复制到新表,但其它约束条件(包括主键、外键、 CHECK )或计算列中定义的表达式都无法复制到新表中。

/* 在SQL server中,将 Employees 表中前 10 行的四个列复制到新表 myEmployees 中去。*/
DROP TABLE myEmployees
SELECT TOP 10 EmployeeID, LastName,FirstName,Title INTO myEmployees FROM Employees
ORDER BY LastName
GO

2.MySQL 使用【desc  表名】语句查看表的结构,而SQL server使用【 exec sp_help '表名'】语句查看表的结构。

3.MySQL 的单行注释使用 # ,而SQL server的单行注释使用 -- 。另外MySQL还可以使用 COMMENT 语句对表中某些列进行注释。

4.MySQL 在创建表和定义列时,可以将表中的某一列设置成 AUTO_INCREMENT 属性。
AUTO_INCREMENT 表示新增的列是一种自增长列(或称为标识列)。可在建表时可用 AUTO_INCREMENT=n 选项来指定一个自增的初始值,也可用ALTER TABLE table_name  AUTO_INCREMENT=n 命令来重新设置自增列的起始值,其默认的起始值是 1,还可以在插入列数据时,给自增长列赋值。然而,SQL server在创建表和定义列时,可以将表中的某一列设置成 Identity 属性。 Identity 表示新增的列是一种标识符列(或称为标识列),在定义 Identity 列时,必须同时指定基数和增量,或者二者都不指定。如果二者都未指定,则取默认值 Identity (1, 1) 。

##  当插入记录时,如果为 AUTO_INCREMENT 数据列明确指定一个数值,则会出现两种情况:如果插入的值与已有的编号重复,则会出现出错信息,因为 AUTO_INCREMENT 数据列的值必须是唯一的;如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

5.MySQL 计算列要求为计算列指定一个数据类型,而且定义计算列的表达式必须用中括号()扩起来。通常,计算列不会物理存储在表中,但如果将计算列标记为 STORED,那么数据被物理地保存在数据库中,这时也可允许计算列创建索引,以提高数据查询速度。此外,MySQL在计算列表达式中不能包含 AUTO_INCREMENT自增列;也不能使用诸如now()、sysdate()等系统日期时间的函数;存储引擎表(即在建表时使用ENGINE = MEMORY选项)中不能定义计算列。 然而, SQL Server计算列的数据类型由 SQL Server 自动的根据表达式判断而确定,用户不能为计算列显式地指定一个数据类型,但是可以在计算列的表达式中使用数据类型转换函数 CAST() ,强制改变计算列值的数据类型。由于计算列是一个基于其它列的表达式,因此它通常不会物理存储在表中,除非使用 SQL Server2008 中的 PERSISTED 关键字。

6.MySQL的每条语句必须用“;”结束,除非该语句是批处理的最后一条语句,而且没有GO语句。而SQL Serve并没有强制是否要用“;”结束,且有GO语句。

7.MySQL的删表语句是【DROP TABLE IF EXISTS 表名;】,而SQL Server 2016有如下三种删表语句【DROP TABLE IF EXISTS 表名;】【IF EXISTS(SELECT 1 FROM sysobjects WHERE name='表名') DROP TABLE 表名】【IF ((bject_id('表名') is not null) DROP TABLE 表名】。

8.MySQL在建表完成后,可以使用【 ALTER  TABLE 表名        ALTER 目标列  SET DEFAULT ...】语句,为既有的列增加缺省值。然而, SQL Server是【ALTER TABLE 表名         ADD CONSTRAINT 约束名 DEFAULT (....)   FOR 目标列】。另外,MySQL用DEFAULT 定义列的缺省值(也称默认值)时,可以使用 current_timestamp 函数获取系统当前日期时间,但不能使用 now()、sysdate()等函数。

9.MySQL修改某一列的定义:Alter table 表名 modify Column 列名 varchar(100) Not Null;SQL server修改某一列的定义:Alter table 表名 Alter Column  列名 varchar(100) Not Null 。MySQL新增一列的定义:Alter table 表名 add Column 列名 varchar(100) Not Null;SQL server新增一列的定义:Alter table 表名 add  列名 varchar(100) Not Null 。

10.约束也是一种数据库对象,因此同一个数据库中约束的名称是不允许重复的。在定义列级约束时,约束的名称是可以缺省的,这时 MySQL 自动为它生成一个名称。同样的,在使用  ALTER TABLE 定义表级约束时,也可以不指定约束的名称。但是SQL Server在定义表级约束时,必须明确指定约束的名称。

/*MySQL增加表级约束条件(即用Alter table语句写),如主键、外键、唯一性约束等*/
#约束名可写可不写,可以写在primary key之前,也可以写在primary key之后
Alter table t1 Add constraint 约束名 primary key (orderid, productid)/*MySQL删除主键、外键、唯一性等约束条件*/
Alter table t1 Drop primary key   --直接写关键词即可/*SQL server增加表级约束条件 */
ALTER TABLE t1 Add Constraint 约束名 CHECK(f1>0)/*SQL server删除一个约束条件 */
ALTER TABLE t1 Drop Constraint 约束名   

MySQL8.0与SQL server 2016的技术区别(一)相关推荐

  1. 微软 SQL Server 2016 迁移技术培训实验营

     SQL 微软数据平台的专家们,您们还在为不了解 Oracle 产品技术而苦恼吗?您还在为无法提供 Oracle 客户迁移服务而困惑吗?快来参加此次微软 SQL Server 2016 迁移技术动 ...

  2. SQL Server 2016 列存储技术做实时分析

    title: SQL Server 2016 列存储技术做实时分析 author: 风移 摘要 数据分析指导商业行为的价值越来越高,使得用户对数据实时分析的要求变得越来越高.使用传统RDBMS数据分析 ...

  3. SQL Server 2016 新功能之综述

    冬去春来,发现之前最后一篇写在2012年,又过去了5年了,时间如飞啊.那时候SQL 2012 发布让人兴奋了一把,哪知道时间如刀,刀刀催人老啊,今天SQL 2016都发布了很久了,很快SQL On l ...

  4. sql server 2016不能全部用到CPU的逻辑核心数的问题

    最近在工作中遇到了,sql server 2016 不能把CPU 的核心全部用到的问题.通过分析工具看到 总共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到这问题,那么今天这节就先 ...

  5. SQL Server 2016 JSON原生支持实例说明

    原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...

  6. 【软件周刊】微软发布 Mac 版 Visual Studio,SQL Server 2016 SP1 紧跟节奏

    2019独角兽企业重金招聘Python工程师标准>>> 上周有不少关于微软的新闻,而且隔三差五就弄个大新闻.先是宣布推出针对苹果 Mac 环境的 Visual Studio for ...

  7. 修复SQL Server 2016年Microsoft.AnalysisServices.AdomdClientUI.dll程序集错误的前4个选项

    I've always been in favor of an orthodox strategy when it comes to applying SQL Server updates which ...

  8. sql azure 语法_在Azure中使用SQL Server 2016 CTP3

    sql azure 语法 As the time of the release of the next version of SQL Server is closing in, the cycle o ...

  9. SQL Server 2016中的本机JSON支持

    With the introduction of SQL Server 2016, Microsoft introduced many new features which had taken SQL ...

最新文章

  1. [设计模式]原型模式
  2. wireshark的Random packet generator是什么
  3. MatLab 自编的 均值滤波、中值滤波、高斯滤波 图像处理函数
  4. Android 动画之ScaleAnimation应用详解
  5. vue之computed和watch
  6. Nginx反向代理及负载均衡
  7. 数字化让618有了洞悉消费者内心的“大脑”
  8. ubuntu 20.04 下安装使用clash for windows
  9. python设计模式11-享元模式
  10. 爬取 wallhaven图片到本地壁纸库
  11. 计算机用户权限设置 xp,Windows XP权限设置详解 2
  12. 银联网关支付 java版
  13. android toast 怎么用,Android学习 Android Toast的使用
  14. 2022物联网工业互联网
  15. 中国网页游戏行业调研与分析
  16. SIM7600CE-CNSE 4G模组发送英文短信
  17. 强力推荐—20款免费备份文件软件
  18. 【UVM基础】CallBack机制快速上手指南
  19. hdu 6863 Isomorphic Strings
  20. / ./ ../的区别

热门文章

  1. 使用python生成文字视频
  2. seo专员日常工作内容是什么?
  3. 基于 CentOS 搭建微信小程序服务
  4. 商城项目15_采购需求、合并采购单、领取采购单、完成采购、仓库流程图
  5. DTP加载/ODS激活时持续黄灯的解决办法
  6. 将华氏度转换为摄氏度的简单代码
  7. 汇编语言(一)-基础知识
  8. Scratch软件编程等级考试三级——20191221
  9. SN74HC165驱动
  10. AD域详细介绍和部署