Əsas səhifə > MySQL, Oracle, Oracle SQL > Create table using Subqueries Oracle vs. MySQL

Create table using Subqueries Oracle vs. MySQL

*Oracle 11g R2 , MySQL 5.5.34*

Hazır cədvəl üzərindən onunla eyni cədvəli yaratmaq məqsədilə istifadə olunan bu üsul 2 RDBMS arasında fərqliliklər görsənir.

-- MySQL

-- Numune cedvel

create table sub_test(
id int not null auto_increment,
firstname varchar(25) not null,
primary key(id),
unique(firstname)
);

-- Syntax 1

create table sub_test2 as select * from sub_test;

-- Syntax 2

create table sub_test3 select * from sub_test;

2 Syntax-ın 2-si də doğrudur.
Bir qayda olaraq subquery ilə subquery ilə yaradılan cədvəllərdə PK, FK , Unique constraints-lər yer almırlar.
Sübut:

-- MySQL

CREATE TABLE `sub_test2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `firstname` varchar(25) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `sub_test3` (
  `id` int(11) NOT NULL DEFAULT '0',
  `firstname` varchar(25) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

İndi isə eyni testi Oracle-da edək:

-- Oracle

create table sub_test(
id numeric not null,
firstname varchar2(25) not null,
constraint pk_id primary key(id),
constraint un_id unique(firstname)
);

>>>
table SUB_TEST created.

-- Syntax 1
create table sub_test2 as select * from sub_test;
>>>
table SUB_TEST2 created.

-- Syntax 2
create table sub_test3 select * from sub_test;
>>>
Error starting at line : 18 in command -
create table sub_test3 select * from sub_test
Error at Command Line : 18 Column : 24
Error report -
SQL Error: ORA-00922: missing or invalid option
00922. 00000 -  "missing or invalid option"
*Cause:    
*Action:

Çox gözəl. Oracle yalnız CTAS dəstəkləyir.
Və daha əvvəl də dediyimiz kimi subquery-li create zamanı yuxarıda dediyim constraint-lər yaranmır. Oracle üçün sübut:

-- Oracle

-- sub_test cedveli

select constraint_name from user_cons_columns where table_name = 'SUB_TEST';
>>>

SYS_C0011578 -- not null
SYS_C0011579 -- not null
PK_ID        -- Primary Key   
UN_ID        -- Unique Key

-- sub_test2 cedveli

select constraint_name from user_cons_columns where table_name = 'SUB_TEST2';
>>>
SYS_C0011582 -- not null
SYS_C0011583 -- not null

Lakin belə bir hal ola bilər ki, bizə lazım olsun ki cədvəli digər cədvələ əsasən yaradaq və bütün constraintlər də həmin ikinci cədvəldə olsun.

Oracle-da bu funksiya yoxdur. Düşünürəm ki, bu Constraint və İndex yanaşmasının fərqliliyindəndir. Ya da ki ekspertlər izah etsin ))

-- MySQL

create table sub_test4 like sub_test;

>>>

CREATE TABLE `sub_test4` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `firstname` (`firstname`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Düşünürəm ki, mövzunu izah etdik.

Təşəkkürlər ))

  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: