zoukankan      html  css  js  c++  java
  • Mysql和sqlServer命令比较

    http://cool.china.blog.163.com/blog/static/697310642010111202531210

      Mysql和sqlServer命令比较

    按语句功能划分,依次讲解

    目录
    一数据定义    2

    1 数据库操作基本命令    2

    2 CREATE TABLE --创建一个数据库表    2

    2.1    PRIMARY KEY 约束(主键)区别解析:    2

    2.1.1 创建primary key    2

    2.1.2 撤销 PRIMARY KEY 约束    3

    2.1.3 创建外健约束    3

    2.1.4 撤销外健约束    4

    2.2    UNIQUE 约束(唯一的,独一无二的)区别解析    4

    2.2.1 创建UNIQUE约束    4

    2.2.2 撤销 UNIQUE 约束    5

    2.3    CHECK 约束    5

    2.3.1 创建 CHECK约束    5

    2.3.2 撤销 CHECK约束    6

    2.4    DEFAULT 约束(系统默认值)    6

    2.4.1 创建DEFAULT约束    6

    2.4 .2 撤消DEFAULT约束    7

    2.5    索引区别    7

    2.6    主键自动增加的区别    7

    2.7    MySQL支持enum,和set类型,SQL Server不支持    8

    2.7.1    枚举enum    8

    2.7.2    集合set    9

    2.8    MySQL不支持nchar,nvarchar,ntext类型    10

    3    DROP TABLE –删除一个数据库表    10

    4    显示库表    11

    5    alter 修改库表    11

    二 数据操作    12

    2.1 limit和top    12

    2.2 ISNULL()函数    12

    2.3 select查询    12

    2.4 insert 插入    12

    2.6 update 修改    12

    2.7 delete 删除    13

    三 语法定义    13

    3.1 注释符区别    13

    3.2 识别符的区别    13

    3.3存储过程的区别(未经验证,从网上找的)    13

    3.4字符串连接    14

    四 函数和数据类型的区别    14

    4.1 Date 函数    14

    五性能比较    15
    一数据定义
    1 数据库操作基本命令

    Mysql:

    create database name; 创建数据库

    use databasename; 选择数据库

    drop database name 直接删除数据库,不提醒 –


    2 CREATE TABLE --创建一个数据库表
    PRIMARY KEY 约束(主键)区别解析:
    2.1.1 创建primary key

    Mysql:    

    CREATE TABLE Persons

    (

    Id_P  int  NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    PRIMARY KEY (Id_P)               //声明主健写在最后

    )

    SqlServer:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL PRIMARY KEY,     //声明主健 紧跟列后

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    但是如果表存在,之后给表加主健时:

    Mysql 和SqlServer

    ALTER TABLE Persons ADD PRIMARY KEY (Id_P)


    2.1.2撤销 PRIMARY KEY 约束

    MySQL:

    ALTER TABLE Persons DROP PRIMARY KEY

    SQL Server

    ALTER TABLE Persons DROP CONSTRAINT pk_PersonID


    2.1.3 创建外健约束

    MySQL:

    CREATE TABLE Orders

    (

    O_Id  int NOT NULL,

    OrderNo int NOT NULL,

    Id_P int,

    PRIMARY KEY (O_Id),

    FOREIGN  KEY (Id_P)  REFERENCES  Persons(Id_P)    //写在最后

    )

    SQL Server

    CREATE TABLE Orders

    (

    O_Id  int  NOT NULL  PRIMARY KEY,

    OrderNo  int NOT NULL,

    Id_P  int  FOREIGN KEY REFERENCES Persons(Id_P)    //顺序不同

    )

    如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

    MySQL / SQL Server

    ALTER  TABLE  Orders ADD  FOREIGN KEY  (Id_P) REFERENCES  Persons(Id_P)


    2.1.4 撤销外健约束

    MySQL:

    ALTER TABLE Orders DROP  FOREIGN KEY f k_PerOrders

    SQL Server

    ALTER TABLE Orders DROP CONSTRAINT  fk_PerOrders


    UNIQUE 约束(唯一的,独一无二的)区别解析

    UNIQUE 约束唯一标识数据库表中的每条记录。

    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

    PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

    请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。


    2.2.1 创建UNIQUE约束

    MySQL:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    UNIQUE (Id_P)                 //写在最后

    )

    SQL Server

    CREATE TABLE Persons

    (

    Id_P int NOT NULL UNIQUE,        //紧跟列后

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )


    2.2.2 撤销 UNIQUE 约束

    MySQL:

    ALTER TABLE Persons DROP INDEX  uc_PersonID

    SQL Server

    ALTER TABLE Persons DROP CONSTRAINT uc_PersonID


    CHECK 约束

    CHECK 约束用于限制列中的值的范围。

    如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

    如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。


    2.3.1 创建 CHECK约束

    下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。

    My SQL:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    CHECK (Id_P>0)                       //写在最后

    )

    SQL Server

    CREATE TABLE Persons

    (

    Id_P int NOT NULL CHECK (Id_P>0),    //紧跟列后

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') //多个条件

    )

    如果在表已存在的情况下为 "Id_P" 列创建 CHECK 约束,请使用下面的 SQL:

    MySQL / SQL Server:

    ALTER TABLE Persons ADD CHECK (Id_P>0)


    2.3.2 撤销 CHECK约束

    Sqlserver:

    ALTER  TABLE  Persons  DROP CONSTRAINT chk_Person

    Mysql我没有找到怎么删除。


    DEFAULT 约束(系统默认值)

    DEFAULT 约束用于向列中插入默认值。

    如果没有规定其他的值,那么会将默认值添加到所有的新纪录。


    2.4.1 创建DEFAULT约束

    下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:

    My SQL / SQL Server:

    CREATE TABLE Persons

    (

    Id_P int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255) DEFAULT 'Sandnes'     //紧跟列后,默认值字符串Sandnes

    )

    通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

    CREATE TABLE Orders

    (

    Id_O int NOT NULL,

    OrderNo int NOT NULL,

    Id_P int,

    OrderDate date DEFAULT GETDATE()   //紧跟列后,函数

    )

    如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:

    MySQL:

    ALTER  TABLE  Persons  ALTER  City  SET  DEFAULT  'SANDNES'

    SQL Server:

    ALTER  TABLE  Persons  ALTER  COLUMN  City  SET  DEFAULT  'SANDNES'


    2.4 .2 撤消DEFAULT约束

    MySQL:

    ALTER  TABLE  Persons  ALTER  City  DROP  DEFAULT

    SQL Server:

    ALTER  TABLE  Persons  ALTER  COLUMN  City  DROP  DEFAULT


    索引区别

    CREATE INDEX 语句

    CREATE INDEX 语句用于在表中创建索引。

    在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

    在表上创建一个简单的索引。允许使用重复的值:

    CREATE INDEX index_name ON table_name (column_name) //"column_name" 规定需要索引的列。

    在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

    CREATE UNIQUE INDEX index_name ON table_name (column_name)

    Mysql和SqlServer的创建索引都是一致的,但是在删除索引方面却有区别:

    SqlServer: DROP INDEX table_name.index_name

    Mysql: ALTER TABLE table_name DROP INDEX index_name


    主键自动增加的区别

    mySql的主键自动增加是用auto_increment字段,sqlServer的自动增加则是identity字段.

    Auto-increment 会在新纪录插入表中时生成一个唯一的数字。

    我们通常希望在每次插入新纪录时,自动地创建主键字段的值。

    我们可以在表中创建一个 auto-increment 字段。

    用于 MySQL 的语法

    下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

    CREATE TABLE Persons

    (

    P_Id int NOT NULL AUTO_INCREMENT,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    PRIMARY KEY (P_Id)

    )

    MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。

    默认地,AUTO_INCREMENT 的开始值是 1,每条新纪录递增 1。

    要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:

    ALTER TABLE Persons AUTO_INCREMENT=100

    用于 SQL Server 的语法

    下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

    CREATE TABLE Persons

    (

    P_Id int PRIMARY KEY IDENTITY,或则是写成P_id int primary key identity (1,1),

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。

    默认地,IDENTITY 的开始值是 1,每条新纪录递增 1。

    要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)


    MySQL支持enum,和set类型,SQL Server不支持
    枚举enum

    ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值.

    枚举最多可以有65,535个元素。

    枚举的简单用法举例:

    mysql> create table meijut (f1 enum('1','2','3','4','5','6'));

    mysql> desc meijut;

    +-------+-------------------------------+------+-----+---------+-------+

    | Field | Type                          | Null | Key | Default | Extra |

    +-------+-------------------------------+------+-----+---------+-------+

    | f1    | enum('1','2','3','4','5','6') | YES  |     | NULL    |       |

    +-------+-------------------------------+------+-----+---------+-------+

    mysql> insert into meijut values(8);

    mysql> select * from meijut

       -> ;

    +------+

    | f1   |

    +------+

    |      |

    +------+

    这个情况说明如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。

    mysql> insert into meijut values('3');

    mysql> insert into meijut values(3);

    mysql> insert into meijut values('4');

    mysql> insert into meijut values('5');

    mysql> select * from meijut;

    +------+

    | f1   |

    +------+

    |      |

    | 3    |

    | 3    |

    | 4    |

    | 5    |

    +------+  

    改表

    mysql> alter table meiju modify f1 enum("a","b","c","d","e","f");

    可以自动将记录当序号匹配成新的字段值

    mysql> select * from meijut;

    +------+

    | f1   |

    +------+

    |      |

    | c    |

    | c    |

    | d    |

    | e    |

    +------+  


    集合set

    mysql> create table jihe(f1 set('f','m'));

    mysql> insert into jihe values('f');

    可以按照序号输入 注意序号为 1 2 4 8 16 32 ....

    mysql> insert into jihe values('3');

    mysql> select * from jihe;

    +------+

    | f1   |

    +------+

    | f    |

    | f,m  |

    +------+

    其他字母不能插入

    mysql> insert into jihe values("q");

    ERROR 1265 (01000): Data truncated for column 'f1' at row 1

    插入空

    mysql> insert into jihe values("0");

    Query OK, 1 row affected (0.11 sec)

    超出序号之和不能插入

    mysql> insert into jihe values("4");

    ERROR 1265 (01000): Data truncated for column 'f1' at row 1

    集合 和 枚举的区别

    1 集合可以有64个值 枚举有65535个

    2 集合的序号是 1 2 4 8 16 枚举是 1 2 3 4 5 6

    3 集合一个字段值可以有好几个值

    +-------+

    | f1    |

    +-------+

    | f,m   |

    +-------+


    MySQL不支持nchar,nvarchar,ntext类型
    DROP TABLE –删除一个数据库表

    Mysql判断一个数据库表是否存在并删除的语句是:

    drop table if exists jihe;

    SqlServer判断一个数据库表是否存在并删除的语句是:

       if exists (select * from sysobjects where name='Sheet1$' and xtype='U')

      drop table Sheet1$

     其中jihe和Sheet1$指的均是数据库表名


    显示库表

    Mysql:

           Show tables;//显示一个库中的所有表

           Desc table;/显示一个表的表结构

       mysql> desc meijut;

    +-------+-------------------------------+------+-----+---------+-------+

    | Field | Type                          | Null | Key | Default | Extra |

    +-------+-------------------------------+------+-----+---------+-------+

    | f1    | enum('a','b','c','d','e','f') | YES  |     | NULL    |       |

    | f2    | int(11)                       | YES  |     | 0       |       |

    | f3    | text                          | YES  |     | NULL    |       |

    +-------+-------------------------------+------+-----+---------+-------+

           Show create table tablename;//显示一个表的详细创建信息

    mysql> show create table meijut;

    +--------+-------------------------------------------

    -----------------------------------------------------

    ---+

    | Table  | Create Table

      |

    +--------+-------------------------------------------

    -----------------------------------------------------

    ---+

    | meijut | CREATE TABLE `meijut` (

     `f1` enum('a','b','c','d','e','f') default NULL,

     `f2` int(11) default '0',

     `f3` text

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |


    alter 修改库表

    重命名表: -

    mysql > alter table t1 rename t2;

    添加一列

    mysql> alter table meijut add column f2 int default 0 ;

    修改一列

    mysql> alter table meijut modify f2 text;


    二 数据操作
    2.1 limit和top

    SQL SERVER : select   top   8   *   from   table1

    MYSQL: select   *   from   table1   limit   5或则是 limit 0,5;

    注意,在MySQL中的limit不能放在子查询内,limit不同与top,它可以规定范围 limit a,b——范围a-b


    2.2  ISNULL()函数

    SqlServer:

    select * from test where isnull(no,0)=0;

    MySQL

    MySQL 可以使用 ISNULL() 函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。

    在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:

    mysql> select * from test where ifnull(no,0)=0;

    +----+------+

    | id | no   |

    +----+------+

    |  3 | NULL |

    +----+------+

    1 row in set (0.03 sec)


    2.3 select查询

    SELECT * FROM tablename


    2.4 insert 插入

    INSERT INTO table(col1,col2) values(value1,value2);

    MySQL支持insert into table1 set t1 = ‘’, t2=‘’,但是MSSQL不支持这样写


    2.6update 修改

    Update  tablename set  col=”value”;


    2.7 delete 删除

    Delete from tablename;


    三 语法定义
    3.1 注释符区别

    SqlServer的注释符为--和/**/

    MySql的注释符为--和/**/和#


    3.2 识别符的区别

    MS SQL识别符是[],[type]表示他区别于关键字,但是MySQL却是 `,也就是按键1左边的那个符号


    3.3存储过程的区别(未经验证,从网上找的)

    mysql的存储过程中变量的定义去掉@;

    SQLServer存储过程的AS在MySql中需要用begin .....end替换

    Mysql的Execute对应SqlServer的exec;

        (注意:必须想下面这样调用)

        Set @cnt=’select * from 表名’;

        Prepare str from @cnt;

        Execute str;

    MySql存储过程调用其他存储过程用call

    Call 函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)

    select @a=count(*) from VW_Action 在mySql中修改为:select count(*) from VW_Action into @a;

    MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM子句带有子查询的视图,需要手工进行迁移。可通过消除FROM子句中的子查询,或将FROM子句中的子查询重构为一个新的视图来进行迁移。

    )MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替

        If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID)  return 0

    改写为:

    (在参数中定义一个out变量:out temp varchar(100);)

        BEGIN

            Loop1:loop

        SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt

        If @cnt>0 then

        begin

            set temp=0;

            leave loop1;

        end;

        end if

        end loop loop1;

    mysql的uuid()对应sql的GUID();

    MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面:

    MySql out,in,inout的区别——

    MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

    MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。

    MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。


    3.4字符串连接 

    SQLServer: Temp=’select * from ’+’tablename’+…+…

        MySql:Temp=concat(’select * from’, ’tablecname’,…,…)


    四 函数和数据类型的区别
    4.1 Date 函数

    MySQL Date 函数

    NOW() 返回当前的日期和时间

    CURDATE() 返回当前的日期

    CURTIME() 返回当前的时间

    DATE() 提取日期或日期/时间表达式的日期部分

    EXTRACT() 返回日期/时间按的单独部分

    DATE_ADD() 给日期添加指定的时间间隔

    DATE_SUB() 从日期减去指定的时间间隔

    DATEDIFF() 返回两个日期之间的天数

    DATE_FORMAT() 用不同的格式显示日期/时间

    SQL Server Date 函数

    GETDATE() 返回当前日期和时间

    DATEPART() 返回日期/时间的单独部分

    DATEADD() 在日期中添加或减去指定的时间间隔

    DATEDIFF() 返回两个日期之间的时间

    CONVERT() 用不同的格式显示日期/时间

    SQL Date 数据类型

    MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

    DATE - 格式 YYYY-MM-DD

    DATETIME - 格式: YYYY-MM-DD HH:MM:SS

    TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS

    YEAR - 格式 YYYY 或 YY

    SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

    DATE - 格式 YYYY-MM-DD

    DATETIME - 格式: YYYY-MM-DD HH:MM:SS

    SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS

    TIMESTAMP - 格式: 唯一的数字


    五性能比较

    (1)一个很表面的区别就是MySQL的安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物,安装进度来说简直就是.....

    (2)MySQL的管理工具有几个比较好的,MySQL_front,和官方那个套件,不过都没有SSMS的使用方便,这是MySQL很大的一个缺点。

    (3)MySQL的存储过程只是出现在最新的版本中,稳定性和性能可能不如MS SQL。

    (4)同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源。

  • 相关阅读:
    性能测试目的和性能测试主要术语
    回数
    python求100以内的素数
    杨辉三角
    裴波那契数列
    day12_框架二sendmail.py代码
    codeforces 1435 E
    codeforces C
    codeforces 1436E
    codeforces 1435 D. Shurikens (贪心)
  • 原文地址:https://www.cnblogs.com/lvxiuquan/p/3274882.html
Copyright © 2011-2022 走看看