SQL分类
一、DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
DDL对于不同的数据库实现相同操作的SQL语句有所不同
下面对三种常见数据库给出相应示例:
MySQL数据库
-- 查看数据库
SHOW DATABASES;
-- 使用test库
USE `test`;
-- 新建表 (使用InnoDB存储引擎)
CREATE TABLE `t_user` (
`id` varchar(32) NOT NULL COMMENT '主键id',
`name` varchar(100) DEFAULT NULL COMMENT '用户名',
`password` varchar(100) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 给t_user表添加注释
ALTER TABLE `test`.`t_user` COMMENT='用户表';
-- 在password列后面新增一列 (nick_name 昵称 列)
ALTER TABLE `test`.`t_user` ADD COLUMN `nick_name` VARCHAR(100) NULL COMMENT '昵称' AFTER `password`;
-- 修改昵称列字段类型 (字段类型由varchar改为char)
ALTER TABLE `test`.`t_user` CHANGE `nick_name` `nick_name` CHAR(100) CHARSET utf8 COLLATE utf8_general_ci NULL COMMENT '昵称';
-- 删除昵称列
ALTER TABLE `test`.`t_user` DROP COLUMN `nick_name`;
-- 新建索引 (给单个name字段建立索引)
ALTER TABLE `test`.`t_user` ADD INDEX `i_user_name` (`name`);
-- 新建联合索引 (给name字段和password字段建立联合索引)
ALTER TABLE `test`.`t_user` ADD INDEX `i_user_name` (`name`, `password`);
-- 更改列的排列顺序 (将name排列到password后面)
ALTER TABLE `test`.`t_user` CHANGE `name` `name` VARCHAR(100) CHARSET utf8 COLLATE utf8_general_ci NULL COMMENT '用户名' AFTER `password`;
Postgresql数据库
- 注意点
PostgreSQL对表名、字段名都是区分大小写的。在图形化界面可以正常新建。用SQL语句的时候需要加双引号,如果jdbc查询等处,记得使用转义符号。
PostgreSQL在SQL语句中对大小写是不敏感的
select ID from t_user 和 select id from t_user
都会从t_user这个表中查询id这个字段。如果要查询大写字母的字段,同样要加上双引号:select “ID” from t_user
-- 创建表t_test_user
CREATE TABLE "public"."t_test_user" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"name" varchar(255) COLLATE "pg_catalog"."default",
"password" varchar(255) COLLATE "pg_catalog"."default",
CONSTRAINT "t_test_user_pkey" PRIMARY KEY ("id")
)
;
-- 分别给每个字段添加注释
COMMENT ON COLUMN "public"."t_test_user"."id" IS '主键id';
COMMENT ON COLUMN "public"."t_test_user"."name" IS '用户名';
COMMENT ON COLUMN "public"."t_test_user"."password" IS '密码';
-- 新增昵称列
ALTER TABLE "public"."t_test_user" ADD COLUMN "nick_name" varchar(255);
COMMENT ON COLUMN "public"."t_test_user"."nick_name" IS '昵称';
-- 删除昵称列
alter table "public"."t_test_user" drop column nick_name;
-- 新建索引 (name列)
CREATE INDEX "i_name" ON "public"."t_test_user" USING btree ("name");
-- 新建联合索引(name和password列)
CREATE INDEX "i_name" ON "public"."t_test_user" USING btree (
"name",
"password"
);
Oracle数据库
- 注意点
因为 ORACLE 在建表/字段时,如果没有双引号, ORACLE 会把表名、字段名全部转化为大写字母,然后写入数据字典。访问数据字典时,没有双引号 ORACLE 会将其转化成大写然后再去数据字段中查找。不仅仅关键字不区分大小写,函数名,过程名,表名称,pl/sql块中变量名,用户名,密码等都不区分大小写。
可能很多人都会误认为 ORACLE 是不区分大小写的,原因是我们在写查询语句的时候,大小写无所谓,结果都是一样的,这只是个表面现象。因为只要你不使用双引号表示区分大小写, ORACLE 会默认把你写的脚本全部转换为大写的。
-- 建表
create table "t_user"(
"id" varchar(32) primary key,
"name" varchar(200) not null,
"password" varchar(200) not null
);
-- 添加注释
comment on column "t_user"."id" is '主键id';
comment on column "t_user"."name" is '用户名';
comment on column "t_user"."password" is '密码';
-- 添加昵称列
ALTER TABLE "t_user" ADD "nick_name" varchar(40)
--修改字段类型
ALTER TABLE "t_user" MODIFY "name" NUMBER(20)
--删除表列
ALTER TABLE "t_user" DROP "name" CASCADECONSTRAINTS
二、DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
三、DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键和字:select, where 等
DML和DQL对于不同数据库来说 语法基本一致
四、DCL(Data Control Language)数据控制语言
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
DCL对于不同的数据库实现相同操作的语句也有所不同 DCL对于开发者来说了解即可