মাইএসকিউএল বিদ্যমান সারি জন্য সন্নিবেশ বিবৃতি পান


139

মাইএসকিউএল ব্যবহার করে আমি কোয়েরিটি চালাতে পারি:

SHOW CREATE TABLE MyTable;

এবং এটি নির্দিষ্ট টেবিলের জন্য তৈরি সারণী বিবৃতি প্রদান করবে। আপনার যদি ইতিমধ্যে কোনও টেবিল তৈরি করা থাকে এবং অন্য একটি ডাটাবেসে একই টেবিলটি তৈরি করতে চান তবে এটি কার্যকর।

ইতিমধ্যে বিদ্যমান সারি, বা সারিগুলির সেট জন্য সন্নিবেশ বিবৃতি পাওয়া সম্ভব? কিছু টেবিলের অনেকগুলি কলাম রয়েছে এবং সন্নিবেশ বিবৃতিটি লিখে না রেখে, বা সিএসভিতে ডেটা রফতানি না করে এবং পরে একই ডেটা আমদানি না করে অন্য ডাটাবেসে সারিগুলি স্থানান্তর করার জন্য একটি সন্নিবেশ বিবৃতি পেতে সক্ষম হয়ে আমার পক্ষে ভাল লাগবে nice অন্যান্য ডাটাবেসের মধ্যে।

কেবল স্পষ্ট করে বলতে চাই, আমি যা চাই তা হ'ল এটি নিম্নরূপ কাজ করবে:

SHOW INSERT Select * FROM MyTable WHERE ID = 10;

এবং নিম্নলিখিতগুলি আমার জন্য ফিরে এসেছে:

INSERT INTO MyTable(ID,Col1,Col2,Col3) VALUES (10,'hello world','some value','2010-10-20');

আপনি ডিবিতে সংযোগ রাখতে কোন সরঞ্জামটি ব্যবহার করেন? কিছু প্রোগ্রাম এ জাতীয় টেমপ্লেট সরবরাহ করে।
GôTô

2
@ কিব্বি, আপনি কি এর কোন সমাধান খুঁজে পেয়েছেন ??
হাসিনা

2
এমন একটি উত্তর পছন্দ করবে যা mysql>প্রম্পট থেকে INSERT বিবৃতি দেখিয়েছিল । এখন পর্যন্ত কেউ করেনি।
বব স্টেইন

প্রোগ্রামটিমে theোকানো স্টেটমেন্টটি পাওয়ার জন্য আপনি কি এর কোনও সমাধান খুঁজে পেয়েছেন?
বৈভব জৈন

উত্তর:


155

INSERTমাইএসকিউএল কনসোল থেকে বিবৃতি পাওয়ার কোনও উপায় বলে মনে হচ্ছে না , তবে আপনি রবের পরামর্শ মতো মাইএসকিএলডাম্প ব্যবহার করে তা পেতে পারেন । -tসারণী সৃষ্টি বাদ দিতে নির্দিষ্ট করুন ।

mysqldump -t -u MyUserName -pMyPassword MyDatabase MyTable --where="ID = 10"

আপনি যদি ত্রুটিটি mysqldump পেয়ে থাকেন তবে এটি দেখুন: 'SELECT @@ GTID_MODE' চালানো যায়নি: অজানা সিস্টেম ভেরিয়েবল 'GTID_MODE' (1193) gist.github.com/arun057/5556563
ড্যানিয়েল শ্যাফার

10
সন্নিবেশ বিবৃতি সহ ফিল্ড / কলামের নামগুলি চাইলে আপনি "
কমপ্লিট

3
--single- লেনদেন
FelikZ

এবং --hex-blobযদি আপনার ব্লব কলাম রয়েছে (উদাহরণস্বরূপ ক bit(1)), এটি স্ট্রিং হিসাবে লিখবে অন্যথায়, যা Unknown command '\0'INSERT কার্যকর করার সময় ত্রুটি হতে পারে ।
মফেল্টে

79

