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

MySQL ทุกรุ่น (ไม่ใช่ Microsoft SQL Server) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น mysql-5.7 หากเกี่ยวข้องกับคำถาม

1
ฉันควรตีความ "ล็อคเวลา" ในบันทึกแบบสอบถามช้า mysql ได้อย่างไร
ฉันพยายามที่จะเข้าใจวิธีการตีความเวลาล็อคที่ดีที่สุดสำหรับการค้นหาที่ปรากฏในบันทึกการสืบค้นช้า MySQL ของเรา เช่นถ้าแบบสอบถาม UPDATE มีเวลาล็อค 10 วินาที ฉันคิดว่ามันเป็นเวลารวมหลังจากแบบสอบถามการอัพเดทเพื่อรับล็อค แม้ว่ากำลังรอให้คิวรีแบบเลือกก่อนหน้านี้เสร็จสมบูรณ์ แต่ไม่ได้ดำเนินการกับการกระทำ UPDATE ตัวเองนาฬิกาควรจะถูกทำเครื่องหมายเนื่องจากมันกำลังล็อคคิวรี SELECT ทั้งหมดที่เรียงกันหลังจากคิวรี UPDATE และวิธีการเกี่ยวกับการเลือกแบบสอบถามล็อค ทำไมแบบสอบถามที่เลือกบางรายการจึงมีเวลาล็อค เป็นเพราะมีคิวรี่ UPDATE ติดตามดังนั้นพวกเขาจะล็อคตารางด้วยกัน
12 mysql  locking 

2
การบำรุงรักษาดัชนี MySQL
ฉันทำวิจัยจำนวนมากเกี่ยวกับวิธีการบำรุงรักษาดัชนีใน MySQL เพื่อป้องกันการแตกแฟรกเมนต์และเพื่อเพิ่มประสิทธิภาพการดำเนินการของแบบสอบถามบางอย่าง ฉันคุ้นเคยกับสูตรนั้นที่คำนวณอัตราส่วนระหว่างพื้นที่ว่างสูงสุดที่มีอยู่สำหรับตาราง VS พื้นที่ที่ใช้โดยข้อมูลและดัชนี อย่างไรก็ตามคำถามหลักของฉันยังคงไม่มีคำตอบ บางทีนี่อาจเป็นเพราะฉันคุ้นเคยกับการบำรุงรักษาดัชนีใน SQL Server และฉันมักจะคิดว่าใน MySQL มันควรจะคล้ายกัน ในเซิร์ฟเวอร์ SQL คุณสามารถมีดัชนีได้หลายดัชนีและแต่ละดัชนีสามารถมีการแตกแฟรกเมนต์ระดับต่างกัน จากนั้นคุณสามารถเลือกและดำเนินการ 'REORGANIZE' หรือ 'REBUILD' ในดัชนีนั้นโดยไม่กระทบต่อส่วนที่เหลือ ความรู้ของฉันอย่างดีที่สุดไม่มี 'การแตกแฟรกเมนต์ของตาราง' และ SQL Server ไม่ได้จัดเตรียมเครื่องมือใด ๆ เพื่อแก้ไข 'การแตกแฟรกเมนต์ตาราง' สิ่งที่มีให้คือเครื่องมือในการตรวจสอบการแตกแฟรกเมนต์ของดัชนี (เข้าใจเช่นอัตราส่วนระหว่างจำนวนหน้าที่ใช้โดยดัชนีเทียบกับความสมบูรณ์ของหน้าและความต่อเนื่องกัน) รวมทั้งการกระจายตัวของภายในและภายนอก ทั้งหมดนี้ค่อนข้างตรงไปตรงมาที่จะเข้าใจอย่างน้อยก็สำหรับฉัน ตอนนี้เมื่อถึงคราวที่ต้องรักษาดัชนีใน MySQL จะมีเพียงแนวคิดของ 'การแตกแฟรกเมนต์ของตารางดังกล่าวข้างต้น ตารางใน MySQL สามารถมีดัชนีได้หลายดัชนี แต่เมื่อฉันตรวจสอบ 'อัตราส่วนการกระจายตัวของ' ด้วยสูตรที่มีชื่อเสียงนั้นฉันไม่เห็นการกระจายตัวของดัชนีแต่ละรายการ แต่ตารางโดยรวม เมื่อฉันต้องการเพิ่มประสิทธิภาพดัชนีใน MySQL ฉันไม่ได้เลือกดัชนีเฉพาะเพื่อดำเนินการ (เช่นใน SQL …

3
สร้างตารางจากไฟล์ CSV พร้อมส่วนหัว
ฉันกำลังหาวิธีในการสร้างตาราง MySQL ใหม่โดยอิงจากเนื้อหาของ CSV ที่ระบุเท่านั้น ไฟล์ CSV ที่ฉันจะใช้มีคุณสมบัติดังต่อไปนี้ "|" คั่น แถวแรกระบุชื่อคอลัมน์ (ส่วนหัว) เช่นกัน "|" คั่น ชื่อคอลัมน์และคำสั่งซื้อไม่ได้รับการแก้ไข จำนวนคอลัมน์ไม่คงที่ ไฟล์มีขนาดใหญ่ (1 ล้านแถว / 50 คอลัมน์) ใน Excel ทั้งหมดนี้ค่อนข้างง่าย แต่ด้วย MySQL มันดูเหมือนจะไม่ (ไม่มีโชคกับ Google) ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่ฉันควรจะดู?
12 mysql  csv  import  bulk 

3
สิทธิ์ขั้นต่ำที่จำเป็นในการแก้ไขข้อ จำกัด กุญแจต่างประเทศคืออะไร
สิทธิ์ขั้นต่ำที่จำเป็นในการแก้ไขข้อ จำกัด กุญแจต่างประเทศคืออะไร สคริปต์การย้ายข้อมูลของฉันหยุดทำงานหลังจากMySQL 5.5.41แก้ไขข้อผิดพลาดนี้: InnoDB อนุญาตให้สร้างคีย์ต่างประเทศซึ่งอ้างถึงตารางหลักซึ่งผู้ใช้มีสิทธิ์ไม่เพียงพอ (Bug # 18790730) ฉันได้รับข้อผิดพลาดนี้: SQLSTATE [42000]: ข้อผิดพลาดทางไวยากรณ์หรือการละเมิดการเข้าถึง: คำสั่งอ้างอิง 1142 ปฏิเสธการอ้างอิงถึงผู้ใช้ 'foo' @ 'localhost' สำหรับตาราง 'core.users' (SQL: แก้ไขตาราง `user_baz` เพิ่มข้อ จำกัด user_baz_user_id_foreign คีย์ต่างประเทศ (` user_id`) `core`.`users` (` id`) ในการลบ cascade ในการปรับปรุง cascade) ซึ่งหมายความว่าฉันต้องแก้ไขสิทธิ์ สิทธิ์ขั้นต่ำที่ฉันต้องการคืออะไร
12 mysql 

3
วิธีการนับหลายครั้งในหนึ่งแบบสอบถาม?
ฉันนับระเบียนด้วยคำค้นหาเช่น SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%' สำหรับการนับแต่ละครั้ง mysql จำเป็นต้องเดินตามตารางและนี่เป็นปัญหาใหญ่หากมีตารางยาวและข้อความค้นหาจำนวนมาก ฉันสงสัยว่ามีวิธีการนับทั้งหมดในหนึ่งแบบสอบถามหรือไม่ ในกรณีนี้เมื่อ mysql เดินผ่านแต่ละแถวมันจะประมวลผลการนับทั้งหมดและไม่จำเป็นต้องสแกนทั้งตารางซ้ำไปซ้ำมา

4
คอลัมน์รหัสประจำตัวอีกครั้ง: เมื่อจำเป็นหรือไม่
ในช่วงหนึ่งของบทเรียนสุดท้ายที่มหาวิทยาลัย (ฉันเป็นนักเรียน) อาจารย์ขอให้เราพัฒนาฐานข้อมูล (MySQL Server ถ้ามันเป็นเรื่องสำคัญ) และแอปไคลเอ็นต์ขนาดเล็กที่ใช้ฐานข้อมูลเป็นแหล่งข้อมูล หนึ่งในข้อกำหนดคือคอลัมน์ประจำตัว (ซึ่งคือ PK ในทุกตาราง) จะต้องเรียงตามลำดับเพราะเป็นการปฏิบัติที่ดี (ตามคำของอาจารย์) กล่าวคือเมื่อลบแถวของตารางจะต้องมีการนำ PK กลับมาใช้ใหม่ในส่วนแทรกภายหลัง ฉันมีความรู้โดยเฉลี่ยเกี่ยวกับ RDBMS, PKs และคอลัมน์ข้อมูลประจำตัว จากสิ่งที่ฉันเข้าใจคอลัมน์ข้อมูลประจำตัวนั้นเป็นเพียงวิธีให้ DB สร้างอัตโนมัติ PK เมื่อแทรกแถวและไม่มีอะไรเพิ่มเติม และค่าคอลัมน์ข้อมูลประจำตัวจะไม่เกี่ยวข้องกับแอตทริบิวต์แถวในทางใด ๆ (ตราบใดที่มันไม่ใช่คีย์ธรรมชาติ) ข้อกำหนดนี้ (คอลัมน์ข้อมูลประจำตัวตามลำดับอย่างเคร่งครัด) เป็นที่น่าสงสัยสำหรับฉัน ฉันพยายามถามอาจารย์ว่าเกิดอะไรขึ้นถ้าตัวตนไม่ได้เรียงตามลำดับ (ด้วยช่องว่างที่เกิดจากการลบ) แต่ได้คำตอบที่เป็นนามธรรมเช่น "สะดวกสำหรับผู้ใช้และเป็นประโยชน์สำหรับผู้ดูแลฐานข้อมูลที่ดูแลฐานข้อมูล" ไม่มีตัวอย่างเฉพาะ อาร์กิวเมนต์ "สะดวกสำหรับผู้ใช้" ฟังดูไม่ดีเพราะไม่มีความหมายใด ๆ ในโดเมนธุรกิจ ดังนั้นฉันอยากรู้ว่าเหตุผลเหล่านี้เป็นจริงหรือไม่ ฉันสามารถคิดได้เพียงกรณีเดียวเท่านั้นที่ต้องมีการระบุคอลัมน์ข้อมูลประจำตัวใหม่ - เมื่อพื้นที่ข้อมูลส่วนบุคคลหมดแล้ว แต่นี่เป็นปัญหาการออกแบบที่มากขึ้นเมื่อเลือกคอลัมน์ประเภทข้อมูลระบุตัวตนไม่ถูกต้องพูดง่าย ๆintแทนbigintหรือuniqueidentifierเมื่อตารางมีจำนวนพันล้านแถว สมมติว่าคอลัมน์ข้อมูลประจำตัวเป็นดัชนีกลุ่ม: ช่องว่างในคอลัมน์ข้อมูลระบุตัวตนมีผลต่อประสิทธิภาพของดัชนีหรือไม่ อาจจะมีเหตุผลอื่น …

2
วิธีสร้างแบบจำลองประเภทเอนทิตีที่สามารถมีชุดคุณสมบัติที่แตกต่างกันได้อย่างไร
ฉันมีปัญหาบางอย่างในการสร้างฐานข้อมูลที่มีอย่างใดอย่างหนึ่งต่อหลาย (1: M) ความสัมพันธ์ระหว่างผู้ใช้และรายการ ตรงไปตรงมานี้ใช่ อย่างไรก็ตามแต่ละรายการเป็นของบางประเภท (เช่นรถเป็นเรือหรือเครื่องบิน ) และแต่ละประเภทมีจำนวนโดยเฉพาะอย่างยิ่งของคุณลักษณะเช่น: Car โครงสร้าง: +----+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | +----+--------------+--------------+ Boat โครงสร้าง: +----+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | +----+--------------+--------------+--------------+ Plane โครงสร้าง: +----+--------------+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | …

2
ROLLBACK ไม่ทำงานหลังจาก INSERT INTO สร้างตารางปลายทางใหม่
ฉันกำลังทำงานกับสคริปต์ PHP ซึ่งนำเข้าไฟล์ CSV ( customers.csv) ลงในตาราง MySQL (customers ) ก่อนที่จะแทรกเนื้อหาของไฟล์ CSV ลงในตาราง mysql ฉันสำรองข้อมูลcustomersตารางดั้งเดิมก่อน ฉันกำลังห่อกระบวนการนำเข้าทั้งหมด (รวมถึงการสำรองข้อมูล) ในธุรกรรม mysql (เพื่อพิจารณากรณีที่ CSV เสียหายที่ไหนสักแห่งที่อยู่ตรงกลางและเพื่อให้แน่ใจว่าการนำเข้านั้นเป็นอะตอม) ปัญหาคือว่าย้อนกลับดูเหมือนจะไม่ทำงานเมื่อฉันเรียกมันว่าหลังจากที่INSERT INTOคำสั่ง: เมื่อตรวจสอบฐานข้อมูลผ่านทาง phpMyAdmin ฉันสามารถดูตารางที่สร้างขึ้นใหม่และแถวภายในมันยังคงอยู่หลังจาก roollback นี่คือบันทึกการทำงาน: [2015-01-19 14:08:11] DEBUG: "START TRANSACTION" [] [] [2015-01-19 14:08:11] DEBUG: SHOW TABLES LIKE :table_name; [] [] [2015-01-19 14:08:28] DEBUG: CREATE TABLE …

2
ค้นหาระยะเวลารวมของแต่ละแถวที่ต่อเนื่องกัน
เวอร์ชั่น MySQL รหัสจะทำงานใน MySQL 5.5 พื้นหลัง ฉันมีโต๊ะอย่างหนึ่งดังต่อไปนี้ CREATE TABLE t ( id INT NOT NULL AUTO_INCREMENT , patient_id INT NOT NULL , bed_id INT NOT NULL , ward_id INT NOT NULL , admitted DATETIME NOT NULL , discharged DATETIME , PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; ตารางนี้เป็นเรื่องเกี่ยวกับผู้ป่วยในโรงพยาบาลและเก็บเตียงที่ผู้ป่วยแต่ละรายใช้เวลาสักพักขณะเข้ารับการรักษาในโรงพยาบาล วอร์ดแต่ละคนอาจมีหลายเตียงและผู้ป่วยแต่ละรายอาจย้ายไปที่เตียงที่แตกต่างกันภายในวอร์ดเดียวกัน …

1
“ จำกัด 1,000,25” เทียบกับ“ จำกัด 25 ออฟเซ็ต 1,000”
เมื่อเร็ว ๆ นี้ฉันพบว่า MySQL มีoffsetคุณสมบัติ ฉันพยายามค้นหาเอกสารเกี่ยวกับผลลัพธ์ของออฟเซ็ตหรือความแตกต่างระหว่างออฟเซ็ตและตัวแปรลิมิต แต่ดูเหมือนไม่พบสิ่งที่ฉันกำลังมองหา ให้บอกว่าฉันมี 10.000 แถวในตารางและฉันต้องการผลลัพธ์ 25 รายการจากแถว 1.000 เท่าที่ฉันทำได้ฉันสามารถทำทั้งสองอย่างเพื่อให้ได้ผลลัพธ์เดียวกัน: SELECT id,name,description FROM tablename LIMIT 1000,25 SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000 สิ่งที่ฉันอยากรู้คือความแตกต่างระหว่างคนทั้งสอง สิ่งนี้ทำสิ่งเดียวกันหรือเข้าใจผิดหรือเปล่า? เป็นหนึ่งช้าลง / เร็วขึ้นในตารางขนาดใหญ่ ผลลัพธ์ของการเปลี่ยนแปลงออฟเซ็ตเกิดขึ้นเมื่อฉันWHERE column=1(คอลัมน์พูดมีมากกว่า 100 ค่าที่ต่างกัน) ผลลัพธ์ของการเปลี่ยนแปลงออฟเซ็ตเกิดขึ้นเมื่อฉันหรือไม่ORDER BY column ASC(เนื่องจากมีค่าสุ่ม) หากนี่เป็นคำถาม 'โง่' และมีคนรู้จักเอกสารใด ๆ ที่ให้ความกระจ่างเรื่องนี้โปรดเพิ่มพวกเขาในการตอบกลับ ฉันมีความรู้สึกตรงข้ามข้ามแถว X แรกที่พบในฐานข้อมูลโดยไม่คำนึงถึงการเรียงลำดับและตำแหน่ง
11 mysql  limits 

1
MySQL: bind-address 0.0.0.0 ใน my.cnf ไม่ทำงาน?
ฉันใหม่กับ mysql ฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์ mysql โดยใช้ทุกสิ่งที่ฉันต้องการ ฉันอ่านว่าสิ่งที่ฉันต้องทำคือเพิ่มไฟล์ my.cnf ที่บรรทัด bind-address = 0.0.0.0 นั่นคือสิ่งที่ฉันทำ ฉันรีสตาร์ทเซิร์ฟเวอร์ mysql จากนั้นฉันทดสอบจากบรรทัดคำสั่ง mysql -uroot -p'*password*' -h 127.0.0.1 --> Works mysql -uroot -p'*password*' -h 192.168.2.4 (local ip address) ---> ERROR 1045 (28000): Access denied for user 'root'@'mguru.lnx.gr' (using password: YES) คุณสามารถดูส่วนด้านล่างของส่วน mysqld ในไฟล์ my.cnf [mysqld] user = mysql …
11 mysql  my.cnf 

1
จัดตารางกิจกรรมทุกวันตามเวลาที่กำหนด
ฉันต้องการให้กิจกรรมของฉันทำงานทุกวันเวลา 00:20 น. ฉันสับสนในการกำหนดเวลา ฉันควรจะใช้ตัวเลือกแรกหรือตัวที่สอง? ตัวเลือกที่ 1 CREATE EVENT my_event ON SCHEDULE EVERY 1 DAY STARTS '2014-04-30 00:20:00' ON COMPLETION PRESERVE ENABLE DO # My query ตัวเลือก 2 CREATE EVENT my_event ON SCHEDULE AT ('2014-04-30 00:20:00'+ INTERVAL 1 DAY) ON COMPLETION PRESERVE ENABLE DO # My query
11 mysql  event 

1
ทำไมการเพิ่มอัตโนมัติถึงกระโดดเกินจำนวนแถวที่แทรกเข้าไป
ฉันรู้สึกยุ่งเหยิงมากจากพฤติกรรมแปลก ๆ นี้ที่ฉันเห็นในauto_incrementค่าที่บันทึกไว้ใน bidID ของตารางการเสนอราคาหลังจากทำการแทรกจำนวนมากโดยใช้ขั้นตอนที่เก็บไว้: INSERT INTO Bids (itemID, buyerID, bidPrice) SELECT itemID, rand_id(sellerID, user_last_id), FLOOR((1 + RAND())*askPrice) FROM Items WHERE closing BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK ORDER BY RAND() LIMIT total_rows; ตัวอย่างเช่นหากauto_incrementค่า bidID คือ 101 เมื่อเริ่มต้นและฉันแทรก 100 แถวค่าสิ้นสุดจะกลายเป็น 213 แทนที่จะเป็น 201 อย่างไรก็ตาม BidIDs ของแถวที่แทรกเหล่านั้นจะทำงานตามลำดับสูงสุด 201 มีการตรวจสอบดังต่อไปนี้ …

2
MySQL ไม่ได้ใช้ดัชนีเมื่อเข้าร่วมกับตารางอื่น
ฉันมีสองตารางตารางแรกประกอบด้วยบทความ / บล็อกโพสต์ทั้งหมดภายใน CMS บทความเหล่านี้บางส่วนอาจปรากฏในนิตยสารซึ่งในกรณีนี้พวกเขามีความสัมพันธ์กับต่างประเทศที่สำคัญกับตารางอื่นที่มีข้อมูลเฉพาะของนิตยสาร นี่คือเวอร์ชันที่เรียบง่ายของไวยากรณ์การสร้างตารางสำหรับสองตารางเหล่านี้ที่มีแถวที่ไม่จำเป็นออกมา: CREATE TABLE `base_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_published` datetime DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text, `content` longtext, `is_published` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `base_article_date_published` (`date_published`), KEY `base_article_is_published` (`is_published`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `mag_article` ( …

2
ไคลเอนต์ MariaDB Java เป็นสิ่งทดแทนที่สมบูรณ์แบบสำหรับ MySQL JDBC (Connector / J)?
สถานที่ : ฉันจัดส่งใบสมัคร Java ซึ่งจะทำให้การเชื่อมต่อ JDBC ไปยังฐานข้อมูล MySQL (ในช่วงเวลาของการเขียนนี้อาจเป็น 5.1 หรือ 5.5 แต่หวังว่าคำถามและคำตอบไม่ได้ขึ้นอยู่กับเวอร์ชันมาก) การสังเกต : เห็นได้ชัดว่าฉันสามารถใช้ไดรเวอร์ MySQL JDBC ( Connector / J ) หรือไดรเวอร์ MariaDB JDBC ( ไคลเอนต์ MariaDB Java ) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ข้อดีอย่างหนึ่งจากจุดยืนของ ISV คือไดรเวอร์ MariaDB นั้นได้รับใบอนุญาต LGPL ในขณะที่ MySQL เป็น GPL ที่ได้รับลิขสิทธิ์ ประสิทธิภาพของไดรเวอร์ MariaDBดูดีมาก คำถาม : ไดร์เวอร์ MariaDB …
11 mysql  mariadb  jdbc 

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