คำถามติดแท็ก update

UPDATE เปลี่ยนค่าของคอลัมน์ที่ระบุในทุกแถวที่ตรงตามเงื่อนไข เฉพาะคอลัมน์ที่จะแก้ไขเท่านั้นที่ถูกกล่าวถึงใน SET clause คอลัมน์ที่ไม่ได้แก้ไขอย่างชัดเจนเก็บค่าก่อนหน้าของพวกเขา

3
อัพเดตองค์ประกอบ json ในประเภทข้อมูล json
ฉันไม่สามารถคิดได้ว่าฉันจะปรับปรุงองค์ประกอบในประเภทข้อมูล PostgreSQL 9.3 ได้อย่างไร ตัวอย่างของฉัน: CREATE TABLE "user" ( id uuid NOT NULL, password character varying(255), profiles json, gender integer NOT NULL DEFAULT 0, created timestamp with time zone, connected timestamp with time zone, modified timestamp with time zone, active integer NOT NULL DEFAULT 1, settings json, seo character varying(255) …

1
เป็นไปได้หรือไม่ที่จะแก้ไข definition ทริกเกอร์ที่มีอยู่ใน MySQL?
ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะอัพเดทคำจำกัดความของทริกเกอร์ใน MySQL ตัวอย่างเช่นฉันมีทริกเกอร์ T และฉันต้องการเพิ่มฟังก์ชันใหม่บางอย่างลงไป ข้อสันนิษฐานของฉันคือฉันต้องวางและสร้างใหม่ แนวทางปฏิบัติที่ดีที่สุดในการบริหารฐานข้อมูลสำหรับสถานการณ์ดังกล่าวคืออะไร
14 mysql  trigger  update 

1
ฐานข้อมูลทำการลบและแทรกเมื่อมีการอัพเดทแถวหรือไม่?
ดังนั้นวันนี้อาจารย์คนหนึ่งบอกเราว่าเมื่อฐานข้อมูลต้องทำการอัพเดทภายใน (ในระดับต่ำ) มันจะทำการลบแล้วแทรกด้วยเขตข้อมูลที่อัปเดต จากนั้นเขาก็บอกว่านี่เป็นสิ่งที่ทำในฐานข้อมูลทั้งหมดแล้วฉันก็เริ่มการสนทนาโดยบอกว่าฉันคิดว่ามันไม่มีเหตุผล แต่ฉันไม่มีทรัพยากรเพียงพอที่จะสนับสนุนตำแหน่งของฉัน ดูเหมือนว่าเขาจะรู้มาก แต่ฉันก็ไม่เข้าใจว่าทำไมทำไมถึงทำอย่างนั้น ฉันหมายความว่าฉันรู้ว่าถ้าคุณอัปเดตเขตข้อมูลและคุณต้องการพื้นที่เพิ่มสำหรับแถวนั้นก็อาจลบแถวทางกายภาพและวางไว้ที่ส่วนท้ายด้วยข้อมูลใหม่ แต่ถ้าเช่นคุณลดพื้นที่ที่ใช้ทำไมมันจะลบและใส่มันอีกครั้งในตอนท้าย? มันเป็นเรื่องจริงเหรอ? ประโยชน์คืออะไร

1
อัปเดตคอลัมน์ทั้งหมดจากตารางอื่น
ฉันต้องการอัปเดตตารางจากอีกอันหนึ่งและฉันต้องอัปเดตคอลัมน์ทั้งหมด นอกจากการแสดงทุกคอลัมน์ในส่วนSETคำสั่งมีวิธีอัปเดตทั้งหมดในครั้งเดียวหรือไม่ แบบนี้: update tableA set * = tableB.* from tableB where tableA.id = tableB.id ฉันลอง psql แล้วมันใช้งานไม่ได้ ฉันต้องแสดงรายการทุกคอลัมน์ดังนี้ update tableA set c1 = tableB.c1, c2 = tableB.c2, ... from tableB where tableA.id = tableB.id tableBcreate .. like tableAถูกสร้างขึ้นใช้ ดังนั้นพวกเขาจึงเหมือนกันโดยทั่วไป และเหตุผลที่ฉันทำก็คือว่าผมต้องโหลดข้อมูล CSV เพื่อตาราง temp tableBแล้ว update อยู่บนพื้นฐานของข้อมูลใหม่ในtableA จำเป็นต้องถูกล็อคให้น้อยที่สุดและต้องรักษาความสมบูรณ์ ฉันไม่แน่ใจว่า 'ลบแล้วแทรก' …

2
ทริกเกอร์เป็น UPDATE หลังจาก UPDATE หรือไม่
ฉันต้องการทริกเกอร์บันทึกเวลาของการอัปเดตใด ๆ เป็น: CREATE TRIGGER col_update AFTER UPDATE ON col FOR EACH ROW BEGIN UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id END ปัญหาคือเมื่อทริกเกอร์นี้พยายามอัปเดตupdatedคอลัมน์มันก็เป็นอีกเหตุการณ์หนึ่งของการอัพเดทที่รันทริกเกอร์ สิ่งนี้จะสร้างการวนซ้ำไม่สิ้นสุดซึ่งไม่ทำงาน ฉันจะจัดเก็บเวลาอัปเดตในคอลัมน์ที่เกี่ยวข้องได้อย่างไร ฉันต้องการใช้ทริกเกอร์เนื่องจากมีหลายคอลัมน์ในตาราง หากฉันพยายามตั้งเวลาอัปเดตด้วยตนเองฉันจะต้องแก้ไขข้อความค้นหาจำนวนมาก

3
ใช้ CASE เพื่อเลือกคอลัมน์ในแบบสอบถามแบบ UPDATE หรือไม่
ฉันสามารถใช้CASEเพื่อเลือกคอลัมน์ที่จะแสดงในSELECTแบบสอบถาม (Postgres) เช่น: SELECT CASE WHEN val = 0 THEN column_x WHEN val = 1 THEN column_y ELSE 0 END AS update, ... มีความคล้ายคลึงกันหรือไม่เมื่อดำเนินการUPDATEค้นหาใน Postgres (เช่นเลือกคอลัมน์ที่ควรได้รับการอัปเดต)? ฉันคิดว่าไม่ใช่เพราะฉันไม่พบอะไรเกี่ยวกับเรื่องนี้ แต่อาจมีบางคนมีทางเลือกที่ฉลาด (นอกเหนือจากการใช้โพรซีเดอร์หรืออัปเดตแต่ละคอลัมน์โดยใช้ a CASEเพื่อพิจารณาว่าควรกำหนดค่าของคอลัมน์ใหม่หรือมอบหมายค่าเดิม ราคา). หากไม่มีทางเลือกอื่นที่ง่ายแน่นอนฉันจะยอมรับว่าเป็นคำตอบเช่นกัน ข้อมูลเพิ่มเติม : ในกรณีของฉันฉันมีคอลัมน์ที่อาจเกิดขึ้น 14 คอลัมน์ซึ่งอาจได้รับการอัปเดตโดยมีการอัปเดตเพียงคอลัมน์เดียวต่อแถวที่ตรงกัน (ตารางที่จะอัปเดตเข้าร่วมกับอีกคอลัมน์หนึ่งในแบบสอบถาม) จำนวนแถวที่จะอัปเดตจะแตกต่างกันมากที่สุดอาจเป็นหลายสิบหรือหลายร้อย ฉันเชื่อว่ามีการจัดทำดัชนีสำหรับเงื่อนไขการเข้าร่วม

5
อัปเดตแถวทั้งหมด
ฉันต้องการทราบวิธีที่มีประสิทธิภาพที่สุดในการอัปเดตทุกแถวในตาราง Oracle ที่มีขนาดใหญ่มากสำหรับคอลัมน์เดียว ตัวอย่างเช่น: update mytable set mycolumn=null; หรือ: update mytable set mycolumn=42; ความรู้ของฉันอาจจะเหม็นอับ สิ่งที่ฉันทำคือการปรับเปลี่ยนตารางเพื่อวางคอลัมน์ จากนั้นฉันเปลี่ยนตารางเพื่อเพิ่มคอลัมน์ด้วยค่าเริ่มต้นของค่าใหม่ที่ฉันต้องการใช้ จากนั้นฉันจะแก้ไขตารางเพื่อลบค่าเริ่มต้นสำหรับคอลัมน์ ฉันพบว่าสิ่งนี้เร็วกว่าแค่เรียกใช้การอัปเดต แต่ฉันรู้สึกว่ามีวิธีที่ดีกว่า
12 oracle  update 

3
อัปเดตตารางตามตารางเดียวกัน
ฉันมีตารางมีรายละเอียดสินค้าและรายละเอียดของสินค้าแต่ละคนมีและproduct_id language_idสิ่งที่ฉันต้องการจะทำคือการปรับปรุงเขตข้อมูลทั้งหมดที่มีlanguage_idของ2ให้เท่ากับเดียวกันproduct_idที่เป็นlanguage_id1 จนถึงตอนนี้ฉันได้ลองใช้แบบสอบถามต่อไปนี้ แต่ฉันได้รับข้อผิดพลาดที่ระบุว่า MySQL ไม่ต้องการอัปเดตตารางที่มีการใช้ตารางในแบบสอบถามย่อยด้วย UPDATE products_description AS pd SET pd.products_seo = ( SELECT pd2.products_seo FROM products_description AS pd2 WHERE pd2.language_id = 1 AND pd2.products_id = pd.products_id ) WHERE pd.language_id <> 1 มีวิธี "ง่าย" รอบข้อ จำกัด นี้ใน MySQL? หรือ "ลูกเล่น"? ฉันแปลกใจเล็กน้อยที่แบบสอบถามของฉันไม่ทำงานตามที่คิด
12 mysql  update 

6
การสลับค่าในคอลัมน์ด้วยคำสั่ง update เดียว
คุณพบว่าข้อผิดพลาดในระบบได้รับการตั้งชื่อผู้ชาย (M) ไม่ถูกต้องในฐานะผู้หญิง (W) และในทางกลับกันในฐานข้อมูล คอลัมน์อนุญาตสำหรับอักขระหนึ่งตัวเท่านั้น โดยไม่ต้องใช้ตาราง temp ใด ๆ ให้เขียนหนึ่งคิวรีอัปเดตเพื่อแก้ไข คำถามนี้ถูกถามในการสัมภาษณ์เมื่อเร็ว ๆ นี้ที่ฉันมีและฉันจะไปสัมภาษณ์เพิ่มเติมที่อาจมีคำถามที่คล้ายกันดังนั้นฉันต้องการที่จะได้รับความคิดของวิธีการจัดการนี้
12 update 

2
การอัปเดตหลายแถวด้วยค่าที่แตกต่างกันในการสืบค้นเดียว
ฉันพยายามที่จะเข้าใจวิธีการปรับปรุงหลายแถวด้วยค่าที่แตกต่างกันและฉันไม่ได้รับมัน ทางออกมีอยู่ทุกที่ แต่สำหรับฉันมันดูยากที่จะเข้าใจ ตัวอย่างเช่นการอัพเดตสองรายการใน 1 ข้อความค้นหา: UPDATE mytable SET fruit='orange', drink='water', food='pizza' WHERE id=1; UPDATE mytable SET fruit='strawberry', drink='wine', food='fish' WHERE id=2; ฉันไม่เข้าใจว่ากรณีนี้เมื่อใด ... จากนั้น ... END ใช้งานได้และวิธีใช้งาน สงสัยว่ามีคนช่วยฉันได้ไหม
12 mysql  update 

2
นำ OUTPUT ของคำสั่ง UPDATE ไปยังตัวแปรโลคัล
ฉันต้องการทำสิ่งนี้: DECLARE @Id INT; UPDATE Logins SET SomeField = 'some value' OUTPUT @Id = Id WHERE EmailAddress = @EmailAddress -- this is a parameter of the sproc เป็นไปได้ไหม ฉันรู้ว่าฉันสามารถประกาศตัวแปรตารางท้องถิ่นและส่งออกตรงนั้น แต่ฉันอยากจะข้ามมันถ้าเป็นไปได้

5
เหตุใดการอัปเดตนี้จึงล้มเหลวเนื่องจากมีการละเมิดข้อ จำกัด คีย์ที่ไม่ซ้ำกัน
ฉันเป็น DBA "บังเอิญ" ซึ่งค่อนข้างไม่มีประสบการณ์และรู้สึกงุนงงกับปัญหานี้ ใช้ MS SQL Server 2012 ปัญหานี้เกิดขึ้นกับคำสั่ง UPDATE นี้: UPDATE dbo.tAccts SET Ticket = 'ARP.ExGE' , Method = 'smtp' , AcctOwner = 'r00417819' , DisplayName = '~AppLight HBSFax-Inactive' , Destination = 'r00417819@mail.ad.ge.com' , UpdatedBy = SYSTEM_USER , UpdatedOn = CAST(GetDate() AS DATE) FROM dbo.vReclaimable WHERE OHR_EmpStatus <> …

1
ล็อคใน Postgres สำหรับชุด UPDATE / INSERT
ฉันมีสองตาราง หนึ่งคือตารางบันทึก; อีกอันประกอบด้วยรหัสคูปองที่สามารถใช้ได้ครั้งเดียวเท่านั้น ผู้ใช้ต้องสามารถแลกคูปองซึ่งจะแทรกแถวลงในตารางบันทึกและทำเครื่องหมายคูปองที่ใช้ (โดยอัปเดตusedคอลัมน์เป็นtrue) โดยธรรมชาติมีปัญหาสภาพการแข่งขัน / ความปลอดภัยที่เห็นได้ชัดที่นี่ ฉันเคยทำสิ่งที่คล้ายกันในอดีตในโลกของ mySQL ในโลกนั้นฉันจะล็อกทั้งสองตารางทั่วโลกทำตรรกะให้ปลอดภัยด้วยความรู้ที่ว่าสิ่งนี้จะเกิดขึ้นได้ครั้งละครั้งแล้วปลดล็อกตารางเมื่อฉันทำเสร็จแล้ว Postgres มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่? โดยเฉพาะอย่างยิ่งฉันกังวลว่าการล็อกนั้นเป็นแบบโกลบอล แต่ไม่จำเป็นต้องเป็น - ฉันแค่ต้องทำให้แน่ใจว่าไม่มีใครพยายามป้อนรหัสนั้นดังนั้นบางทีการล็อกระดับแถวอาจจะใช้งานได้

3
เรียงซ้อนการอัปเดตคีย์หลักเป็นคีย์ต่างประเทศที่อ้างอิงทั้งหมด
เป็นไปได้หรือไม่ที่จะอัพเดตค่าคอลัมน์คีย์หลักที่มีการเรียงซ้อนการอัพเดตระหว่างคีย์ต่างประเทศทั้งหมดที่อ้างถึง? # แก้ไข 1: เมื่อฉันเรียกใช้แบบสอบถาม followinq select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable') ฉันเห็นว่า update_referential_action ตั้งเป็น 0 ดังนั้นจะไม่มีการดำเนินการใด ๆ หลังจากอัปเดตคอลัมน์คีย์หลักของฉัน ฉันจะอัปเดตคีย์ต่างประเทศเพื่อใช้เป็นCASCADE UPDATE ได้อย่างไร # EDIT 2: เพื่อให้สคริปต์ออกสร้างหรือวางกุญแจต่างประเทศทั้งหมดในสคีมาของคุณให้เรียกใช้สคริปต์ต่อไปนี้ (นำมาจากที่นี่ ) DECLARE @schema_name sysname; DECLARE @table_name sysname; DECLARE @constraint_name sysname; DECLARE @constraint_object_id int; DECLARE @referenced_object_name sysname; DECLARE @is_disabled bit; DECLARE @is_not_for_replication bit; DECLARE …

2
อัปเดตคอลัมน์ด้วยข้อมูลจากตารางอื่น
ฉันกำลังทำงานกับปัญหาที่ซับซ้อน แต่ฉันจะทำให้ปัญหานี้ง่ายขึ้น ฉันมีสองตาราง A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] และฉันต้องการอัปเดตที่สาม: C [ID, column1, column2,column3] ฉันกำลังปรับปรุงตารางที่สามโดยใช้แบบสอบถามนี้ UPDATE C set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab from (select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab from A, B limit 1; ) as t ; ฉันได้: UPDATE 0 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.