মাইএসকিউএল ওয়ার্কবেঞ্চে আপনি INSERTবিবৃতিগুলির তালিকা হিসাবে যে কোনও একক-টেবিল ক্যোয়ারীর ফলাফল রফতানি করতে পারেন । কেবল ক্যোয়ারি চালান, এবং তারপরে:

রফতানি বোতামের স্ন্যাপশট

  1. Export/Importফলাফলের উপরে ফ্লপি ডিস্কে ক্লিক করুন
  2. লক্ষ্য ফাইলটির একটি নাম দিন
  3. উইন্ডোর নীচে, Formatনির্বাচন করতেSQL INSERT statements
  4. ক্লিক Save
  5. ক্লিক Export

2
এছাড়াও, ডানদিকের আইকনটি সবেমাত্র তৈরি করা রফতানি আমদানির জন্য খুব কার্যকর is খুব সুন্দর বৈশিষ্ট্য। কেবলমাত্র জটিল অংশটি হ'ল আপনি নির্বাচনের পরে ফলাফল সেট প্যানেল থেকে আইকনগুলি কেবল অ্যাক্সেস করতে পারবেন।
অর্ধ_দ্বৈত

13

যেহেতু আপনি শো টানা মাই টেবিলটি তৈরি করুন এসকিউএল দিয়ে টেবিলটি অনুলিপি করেছেন , তাই নতুন টেবিলে ডেটা লোড করার জন্য আপনি কেবল নিম্নলিখিতটি করতে পারেন।

INSERT INTO dest_db.dest_table SELECT * FROM source_db.source_table;

আপনি যদি সত্যিই INSERT বিবৃতি চান, তবে আমার জানা একমাত্র উপায় হ'ল mysqldump http://dev.mysql.com/doc/refman/5.1/en/mysqldump.htm ব্যবহার করা । আপনি এটিকে সুনির্দিষ্ট সারণির জন্য এমনকি নির্দিষ্ট সারণির জন্য ডেটা ডাম্প করার বিকল্পগুলি দিতে পারেন।


প্রশ্নে থাকা ডেটাবেসগুলি শারীরিকভাবে বিভিন্ন মেশিনে, বিভিন্ন নেটওয়ার্কে উপস্থিত রয়েছে, সুতরাং এই পদ্ধতিটি আমার পক্ষে কাজ করবে না, তবে মাইএসকিউএল
কিব্বি

আপনি কি মেশিনের মধ্যে উপাত্তের উপসর্গগুলি অগ্রগতিতে সরানোর চেষ্টা করছেন? আপনি ডেটা মিরর করতে দ্বিতীয় মেশিনকে দাস করতে পারেন না, তারপরে আপনার সাবসেটগুলি দাসের ডাটাবেসের মধ্যে সরিয়ে ফেলতে পারেন?
রব প্রসেস

1
আসুন, যুক্তির স্বার্থে বলি আমার কাছে একটি টেবিল রয়েছে যাতে টাইম জোন রয়েছে। এখন, কোনও কারণে একটি নতুন টাইম অঞ্চল তৈরি করা হয়েছে (সম্ভবত 15 মিনিটের অফসেট বা এরকম কিছু দিয়ে)। তাই আমি ডেভলপমেন্ট ডাটাবেসে নতুন সারি যুক্ত করছি যাতে নতুন টাইমজোন সম্পর্কিত সমস্ত তথ্য থাকে এবং প্রয়োজনীয় সমস্ত পরীক্ষার কাজ করে। সেই সময় অঞ্চল তথ্যটি যখন প্রোডাকশন ডাটাবেসে স্থানান্তরিত করার সময় আসে তখন আমাকে স্ক্র্যাচ থেকে একটি সন্নিবেশ বিবৃতি তৈরি করতে হবে, বা একটি রফতানি / আমদানি করতে হবে। এটি কেবল সন্নিবেশ পেতে সক্ষম হবেন এবং নতুন টাইমজোনকে সরাসরি আনতে স্ক্রিপ্টগুলিতে এটি অন্তর্ভুক্ত করুন be
কিবিবি

