MySQL8.0与SQL server 2016的技术区别(一)
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的技术区别(一)相关推荐
- 微软 SQL Server 2016 迁移技术培训实验营
SQL 微软数据平台的专家们,您们还在为不了解 Oracle 产品技术而苦恼吗?您还在为无法提供 Oracle 客户迁移服务而困惑吗?快来参加此次微软 SQL Server 2016 迁移技术动 ...
- SQL Server 2016 列存储技术做实时分析
title: SQL Server 2016 列存储技术做实时分析 author: 风移 摘要 数据分析指导商业行为的价值越来越高,使得用户对数据实时分析的要求变得越来越高.使用传统RDBMS数据分析 ...
- SQL Server 2016 新功能之综述
冬去春来,发现之前最后一篇写在2012年,又过去了5年了,时间如飞啊.那时候SQL 2012 发布让人兴奋了一把,哪知道时间如刀,刀刀催人老啊,今天SQL 2016都发布了很久了,很快SQL On l ...
- sql server 2016不能全部用到CPU的逻辑核心数的问题
最近在工作中遇到了,sql server 2016 不能把CPU 的核心全部用到的问题.通过分析工具看到 总共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到这问题,那么今天这节就先 ...
- SQL Server 2016 JSON原生支持实例说明
原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...
- 【软件周刊】微软发布 Mac 版 Visual Studio,SQL Server 2016 SP1 紧跟节奏
2019独角兽企业重金招聘Python工程师标准>>> 上周有不少关于微软的新闻,而且隔三差五就弄个大新闻.先是宣布推出针对苹果 Mac 环境的 Visual Studio for ...
- 修复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 ...
- 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 ...
- SQL Server 2016中的本机JSON支持
With the introduction of SQL Server 2016, Microsoft introduced many new features which had taken SQL ...
最新文章
- [设计模式]原型模式
- wireshark的Random packet generator是什么
- MatLab 自编的 均值滤波、中值滤波、高斯滤波 图像处理函数
- Android 动画之ScaleAnimation应用详解
- vue之computed和watch
- Nginx反向代理及负载均衡
- 数字化让618有了洞悉消费者内心的“大脑”
- ubuntu 20.04 下安装使用clash for windows
- python设计模式11-享元模式
- 爬取 wallhaven图片到本地壁纸库
- 计算机用户权限设置 xp,Windows XP权限设置详解 2
- 银联网关支付 java版
- android toast 怎么用,Android学习 Android Toast的使用
- 2022物联网工业互联网
- 中国网页游戏行业调研与分析
- SIM7600CE-CNSE 4G模组发送英文短信
- 强力推荐—20款免费备份文件软件
- 【UVM基础】CallBack机制快速上手指南
- hdu 6863 Isomorphic Strings
- / ./ ../的区别