关系数据库Oracle、MySQL、PostgreSQL的SQL语法的差异(整理中)

 

1、SQL结尾的分号问题

  • MySQL数据库的SQL允许使用英文分号结尾

  • Oracle数据库的SQL不允许使用英文分号结尾

  • PostgreSQL数据库的SQL不允许使用英文分号结尾

2、SQL中的引号问题

  • MySQL数据库的SQL中使用单撇号`

  • Oracle数据库的SQL中使用双引号”

  • PostgreSQL数据库的SQL中使用双引号”

3、批量插入insert问题

  • MySQL数据库的SQL中insert 支持多个values批量插入数据
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
  `id` varchar(128) NOT NULL,
  `name` varchar(255) NOT NULL,
  `sex` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO `stu`(`id`,`name`,`sex`) VALUES 
('tangqi', '唐七', 'girl'),
('wangwu', '王五', 'boy'),
('zhangsan', '张三', 'boy');
  • Oracle数据库的SQL中insert 支持多个values批量插入数据
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE "stu";
CREATE TABLE "stu" (
  "id" varchar2(128) NOT NULL,
  "name" varchar2(255) NOT NULL,
  "sex" varchar2(255) DEFAULT NULL,
  PRIMARY KEY ("id")
) 

-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT ALL
 INTO "stu"("id","name","sex") VALUES ('tangqi', '唐七', 'girl')
 INTO "stu"("id","name","sex") VALUES ('wangwu', '王五', 'boy')
 INTO "stu"("id","name","sex") VALUES ('zhangsan', '张三', 'boy')
SELECT * FROM dual 

注意:oracle中drop表时不支持IF EXISTS关键词

  • PostgreSQL数据库的SQL中insert 支持多个values批量插入数据
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE "stu";
CREATE TABLE "stu" (
  "id" varchar(128) NOT NULL,
  "name" varchar(255) NOT NULL,
  "sex" varchar(255) DEFAULT NULL,
  PRIMARY KEY ("id")
) 

-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO "stu"("id","name","sex") VALUES 
('tangqi', '唐七', 'girl'),
('wangwu', '王五', 'boy'),
('zhangsan', '张三', 'boy')

总结:PostgreSQL与MySQL的批量insert语句很相似

4、分页查询问题

  • MySQL数据库的分页查询SQL

使用LIMIT 关键词分页:

SELECT * from `stu` LIMIT 0,1;

SELECT * from `stu` LIMIT 1;
  • Oracle数据库的分页查询SQL

(1) 在Oracle11g及其一下版本使用子查询的方式分页:

SELECT
	*
FROM
	(
		SELECT
			ROWNUM AS rowno,
			T.*
		FROM
			"stu"  T
		where ROWNUM <2
	) table_alias
WHERE
	table_alias.rowno >= 1

(2) 在Oracle12c及其以上版本支持使用FETCH NEXT / ROWS ONLY 关键词方式来分页。

  • PostgreSQL数据库的分页查询SQL

使用标准的LIMIT OFFSET关键词分页:

SELECT * from "stu" LIMIT 1 OFFSET 0

5、自增字段问题

  • MySQL数据库的自增字段

(1)在建表时,对于整型字段,可以使用AUTO_INCREMENT关键词配置为自增字段;

(2)MySQL数据库中的一个表最多有一个自增的字段

  • Oracle数据库的自增字段

与PostgreSQL类似.

  • PostgreSQL数据库的自增字段

(1)创建表时,如果使用serial类型,默认生成的自增序列名为:’表名’ + ’‘ + ’字段名’ + ’‘ + ’seq’;

(2)PostgreSQL数据库的一张表中支持存在多个自增字段,在使用last_insert_id()时需要制定序列名;

(3)可以单纯创建序列,在建表语句中自增的字段指定使用的序列名称。示例如下:

CREATE SEQUENCE gys.mytable_myid_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 99999999
    CACHE 1;

6、SQLServer数据库与MySQL的varchar区别

SQLServer与MySQL数据库虽然都有varchar类型,但是二者间的长度上存在着差别:

数据库varchar(n)备注
SQLServervarchar(n)最多能存n个字节,一个中文是两个字节。按字节计算
MySQL4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 ;
按字符计算

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值