1
আমার কাছে আসল সন্নিবেশ নেই কারণ আমি এটি কোনও জিইআইআই সরঞ্জামটি ব্যবহার করে .োকাতে পেরেছি বা আমার theোকানো মূল মানগুলি থেকে 3 বার এটি পরিবর্তন করতে হতে পারে।
কিবিবি

1
একই মেশিনে ডেটাবেসগুলির জন্য আমার একটি সহজ সমাধানের প্রয়োজন হয়েছিল এবং গুগল আমাকে এখানে এনেছে। সুতরাং আমি এই উত্তরের জন্য কৃতজ্ঞ, যদিও এটি মূল প্রশ্নের প্রসঙ্গেই ছিল না :)
জেসন ম্যাককারেল

10

আমি একটি পিএইচপি ফাংশন লিখেছি যা এটি করবে। ইতিহাসের টেবিলের জন্য মুছে ফেলার পরে কোনও রেকর্ড প্রতিস্থাপনের প্রয়োজন হলে আমার একটি সন্নিবেশ বিবৃতি দেওয়া দরকার:

function makeRecoverySQL($table, $id)
{
    // get the record          
    $selectSQL = "SELECT * FROM `" . $table . "` WHERE `id` = " . $id . ';';

    $result = mysql_query($selectSQL, $YourDbHandle);
    $row = mysql_fetch_assoc($result); 

    $insertSQL = "INSERT INTO `" . $table . "` SET ";
    foreach ($row as $field => $value) {
        $insertSQL .= " `" . $field . "` = '" . $value . "', ";
    }
    $insertSQL = trim($insertSQL, ", ");

    return $insertSQL;
}

3
এই সমাধানটি বেশ নাজুক। উদাহরণস্বরূপ, আপনার রেকর্ডগুলির মধ্যে একটিতে যদি নামটি থাকে O' Malley, তবে উত্পন্ন প্রশ্নের সাথে একক-উদ্ধৃতি মিল না দেওয়ার কারণে বাক্য গঠন ত্রুটি থাকবে। mysql_real_escape_stringএই রুটে যাওয়ার সময় আপনার কমপক্ষে ব্যবহার করা উচিত ।
এরিক সাস্টার্যান্ড

এখনও দুর্দান্ত জিনিস, আমি এটি নিশ্চিতভাবে ব্যবহার করব
user7082181

9

ল্যাপটপ লিফ্টের কোডটি দুর্দান্ত কাজ করে, তবে এমন কয়েকটি জিনিস ছিল যা আমার মনে হয়েছিল লোকেরা পছন্দ করতে পারে।

ডাটাবেস হ্যান্ডলার একটি যুক্তি, হার্ডকডযুক্ত নয়। নতুন মাইএসকিএল এপিআই ব্যবহার করেছেন। Optionচ্ছিক with আইডি প্রতিস্থাপন flex যেখানে নমনীয়তার পক্ষে যুক্তি। যে কেউ স্কিল ইনজেকশন দেওয়ার চেষ্টা করেছে এবং কোটগুলির সাথে জড়িত সাধারণ ভাঙ্গন এড়াতে যদি রিয়েল_সেসকেপ_ স্ট্রিং ব্যবহার করে। ব্যবহৃত INSERT table (field...) VALUES (value...)...সিনট্যাক্স যাতে ক্ষেত্র শুধুমাত্র একবার সংজ্ঞায়িত করা হয় এবং তারপর মাত্র প্রতিটি সারির মান বন্ধ তালিকা (কেন্দ্রীভূত সন্ত্রস্ত)। নাইজেল জনসন এটিকে নির্দেশ করেছেন বলে আমি NULLহ্যান্ডলিং যুক্ত করেছি added

আমি ব্যবহার করেছি $array[$key]কারণ আমি চিন্তিত ছিলাম যে এটি কোনওভাবে পরিবর্তিত হতে পারে তবে যদি কিছু ভয়াবহভাবে ভুল না হয় তবে এটি আর হওয়া উচিত নয়।

<?php
function show_inserts($mysqli,$table, $where=null) {
    $sql="SELECT * FROM `{$table}`".(is_null($where) ? "" : " WHERE ".$where).";";
    $result=$mysqli->query($sql);

    $fields=array();
    foreach ($result->fetch_fields() as $key=>$value) {
        $fields[$key]="`{$value->name}`";
    }

    $values=array();
    while ($row=$result->fetch_row()) {
        $temp=array();
        foreach ($row as $key=>$value) {
            $temp[$key]=($value===null ? 'NULL' : "'".$mysqli->real_escape_string($value)."'");
        }
        $values[]="(".implode(",",$temp).")";
    }
    $num=$result->num_rows;
    return "INSERT `{$table}` (".implode(",",$fields).") VALUES \n".implode(",\n",$values).";";
}
?>

নিখোঁজ INTOহওয়া সম্পর্কে নিশ্চিত নন INSERT INTO {$tables}তবে টেবিলে নাল পরিচালনা করার কোনও ব্যবস্থা নেই।
নাইজেল জনসন

1
@NigelJohnson INTOসম্পূর্ণরূপে হয় ঐচ্ছিক । আমি এতে নাল হ্যান্ডলিং যুক্ত করেছি।
চিনটো ভোক্রো

6

আমি প্রোগ্রামটি এসকিউএলওয়াইজি ব্যবহার করি যেখানে আমি একটি নির্বাচিত ক্যোয়ারী তৈরি করতে পারি, স্ক্রিনশটফলাফলগুলিতে নির্দেশ করে এবং এসকিউএল হিসাবে রফতানি চয়ন করতে পারি। এটি আমাকে sertোকানোর বিবৃতি দেয়।


কেবল বিভ্রান্তি এড়ানোর জন্য, এটি এসকিএল ফর্ম্যাট বলে তবে এটি মাইএসকিএল ফর্ম্যাটে রফতানি করে।
কুমার বিক্রমজিৎ

