MySQL8.0与SQL server 2017都是关系型数据库,两者在原理与技术方面有极高的相似度。本文主要简述笔者在学习过程中发现的两者有区别的部分,如果读者知道还有其他区别的点,欢迎进行评论补充,大家一起交流学习,共同成长!
1.MySQL 为数据库更新操作的安全性,有一个 SQL_SAFE_UPDATES 变量,取值 0 或 1。当 SQL_SAFE_UPDATES=1 时, UPDATE 和 DELETE 操作语句必须带WHERE 和 LIMIT 条件,否则是无法执行的。而SQL server 2017没有SQL_SAFE_UPDATES 变量,也没有什么限制。另外,MySQL的删除语句是DELETE FROM 表名 WHERE ...;;而SQL server 2017的删除语句是DELETE 表名 WHERE ...。
2.MySQL数据库增添了REPLACE语句,该语句将数据表中原来记录中的数据进行替换,当原来的记录不存在时,则会插入一条新的记录。REPLACE语句是根据主键来确定哪一条记录被替换,它先删除原有的记录,再插入一条新的记录,实现记录替换的功能。REPLACE语句在语法上与INSERT语句极其相似,可以一次插入一行,也可以一次插入多行,还可以通过replace…select语句批量插入数据。
3.MySQL临时表使用 CREATE temporary TABLE 语句进行创建,其他表结构的定义方式与正式表相同。然而,SQL server提供的本地临时表的名称以单个数字符号 (#) 开头,它们仅对当前的用户连接是可见的,当用户从 SQL Server 断开连接时即被删除。临时表的创建和删除方法与正式表一样。
/* 新建一个MySQL临时表。ENGINE=MEMORY 选项表示临时表被存储在内存中,且默认使用哈希索引,
其数据处理速度快,但不能定义计算列。*/
DROP TEMPORARY TABLE IF EXISTS myRemarks;
CREATE TEMPORARY TABLE myRemarks(
RowID int auto_increment primary key,
Name varchar(10),
Dynasty varchar(20)
) ENGINE = MEMORY;
4.MySQL 提供主要两种类型的索引:聚簇索引和二级索引。SQL Server 提供多种类型的索引,例如聚集索引、非聚集索引和唯一索引等。在索引方面,具体语法上的区别有以下几点:
/* MySQL创建一个索引 */
CREATE INDEX 约束名 on 表名(列名);
/*MySQL删除约束*/
DROP INDEX 约束名 ON 表名;
/*特别地,MySQL支持在建表语句中使用index语句创建约束*/
CREATE TABLE myEmployees (
EmployeeID char(7),
EmployeeName varchar(20) ,
IDNumber char(28) COMMENT '身份证号码',
UNIQUE myEmployees_idnumber(IDNumber),
INDEX myEmployees_name(EmployeeName),
PRIMARY KEY myEmployees_PK (EmployeeID)
);
/*MySQL可以通过SHOW INDEXES语句,查看表中的索引(名称、类型以及定义它的键)。而SQL Serve没有这条语句。*/
SHOW INDEXES FROM 表名;
/*删除约束的DROP INDEX语句,SQL server和MySQL不同,SQL server是如下写法*/
IF EXISTS (SELECT name FROM sysindexes WHERE name = '列名')
DROP INDEX 表名.列名
GO
5.在 MySQL 中,BEGIN...END语句以及流程控制语句(条件处理语句和循环处理语句)、局部变量,只能在存储过程、用户定义函数、游标和触发器内部使用。而在SQL Server中,并没有使用地方的限制。