একক ক্যোয়ারিতে একাধিক সারি সন্নিবেশ করানোর জন্য মাইএসকিউএল অন ডুপ্লিকেট কী আপডেট করুন


199

আমার একটি এসকিউএল কোয়েরি রয়েছে যেখানে আমি একক ক্যোয়ারিতে একাধিক সারি সন্নিবেশ করতে চাই। সুতরাং আমি এই জাতীয় কিছু ব্যবহার করেছি:

$sql = "INSERT INTO beautiful (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22),
  ('Hui Ling', 25),
  ('Yumie', 29)";

mysql_query( $sql, $conn );

সমস্যাটি যখন আমি এই কোয়েরিটি সম্পাদন করি, আমি পরীক্ষা করতে চাই একটি উপরে UNIQUE(কী নয় PRIMARY KEY) উদাহরণস্বরূপ, কীটি পরীক্ষা করা 'name'উচিত এবং যদি 'name'ইতিমধ্যে ইতিমধ্যে বিদ্যমান থাকে, তবে সংশ্লিষ্ট পুরো সারিটি অন্যথায় updatedোকানো উচিত।

উদাহরণস্বরূপ, নীচের উদাহরণে, 'Katrina'ডাটাবেসে ইতিমধ্যে উপস্থিত থাকলে ক্ষেত্রের সংখ্যা নির্বিশেষে পুরো সারিটি আপডেট করা উচিত। আবার যদি'Samia' উপস্থিত না সারিটি shouldোকানো উচিত।

আমি ব্যবহার করার কথা ভেবেছিলাম:

INSERT INTO beautiful (name, age)
      VALUES
      ('Helen', 24),
      ('Katrina', 21),
      ('Samia', 22),
      ('Hui Ling', 25),
      ('Yumie', 29) ON DUPLICATE KEY UPDATE

এখানেই ফাঁদ। কীভাবে এগিয়ে যেতে হবে সে সম্পর্কে আমি আটকে গেলাম এবং বিভ্রান্ত হয়ে পড়েছিলাম। একসাথে sertোকাতে / আপডেট করতে আমার একাধিক সারি রয়েছে। দয়া করে আমাকে একটি দিকনির্দেশ দিন। ধন্যবাদ।

উত্তর:


479

VALUESনতুন মানগুলি উল্লেখ করার জন্য কীওয়ার্ডটি ব্যবহার করুন ( ডকুমেন্টেশন দেখুন )।

INSERT INTO beautiful (name, age)
    VALUES
    ('Helen', 24),
    ('Katrina', 21),
    ('Samia', 22),
    ('Hui Ling', 25),
    ('Yumie', 29)
ON DUPLICATE KEY UPDATE
    age = VALUES(age),
     ...

2
আমাদের যদি আপডেটের কোনও আইএফ বিবৃতি অন্তর্ভুক্ত করার দরকার হয় যা প্রতিটি সারির জন্য আলাদা শর্ত রয়েছে?
যুক্তি 21

2
@logic: বিভিন্ন এই সংক্রান্ত প্রশ্ন আছে Stackoverflow অনুসন্ধান । তাদের মধ্যে যদি কেউ আপনার প্রশ্নের উত্তর না দেয় তবে দয়া করে আপনার কী প্রয়োজন তা ব্যাখ্যা করে একটি নতুন পোস্ট করুন।
পিটার ল্যাং

@ ব্লগিক আপনি কি আপনার সমস্যার সমাধান পেয়েছেন? বর্তমানে আমি একই সমস্যার মুখোমুখি
হচ্ছি

দুর্দান্ত পরামর্শ। ডুপ্লিকেট করার সময় আপনি যদি কোনও মান বাড়াতে চান তবে "অনুলিপি কী আপডেট করুন" অংশের পরে এটি যুক্ত করুন: মোট = মোট + ভলিউস (মোট)
ফিনিক্স

1

অন্তর্ভুক্ত করুন ... ডুপ্লিকেট অন কী আপডেট শুধুমাত্র এসকিউএল সার্ভারের জন্য নয়, কেবল মাইএসকিউএল এর জন্য কাজ করবে।

এসকিউএল সার্ভারের জন্য, এটিকে ঘিরে কাজ করার উপায়টি হল প্রথমে একটি টেম্প টেবিল ঘোষণা করা, সেই টেম্প টেবিলের মান সন্নিবেশ করা, এবং তারপরে মার্জ ব্যবহার করা

এটার মত:

declare @Source table
(
name varchar(30),
age decimal(23,0)
)

insert into @Source VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29);


MERGE beautiful  AS Tg
using  @source as Sc
on tg.namet=sc.name 

when matched then update 
set tg.age=sc.age

when not matched then 
insert (name, age) VALUES
(SC.name, sc.age);

15
যদিও এসকিউএল সার্ভারটি ব্যবহার করে: ডি
জেরেমি বেলোলো

-3

আপনি INSERT এর পরিবর্তে প্রতিস্থাপন ব্যবহার করতে পারেন ... কী কী আপডেটের জন্য ডুপ্লিকেট করুন।


28
হ্যাঁ তবে REPLACE ব্যবহার করে নতুন সারি beforeোকানোর আগে পুরানো সারি মুছে ফেলা হবে। আমি প্রাথমিক আইডির বজায় রাখার জন্য পুরানো সারিটি ধরে রাখতে চাই।
প্রশান্ত

2
আমি বুঝতে পারি নি যে পুরাতন পিকে ধরে রাখা আপনার পক্ষে কোনওরকম গুরুত্বপূর্ণ ... অবশ্যই, প্রতিস্থাপন এই ক্ষেত্রে কাজ করবে না ...
a1ex07

4
PS: "প্রতিস্থাপন করুন" এর জন্য মুছে ফেলা এবং প্রবেশাধিকার উভয়ই সন্নিবেশ করা প্রয়োজন!
অলিভার এম গ্রেচ

2
এবং উপরে উল্লিখিত মুছুন / সন্নিবেশ করানোর কারণে, এই দৃষ্টান্তগুলিতে এটি খুব ধীর হয়।
রস

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