1. TOP 子句
- SQLServer中用TOP语句规定要返回的记录数目
select top number|percent column_names from table
//示例
select top * from [table1]
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时语法相同
- 新建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)
)
- 撤销UNIQUE约束
//MySQL
ALTER TABLE Persons
DROP INDEX uc_PersonID
//SQLServer
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
5. PRIMARY KEY 约束
- MySQL和SQLServer在创建和撤销PRIMARY KEY约束时采用的语句不同
- 创建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)
)
- 撤销PRIMARY KEY约束
//MySQL
ALTER TABLE Persons
DROP PRIMARY KEY
//SQLServer
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
6. FOREIGN KEY 约束
- MySQL和SQLServer在创建和撤销FOREIGN KEY约束时采用的语句不同
- 创建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)
)
- 撤销FOREIGN
//MySQL
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
//SQLServer
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
7. CHECK 约束
-
- MySQL和SQLServer在创建和撤销CHECK约束时采用的语句不同
- 创建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')
)
- 撤销CHECK约束
//MySQL
ALTER TABLE Persons
DROP CHECK chk_Person
//SQLServer
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
8. DEFAULT 约束
- SQLServer和MySQL在ALTER TABLE和撤销DEFAULT约束时语句不同
- ALTERTABLE时的DEFAULT约束
//MySQL
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
//SQLServer
ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City
- 撤销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 函数
函数 | 描述 |
---|
NOW() | 返回当前的日期和时间 |
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
DATE() | 提取日期或日期/时间表达式的日期部分 |
EXTRACT() | 返回日期/时间的单独部分 |
DATE_ADD() | 向日期添加指定的时间间隔 |
DATE_SUB() | 从日期减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的天数 |
DATE_FORMATE() | 用不同的格式显示时间/日期 |
函数 | 描述 |
---|
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在个别函数的使用上也存在一定的差异,将在下一篇博文中进行汇总