达梦数据库字符大小写敏感与字符大小写不敏感情况下的对比

一、检查数据库实例大小写敏感信息

1 获得大小写敏感信息

SELECT SF_GET_CASE_SENSITIVE_FLAG();
--1为大小写敏感,0为大小写不敏感

二、初始化数据库实例为大小写敏感库

sp_create_system_packages(1);
SELECT SF_GET_CASE_SENSITIVE_FLAG();
--1

2.1、DDL操作

create table test3(ID int,name char(20));
select dbms_metadata.get_ddl('TABLE','test3','SYSDBA') from dual;
    --未找到对象或不允许查询系统定义的内部索引
select dbms_metadata.get_ddl('TABLE','TEST3','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."TEST3"
(
"ID" INT,
"NAME" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/

create table test6(id int,"name" char(20));
select dbms_metadata.get_ddl('TABLE','TEST6','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."TEST6"
(
"ID" INT,
"name" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/

create table "test1"(id int);
create table test1("id" int);
create table test2("id" int,id int);
select dbms_metadata.get_ddl('TABLE','test1','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test1"
(
"ID" INT) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
select dbms_metadata.get_ddl('TABLE','TEST1','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."TEST1"
(
"id" INT) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
select dbms_metadata.get_ddl('TABLE','TEST2','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."TEST2"
(
"id" INT,
"ID" INT) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/

总结:
大小写敏感的数据库中:
创建表时:
①如果不对表名或列名添加"",那么表名和列名都自动转换为大写形式;
②如果对表名或列名添加"",会固定书写时的大、小写形式,书写时采取的是小写形式,那么就定型为小写形式,其他不添加""的则自动转换为大写形式,无论书写时采取的是大写形式或小写形式。
③同名的数据库对象,如果大小写不同,那么则为两个不同的对象,字段同样如此;
④一个表中,即使是相同的字段名,只要大小写不同,允许存在同名且不同大小写形式的字段。

2.2、OTHERS操作

–创建

drop table test1;
create table test1(id int,name char(20));
--导出元数据
select dbms_metadata.get_ddl('TABLE','TEST1','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."TEST1"
(
"ID" INT,
"NAME" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
 --进行DML操作
insert into sysdba.test1 values(1,'an');
update sysdba.test1 set id=100 where id=1;
delete from sysdba.test1 where id=100;
commit;
 --4条语句执行成功
 insert into sysdba.test1("id","name") values(1,'an');
 --无效的列名[id]
update sysdba.test1 set id=100 where "id"=1;
 --无效的列名[id]
delete from sysdba.test1 where "id"=100;
  --无效的列名[id]

SUMMARY:

大小写敏感的数据库中:
DML或DSL操作时:
①如果不对表名或列名添加"",那么表名和列名都自动转换为大写形式;
②对表进行DML操作时,如果没有小写形式的字段,不能采取小写加"“的形式指定过滤字段,会被认定为无效的字段;
③如果对表名或列名添加”",会固定书写时的大、小写形式,"“中是大写形式,则过滤字段就是大写字段,”“中是小写字段,则过滤字段就是小写字段;
④对其进行DML操作时,需要利用”“指定表名和字段名,否则默认会认定以大写形式去查询对象。
⑤查询时,’'和”"界定符中字符串区分大小写,界定符中的字符串若是大写形式,那仅查询这个大写形式的对象,若是或小写形式,那仅查询这个小写形式的对象,DML操作依旧。

三、数据库为大小写不敏感库

sp_create_system_packages(1);
SELECT SF_GET_CASE_SENSITIVE_FLAG();
    --0

3.1、DDL操作

create table test3(ID int,name char(20));
select dbms_metadata.get_ddl('TABLE','test3','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test3"
(
"ID" INT,
"name" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
select dbms_metadata.get_ddl('TABLE','TEST3','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test3"
(
"ID" INT,
"name" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
create table test6(id int,"name" char(20));
select dbms_metadata.get_ddl('TABLE','TEST6','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test6"
(
"id" INT,
"name" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
create table "test1"(id int);
    --执行成功
create table test1("id" int);
    --执行失败  对象[test1]已存在
create table TEST1("id" int);
    --对象[test1]已存在
create table test2("id" int,id int);
  --执行失败            列[id]已存在
select dbms_metadata.get_ddl('TABLE','test1','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test1"
(
"id" INT) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
select dbms_metadata.get_ddl('TABLE','TEST1','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test1"
(
"id" INT) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/

SUMMARY:

大小写不敏感的数据库中:
创建表时:
①无论对不对表名或列名添加"",表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式;
②不允许存在同名的数据库对象,即使大小写不同,默认也只能存在一个;
③一个表中,也不允许相同的字段名,即使大小写不同;
④查询时,’'和""界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集。

3.2、OTHERS操作

  --创建
drop table test1;
create table test1(id int,name char(20));
    --导出元数据
select dbms_metadata.get_ddl('TABLE','TEST1','SYSDBA') from dual;
/*
CREATE TABLE "SYSDBA"."test1"
(
"id" INT,
"name" CHAR(20)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
   --进行DML操作
insert into sysdba.test1 values(1,'an');
update sysdba.test1 set id=100 where id=1;
delete from sysdba.test1 where id=100;
commit;
    --4条语句执行成功
insert into sysdba.test1("id","name") values(1,'an');
    --执行成功
update sysdba.test1 set id=100 where ID=1;
    --执行成功
select * from TEST1 where  NAME='AN';
/*
id  name
100 an                   
*/
delete from sysdba.test1 where NAME='AN';
    --执行成功
select * from TEST1;
    --null

SUMMARY:

大小写不敏感的数据库中:
DML或DDL操作时:
①无论对不对表名或列名添加"",表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式;
②不允许存在同名的数据库对象,即使大小写不同,默认也只能存在一个;
③一个表中,也不允许相同的字段名,即使大小写不同;
④查询时,’'和""界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集,进行DML操作时依旧。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值