与MySQL的差别
SQL Server和MySQL都是广泛使用的关系数据库管理系统(RDBMS),它们的SQL语法有很多相似之处,但也存在一些差异。以下是一些主要的语法区别:
1. 数据库和表的创建
SQL Server
CREATE DATABASE database_name;
GO
USE database_name;
GO
CREATE TABLE table_name (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT,
create_time DATETIME DEFAULT GETDATE()
);
MySQL
CREATE DATABASE database_name;
USE database_name;
CREATE TABLE table_name (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. 自增主键
SQL Server
CREATE TABLE table_name (
ID INT IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(50),
Age INT
);
- 或者通过SSMS图形界面设置自增主键
- 或是通过
navicat
操作
MySQL
CREATE TABLE table_name (
ID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(50),
Age INT
);
3. 字符串连接
SQL Server
SELECT FirstName + ' ' + LastName AS FullName
FROM Employees;
MySQL
SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;
4. 限制查询结果
SQL Server
SELECT TOP 10 * FROM table_name;
MySQL
SELECT * FROM table_name LIMIT 10;
5. 当前时间
SQL Server
SELECT GETDATE();
MySQL
SELECT NOW();
6. IF条件判断
SQL Server
IF (condition)
BEGIN
-- SQL 语句
END
ELSE
BEGIN
-- SQL 语句
END
MySQL
IF condition THEN
-- SQL 语句
ELSE
-- SQL 语句
END IF;
7. 分页
SQL Server
SELECT *
FROM table_name
ORDER BY column_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
MySQL
SELECT *
FROM table_name
ORDER BY column_name
LIMIT 10 OFFSET 10;
8. 删除和修改表结构
SQL Server
ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE table_name
DROP COLUMN column_name;
MySQL
ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE table_name
DROP COLUMN column_name;
9. 存储过程和函数
SQL Server
CREATE PROCEDURE procedure_name
AS
BEGIN
-- SQL 语句
END;
EXEC procedure_name;
MySQL
CREATE PROCEDURE procedure_name()
BEGIN
-- SQL 语句
END;
CALL procedure_name();
10. 事务
SQL Server
BEGIN TRANSACTION;
-- SQL 语句
COMMIT;
-- 或者
ROLLBACK;
MySQL
START TRANSACTION;
-- SQL 语句
COMMIT;
-- 或者
ROLLBACK;
SQLserver的[]
在SQL Server中,方括号 []
用于引用标识符(如表名、列名),特别是在这些标识符包含空格或是SQL关键字的时候。它可以避免潜在的命名冲突和错误,但不一定要使用方括号。
如果你的 sql
语句标识符没有空格,也不是SQL关键字,你可以省略方括号。
- 如,带[]版
CREATE TABLE [oa_peixun_cost_detail] (
[peixun_id] VARCHAR(255) NOT NULL,
[user_name] VARCHAR(255) NOT NULL,
PRIMARY KEY ([peixun_id], [user_name])
);
CREATE TABLE [oa_peixun_cost] (
[peixun_id] VARCHAR(255) NOT NULL,
[create_user_name] VARCHAR(255) NOT NULL,
PRIMARY KEY ([peixun_id], [create_user_name])
);
CREATE TABLE [oa_peixun] (
[peixun_id] VARCHAR(255) NOT NULL,
[create_user_name] VARCHAR(255) DEFAULT NULL,
PRIMARY KEY ([peixun_id])
);
- 不带[]版
CREATE TABLE oa_peixun_cost_detail (
peixun_id VARCHAR(255) NOT NULL,
user_name VARCHAR(255) NOT NULL,
PRIMARY KEY (peixun_id, user_name)
);
CREATE TABLE oa_peixun_cost (
peixun_id VARCHAR(255) NOT NULL,
create_user_name VARCHAR(255) NOT NULL,
PRIMARY KEY (peixun_id, create_user_name)
);
CREATE TABLE oa_peixun (
peixun_id VARCHAR(255) NOT NULL,
create_user_name VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (peixun_id)
);
d VARCHAR(255) NOT NULL,
create_user_name VARCHAR(255) NOT NULL,
PRIMARY KEY (peixun_id, create_user_name)
);
CREATE TABLE oa_peixun (
peixun_id VARCHAR(255) NOT NULL,
create_user_name VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (peixun_id)
);