MyISAM धारावाहिक बनाने का बहुत सुविधाजनक तरीका देता है। उदा. तालिका में प्राथमिक कुंजी id+seq(-uence) है
id seq
1 1 insert into table(seq) values(1),(2),(3),(1),(2),(1),(1),(2);
1 2
1 3
2 1
2 2
3 1
4 1
4 2
तो तर्क यह है कि जब आईडी वही रहती है जब तक कि डुप्लिकेट कुंजी दिखाई न दे, इस मामले में (MyISAM) आईडी में वृद्धि करेगा।
लेकिन जब मैं इसे InnoDB में उपयोग करने का प्रयास करता हूं - काम नहीं करता है। क्या कोई समाधान है (क्योंकि मुझे लेनदेन की आवश्यकता है)?
धन्यवाद।
23 अक्टूबर 2003 8:41 बजे [नाम रोक दिया गया] द्वारा पोस्ट किए गए MySQL के मैनुअल की टिप्पणियों से बेहतर उदाहरण हो सकता है
create table location
(
id bigint not null auto_increment, -- "serial" per 4.1
longitude int,
latitude int,
place int,
primary key(id, longitude, latitude, place)
);
insert into location (longitude, latitude, place)
values (0,0,0), (1,1,1), (2,2,2);
select * from foo;
+----+-----------+----------+-------+
| id | longitude | latitude | place |
+----+-----------+----------+-------+
| 1 | 0 | 0 | 0 |
| 2 | 1 | 1 | 1 |
| 3 | 2 | 2 | 2 |
+----+-----------+----------+-------+
drop table location;
create table location
(
id bigint not null auto_increment, -- "serial" per 4.1
longitude int,
latitude int,
place int,
primary key(longitude, latitude, place, id)
);
insert into location (longitude, latitude, place)
values (0,0,0), (1,1,1), (2,2,2), (0,0,0);
select * from location order by id;
+----+-----------+----------+-------+
| id | longitude | latitude | place |
+----+-----------+----------+-------+
| 1 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 1 | 2 | 2 | 2 |
| 2 | 0 | 0 | 0 |
+----+-----------+----------+-------+
2 जवाब
लेकिन जब मैं इसे InnoDB में उपयोग करने का प्रयास करता हूं - काम नहीं करता है। क्या कोई समाधान है (क्योंकि मुझे लेनदेन की आवश्यकता है)?
आप इसके समाधान के लिए सलाहकार लॉक्सका उपयोग कर सकते हैं। ए> और ट्रिगर।
यह देखें PostgreSQL के लिए समान प्रश्न . आप इसका MySQL संस्करण लिखना चाहेंगे।
यह काम करेगा:
create table location
(
id bigint not null auto_increment,
longitude int,
latitude int,
place int,
primary key(longitude, latitude, place, id)
) ENGINE =myisam;
लेकिन यह नहीं होगा:
create table location
(
id bigint not null auto_increment,
longitude int,
latitude int,
place int,
primary key(longitude, latitude, place, id)
) ENGINE =innodb;
चूंकि:
माईसाम के नुकसान
कोई डेटा अखंडता (जैसे संबंध की कमी) जांच नहीं करता है, जो तब डेटाबेस प्रशासकों और एप्लिकेशन डेवलपर्स की जिम्मेदारी और ओवरहेड आता है।
तथा
InnoDB के नुकसान
क्योंकि InnoDB को तालिकाओं के बीच विभिन्न संबंधों का ध्यान रखना होता है, डेटाबेस व्यवस्थापक और योजना निर्माताओं को डेटा मॉडल को डिजाइन करने में अधिक समय लेना पड़ता है जो MyISAM की तुलना में अधिक जटिल होते हैं।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
mysql
MySQL एक फ्री, ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग करता है। इस टैग को अन्य DBs जैसे SQL Server, SQLite आदि के लिए उपयोग न करें। वे विभिन्न DB हैं जो सभी डेटा का प्रबंधन करने के लिए SQL की अपनी बोलियों का उपयोग करते हैं।