SQLServer与MySQL不同汇总(1)

1. TOP 子句

  • SQLServer中用TOP语句规定要返回的记录数目
select top number|percent column_names from table

//示例
select top * from [table1]
  • MySQL中用LIMIT语句来实现该功能
select column_names from table_name limit number

//示例
select * from [table1] limit 1

2. FULL OUTER JOIN 关键字

  • MySQL中不支持FULL OUTER JOIN关键字
  • SQLServer中可使用FULL OUTER JOIN 关键字
select column_names from table1
full outer join table2
on table1.column_name = table2.column)name

//示例
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
FULL OUTER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;

3. SELECT INTO 语句

  • SQLServer通过SELECT INTO语句实现信息从一个表到另一个新表的复制
select column_names into newtable [IN externaldb] from table1

//示例
select * into WebsitesBackup2016 from Websites

  • MySQL不支持SELECT INTO 语句,但支持INSERT INTO ... SELECT 语句,来实现数据从一个表到另一个已存在的表的复制
insert into table2 (colunm_names) 
select colunm_names from table1

//示例
INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps
WHERE id=1;

4. UNIQUE 约束

  • MySQL和SQLServer在创建和撤销UNIQUE约束时采用的语句均有不同,但在ALTER TABLE时语法相同
  1. 新建UNIQUE约束
// MySQL
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)

//SQLserver
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

//注意:若需命名UNIQUE约束,则两者使用语句相同
//MySQL & SQLServer
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
  1. 撤销UNIQUE约束
//MySQL
ALTER TABLE Persons
DROP INDEX uc_PersonID

//SQLServer
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

5. PRIMARY KEY 约束

  • MySQL和SQLServer在创建和撤销PRIMARY KEY约束时采用的语句不同
  1. 创建PRIMARY KEY约束
//MySQL
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)

//SQLServer
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

//注意:如需命名PRIMARY KEY则SQLServer和MySQL语法相同
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
  1. 撤销PRIMARY KEY约束
//MySQL
ALTER TABLE Persons
DROP PRIMARY KEY

//SQLServer
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID

6. FOREIGN KEY 约束

  • MySQL和SQLServer在创建和撤销FOREIGN KEY约束时采用的语句不同
  1. 创建FOREIGN KEY
//MySQL
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

//SQLServer
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

//注意:如需命名FOREIGN KEY则两者采用的语句相同
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
  1. 撤销FOREIGN
//MySQL
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

//SQLServer
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

7. CHECK 约束

    • MySQL和SQLServer在创建和撤销CHECK约束时采用的语句不同
  1. 创建CKECK约束
//MySQL
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)

//SQLServer
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

//注意:如需命名CKECK并定义多个列的CHECK约束,则两者语句相同
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)
  1. 撤销CHECK约束
//MySQL
ALTER TABLE Persons
DROP CHECK chk_Person

//SQLServer
ALTER TABLE Persons
DROP CONSTRAINT chk_Person

8. DEFAULT 约束

  • SQLServer和MySQL在ALTER TABLE和撤销DEFAULT约束时语句不同
  1. ALTERTABLE时的DEFAULT约束
//MySQL
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

//SQLServer
ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City
  1. 撤销DEFAULT约束
//MySQL
ALTER TABLE Persons
ALTER City DROP DEFAULT

//SQLServer
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

9. 撤销INDEX

  • SQLServer和MySQL在撤销索引操作时使用的语句不同
//SQLServer
DROP INDEX table_name.index_name

//MySQL
ALTER TABLE table_name DROP INDEX index_name

10. ALTER TABLE 语句

  • ALTER TABLE并改变表中列的数据类型时SQLServer与MySQL语句存在不同
//SQLServer
ALTER TABLE table_name
ALTER COLUMN column_name datatype

//MySQL
ALTER TABLE table_name
MODIFY COLUMN column_name datatype

11. IDENTITY 关键字

  • SQLServer使用IDENTITY关键字来实现auto-increment任务
//将表中的列定义为auto-increment字段
//在上面的实例中,IDENTITY 的开始值是 1,每条新记录递增 1
//提示:要规定 "ID" 列以 10 起始且递增 5,请把 identity 改为 IDENTITY(10,5)
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
  • MySQL采用AUTO INCERMENT 字段来实现auto-incerment
//将表中的列定义为auto-increment字段
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)

//让 AUTO_INCREMENT 序列以其他的值起始
ALTER TABLE Persons AUTO_INCREMENT=100

12. DATE 函数

  • MySQL DATE 函数
函数描述
NOW()返回当前的日期和时间
CURDATE()返回当前日期
CURTIME()返回当前时间
DATE()提取日期或日期/时间表达式的日期部分
EXTRACT()返回日期/时间的单独部分
DATE_ADD()向日期添加指定的时间间隔
DATE_SUB()从日期减去指定的时间间隔
DATEDIFF()返回两个日期之间的天数
DATE_FORMATE()用不同的格式显示时间/日期
  • SQLServer DATE 函数
函数描述
DFETDATE()返回当前的日期和时间
DATEPART返回日期/时间的单独部分
DATEADD()在日期中添加或减去指定的时间间隔
DATEDIFF()返回两个日期之间的时间
CONVERT()用不同的格式显示日期/时间

13. ISNULL 函数

  • SQLServer的ISNULL函数用于规定如何处理NULL值
//示例
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
  • MySQL中我们采用IFNULL函数或COALESCE函数来实现同样的效果
//示例
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

14. 数据类型

  • MySQL和SQLServer的数据类型存在一定的不同,此处不详细列出,可查阅相关网站或手册进行了解

PS:MySQL和SQLServer在个别函数的使用上也存在一定的差异,将在下一篇博文中进行汇总

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值