ধন্যবাদ .... +1 যেমন এটি আমার পক্ষে কাজ করেছে। তবে কেবলমাত্র নির্বাচিত সারিগুলির জন্য পাওয়া যায়নি। :( আপনার পদ্ধতিটি সারণির সমস্ত সারি সন্নিবেশ সন্ধানের প্রশ্নের
জোগান

5

মাইএসকিউএল ওয়ার্ক বেঞ্চের মধ্যে নিম্নলিখিতগুলি সম্পাদন করুন:

  1. সার্ভার> ডেটা এক্সপোর্ট ক্লিক করুন

  2. অবজেক্ট সিলেকশন ট্যাবে কাঙ্ক্ষিত স্কিমা নির্বাচন করুন।

  3. এর পরে, স্কিমার ডানদিকে তালিকা বাক্সটি ব্যবহার করে পছন্দসই টেবিলগুলি নির্বাচন করুন।

  4. স্ক্রিপ্ট রফতানি করতে একটি ফাইলের অবস্থান নির্বাচন করুন।

  5. সমাপ্তি ক্লিক করুন।

  6. সদ্য নির্মিত ফাইলটিতে নেভিগেট করুন এবং statementsোকানো বিবৃতিগুলি অনুলিপি করুন।


এটি একটি সম্পূর্ণ সারণী রফতানি, কোনও নির্দিষ্ট সারি রফতানি নয়
ইয়েহিয়া

4

আপনি যদি নিজের টেবিলের জন্য "statementোকান বিবৃতি" পেতে চান তবে নীচের কোডটি চেষ্টা করতে পারেন।

SELECT 
    CONCAT(
        GROUP_CONCAT(
            CONCAT(
                'INSERT INTO `your_table` (`field_1`, `field_2`, `...`, `field_n`) VALUES ("',
                `field_1`,
                '", "',
                `field_2`,
                '", "',
                `...`,
                '", "',
                `field_n`,
                '")'
            ) SEPARATOR ';\n'
        ), ';'
    ) as `QUERY`
FROM `your_table`;

ফলস্বরূপ, আপনার কাছে ইনসারস স্টেটমেন্ট থাকবে:

ঢোকান এমনটা your_table( field_1, field_2, ...,field_n ) মান (value_11, value_12, ..., value_1n);

ঢোকান এমনটা your_table( field_1, field_2, ...,field_n ) মান (value_21, value_22, ..., value_2n);

/ ................................................. .... /

ঢোকান এমনটা your_table( field_1, field_2, ...,field_n ) মান (value_m1, value_m2, ..., value_mn);

, যেখানে মি - আপনার_ টেবিলটিতে রেকর্ডের সংখ্যা


4
আপনি কেবল উত্তর দেওয়াতে কেবল একটি পেস্ট করা কোড ব্লক ছাড়া আরও কিছু সরবরাহ করতে পারেন?
ম্যাট ফ্লেচার

হ্যাঁ, তবে এটি হার্ডকোডযুক্ত, ফিল্ড_ * স্থির নাম। এটি কাজের অর্ধেক অংশ তৈরি করে এবং এটি এতটা ভাল করে না
ড্যানিয়েল ক্রুসিয়ানি

কেন GROUP_CONCAT?
sealabr

3

আপনি এটি করতে সিকোয়েল প্রো ব্যবহার করতে পারেন, প্রাপ্ত ফলাফলের জন্য 'সন্নিবেশ বিবৃতি হিসাবে পেতে' বিকল্প রয়েছে


3

পিএইচপিএমআইএডমিনে আপনি এটি করতে পারেন:

  1. আপনি যে সারিটি সন্নিবেশ করানো বিবৃতি এসকিউএল জানতে চান তার উপরের অনুলিপিটিতে ক্লিক করুন:

কপি নির্বাচন করুন

  1. পূর্বরূপ এসকিউএল ক্লিক করুন:

পূর্বরূপ নির্বাচন করুন

  1. এটি তৈরি করা সন্নিবেশ বিবৃতি পাবেন

আপনি একবারে অনেকগুলি সারিতে এটি প্রয়োগ করতে পারেন যদি আপনি সেগুলি নির্বাচন করেন এবং টেবিলের নীচে থেকে অনুলিপিটি ক্লিক করেন এবং তারপরে SQl এর পূর্বরূপ দেখুন


আপনার উত্তরে আরও ব্যাখ্যা এবং তথ্য যুক্ত করুন
রামিন ইগবলিয়ান

1

পিডিও দিয়ে আপনি এটি এইভাবে করতে পারেন।

$stmt = DB::getDB()->query("SELECT * FROM sometable", array());

$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $fields = array_keys($array[0]);

    $statement = "INSERT INTO user_profiles_copy (".implode(",",$fields).") VALUES ";
    $statement_values = null;

    foreach ($array as $key => $post) {
        if(isset($statement_values)) {
            $statement_values .= ", \n";
        }

        $values = array_values($post);
        foreach($values as $index => $value) {
            $quoted = str_replace("'","\'",str_replace('"','\"', $value));
            $values[$index] = (!isset($value) ? 'NULL' : "'" . $quoted."'") ;
        }

        $statement_values .= "(".implode(',',$values).")";


    }
    $statement .= $statement_values . ";";

    echo $statement;

1

আপনি নীচের কোড সহ একটি এসপি তৈরি করতে পারেন - এটি পাশাপাশি NULLS সমর্থন করে।

select 'my_table_name' into @tableName;

/*find column names*/
select GROUP_CONCAT(column_name SEPARATOR ', ') from information_schema.COLUMNS
where table_schema =DATABASE()
and table_name = @tableName
group by table_name
into @columns
;

/*wrap with IFNULL*/
select replace(@columns,',',',IFNULL(') into @selectColumns;
select replace(@selectColumns,',IFNULL(',',\'~NULL~\'),IFNULL(') into @selectColumns;

select concat('IFNULL(',@selectColumns,',\'~NULL~\')') into @selectColumns;

/*RETRIEVE COLUMN DATA FIELDS BY PK*/
SELECT
  CONCAT(
    'SELECT CONCAT_WS(','''\'\',\'\''',' ,
    @selectColumns,
    ') AS all_columns FROM ',@tableName, ' where id = 5 into @values;'
    )
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;

/*Create Insert Statement*/
select CONCAT('insert into ',@tableName,' (' , @columns ,') values (\'',@values,'\')') into @prepared;

/*UNWRAP NULLS*/
select replace(@prepared,'\'~NULL~\'','NULL') as statement;

1

হেইডিএসকিউএল ব্যবহারকারীদের জন্য :

আপনি যদি হেইডিএসকিউএল ব্যবহার করেন তবে আপনি সন্নিবেশ বিবৃতি পেতে চান এমন সারিটি নির্বাচন করতে পারেন। তারপরে ডান ক্লিক করুন> গ্রিড সারিগুলি রফতানি করুন> "আউটপুট টার্গেট" এর জন্য "ক্লিপবোর্ডে অনুলিপি করুন", "সারি নির্বাচন" এর জন্য "নির্বাচন" নির্বাচন করুন যাতে আপনি অন্যান্য সারিগুলি রফতানি না করেন, "আউটপুট ফর্ম্যাট" এর জন্য "এসকিউএল INSERTs"> ওকে ক্লিক করুন।

এখানে চিত্র বর্ণনা লিখুন

Clipোকানো বিবৃতিটি আপনার ক্লিপবোর্ডের ভিতরে থাকবে।


0

আমি মনে করি যে ল্যাপটপ লিফ্টের সরবরাহকৃত উত্তরটি সবচেয়ে ভাল ... তবে যেহেতু কেউই আমার ব্যবহারের পদ্ধতির পরামর্শ দেয়নি, তাই আমি বুঝতে পেরেছিলাম যে আমার চিমটি দেওয়া উচিত database এটিতে, আপনি যে সারিগুলি চান তার পাশে চেকমার্কগুলি কেবল রেখে দিতে পারেন এবং নীচে "রফতানি" ক্লিক করুন এবং এসকিউএল চয়ন করেছেন। এটি আপনার নির্বাচিত যে কোন রেকর্ডের জন্য আপনাকে INSERT বিবৃতি দেবে। আশাকরি এটা সাহায্য করবে.


-1

আপনার মন্তব্যের ভিত্তিতে, আপনার লক্ষ্য বিকাশ পরিবেশ থেকে উত্পাদন পরিবেশে ডাটাবেস পরিবর্তনগুলি স্থানান্তরিত করা।

এটি করার সর্বোত্তম উপায় হ'ল আপনার উত্স কোডে আপনার ডাটাবেস পরিবর্তন রাখা এবং ফলস্বরূপ গিট বা এসএনএন এর মতো আপনার উত্স নিয়ন্ত্রণ সিস্টেমে এগুলি ট্র্যাক করা।

আপনি উঠতে এবং এই জাতীয় কিছু দিয়ে দ্রুত দৌড়াতে পারেন: https://github.com/davejkiger/mysql-php- ইমিগ্রেশন

পিএইচপি-তে খুব মৌলিক কাস্টম সমাধান হিসাবে, আপনি এই জাতীয় ফাংশন ব্যবহার করতে পারেন:

function store_once($table, $unique_fields, $other_fields=array()) {
    $where = "";
    $values = array();
    foreach ($unique_fields as $k => $v) {
        if (!empty($where)) $where .= " && ";
        $where .= "$k=?";
        $values[] = $v;
    }
    $records = query("SELECT * FROM $table WHERE $where", $values);
    if (false == $records) {
        store($table, array_merge($unique_fields, $other_fields));
    }
}

তারপরে আপনি একটি মাইগ্রেশন স্ক্রিপ্ট তৈরি করতে পারেন যা আপনার স্পেসিফিকেশনে কোনও পরিবেশ আপডেট করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.