区别

type
status
date
slug
summary
tags
category
icon
password

区别

mysql&sqlserver

  1. mysql必须用结尾,sqlserver可以选择不加批处理语句时需要加go
    1. use Student; -- 同时运行俩条语句时不用;分隔语句会报错select * from SC; use Student-- 假设SC数据表在Student库下,此时如果不写go会报错goselect * from SC
  1. 在mysql中常用的有InnoDB | MyISAM | MEMORY | MERGE等存储引擎,其中使用最多的是InnoDB
    1. 而在SQLServer中数据库的存储分为逻辑实现与物理实现
      notion image
      notion image
      以下是InnoDB存储引擎的一些关键特点和功能:
    2. 事务支持:InnoDB存储引擎支持事务,这意味着它可以确保数据库操作的一致性和可靠性。事务是一组数据库操作,要么全部成功,要么全部失败,这有助于维护数据的完整性。
    3. 行级锁定:InnoDB使用行级锁定(Row-Level Locking)来管理并发访问数据。这意味着多个事务可以同时访问同一表的不同行,而不会导致整个表的锁定,提高了数据库的并发性能。
    4. 外键支持:InnoDB支持外键约束,这允许在表之间建立关系,确保数据的引用完整性。外键是表之间的连接,可以保证数据的一致性。
    5. ACID特性:InnoDB存储引擎遵循ACID(原子性、一致性、隔离性和持久性)特性,这是数据库管理系统必须提供的核心特性。它确保了数据的可靠性和一致性。
    6. 热备份:InnoDB支持在线热备份,这意味着可以在数据库运行时备份数据而无需停止数据库服务。
    7. 崩溃恢复:InnoDB具有崩溃恢复机制,可以在数据库崩溃后自动恢复数据到一致的状态,减少了数据丢失的风险。
    8. 自动增长:InnoDB支持自动增长的表列,使得插入新数据时不需要手动指定列的值。
    9. 多版本并发控制:InnoDB使用多版本并发控制(MVCC)来处理并发事务,每个事务看到的数据是独立的版本,不会相互干扰。
 
  1. MySQL可以使用单引号与双引号,而SQLServer只支持单引号
    1. 都不严格区分大小写
 
  1. 定位某张表
    1. mysql:库名.表名,示例:Student.SC
      SQLServer:库名.dbo.表名 或者 库名…表名
       
  1. 在负载压力相同时,MySQL消耗的内存和CPU更少
  1. 在SQLServer中还提供了打印语句print,mysql中没有,示例:
    1. -- print自带换行 print 'hello'
  1. 系统数据库区别
      • SQLServer中的系统数据库:
        • master:记录系统的所有系统级信息
          model:模板数据库
          msdb:存储计划信息,备份与恢复相关信息,SQLServer代理程序调度报警与作业调度等信息
          tempdb:临时数据库,他为所有的临时表,临时存储过程以及其他所有临时操作提供存储空间
          resource:隐藏的只读数据库,包含所有系统对象,但不含用户数据或用户原数据
      • mysql中的系统数据库:
        • information_schema:提供了访问数据库元数据的方式。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”) ,即保存着关于MySQL服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等
          在INFORMATION_SCHEMA中,有几张只读表。它们实际上是视图,而不是基本表
          mysql:核心数据库(类似于SQLServer的master表),存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,例如修改root用户密码就需要使用这个数据库
          performance_schema;
          sys;
  1. 数据类型
      • MySQL中没有nchar,nvarchar,ntext等类型
      • SQLServer使用datetime类型作为获取默认值为当前时间的数据类型
        • 而MySQL使用timestamp时间错类型实现这个效果
      • MySQL支持无符号的整数类型,而SQLServer不支持
  1. 约束/索引
      • 递增语句MySQL是AUTO_INCREMENT,SQLServer是identify(10.1),从10开始一次加1
      • mysql不支持检查索引(check),SQLServer支持
  1. 获取当前时间
    1. MySQL可以使用current_date()函数获取当前日期,或者使用CURRENT_TIME()函数只获取当前时间,或者使用CURRENT_TIMESTAMP()函数与now()函数获取当前的完整时间,示例:
      SELECT CURRENT_DATE(); -- 2021-12-27 SELECT CURRENT_TIME(); -- 01:42:23 SELECT CURRENT_TIMESTAMP(); -- 2021-12-27 01:42:23 SELECT NOW(); -- 2021-12-27 01:42:23
      而SQLServer可以使用getdate()方法获取当前时间日期,示例:
      SELECT getdate(); -- 返回值:2021-12-27 01:40:40.907
  1. 字符串连接函数
mysql -- 使用concat()函数,示例:SELECT CONCAT('我','在','学习mysql');-- 不能使用+连接字符串! sqlserver -- 1. 使用加号+连接字符串 select 'hello'+'SQL' -- 2. 使用concat()函数,示例: SELECT CONCAT('我','在','学习mysql');
  1. 视图
    1. mysql视图中的from子句不允许存在子查询,而SQLServer支持
  1. 循环结构
    1. 基本一致
      但是在MySQL中在while循环后面需要加上do关键字
      同时在end后面需要写上循环类型与循环表示,例如:WHILE [标签];
      SQLServer不用
  1. case结构(一致)
    1. 都需要使用then
      不需要写Begin,只需要写END,分为俩种形式:
      • case后可以带一个值,在when中通过判断这个值的取值来达到选择效果(switch-case形式)
      • 也可以不带值,在when语句中写条件判断式(多重IF形式)
      -- 1: case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1 when 常量2 then 要显示的值2或语句2 ... else 要显示的值n或语句n end -- 2: case when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 ... else 要显示的值n或语句n end
  1. IF结构
    1. mysql需要在if 条件后以及else后添加then再写语句
      并且mysql中的IF结构只能写在begin end块中
      -- 语法IF 条件1 THEN 语句1;ELSEIF 条件2 THEN 语句2;...ELSE 语句n;END IF; -- 表示IF结构结束了-- 注释:只能用于BEGIN END块中-- 语句中只有一条时可以省略begin end
      而在SQLServer中不需要写then
      IF (条件1)BEGIN 语句1ENDelseBEGIN 语句2ENDgo-- 示例:IF (EXISTS (select Sno from Student where Sno = '200001')) select Sno from Student where Sno = '200001'ELSE print '没有改学生'go
  1. 判空函数
    1. mysql: -- 1. ifnull(exp1,exp2); -- 表示当exp1为空时值为exp2,不为空时值为exp1 -- 2. isnull(exp1); -- 当exp1为空时返回1,不为空时返回0 -- 3. 同时在MySQL中还提供了if函数(与if结构语句不同),示例: if (exp1,exp2,exp3) -- 表示当条件表达式exp1成立时返回exp2.否则返回exp3 -- 类似于java中的三目表达式,SQLServer中没有这个函数
      sqlserver: -- 1. isnull(exp1,exp2); -- 表示当exp1为空时值为exp2,不为空时值为exp1 -- 没有ifnull()函数 -- 相对来说mysql的ifnull和isnull函数容易理解一点
 
五大数据库有关