คลังเก็บป้ายกำกับ: MySQL

รัน Update SQL ขึ้น Error ERROR 1093 (HY000): You can’t specify target table ” for update in FROM clause

เขียนคำสั่งใน MySQL แล้วขึ้น Error
Error ERROR 1093 (HY000): You can’t specify target table ‘ชื่อ Table’ for update in FROM clause
นั่นก็เป็นเพราะว่า MySQL ไม่ให้ update จาก Select โดยจาก Table ของตัวมันเอง เช่น

update table_a set status = ‘1’ where fid in (select fid from table_a where fname =’abc’)

ถ้าเขียนแบบนี้จะขึ้น Error ทันทีเพราะว่า มันเรียก Update จาก Select Table ของตัวเอง

วิธีการแก้ไข

update table_a set status = ‘1’ where fid in (
select * from (
select fid from table_a where fname =’abc’
) as table_a_tmp
)

ก็จะไม่ขึ้น Error แล้วครับ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

วิธีเปลี่ยน Password root ของ Mysql

เป็นคำสั่งง่ายๆ ที่ลืมบ่อยๆ

> mysqladmin -u root -p password ‘newpassword’

เท่านี้เอง เมื่อเปลี่ยแล้ว ก็ลอง Login ดูครับ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

การใช้ Replace function ใน MySQL mysql search replace function

บางครั้งเราต้องการแทนคำต่างๆ ใน Table ของเราใน MySQL ก็สามารถทำได้ด้วย Function Replace ที่ Build in มาในตัว MySQL อยู่แล้ว โดยใช้คำสั่งดังนี้

update table_name set field_name = replace(field_name, 'คำที่ค้นหา','คำที่ต้องการแทนที่');

แค่นี้ก็เรียบร้อยแล้วครับ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

WordPress Convert Page to Post หรือ Post to Page

เนื่องจากบางครั้งมือใหม่ WP อาจจะ เดี๋ยว Page เดี๋ยว Post ปนกันไป ปนกันมา แต่เมื่อเข้าใจหลักการแล้วก็อยากแก้ให้มันถูกต้อง ไอ้ครั้นจะ copy ๆ paste ๆ ก็ดูจะลำบากไปสักนิด เลยขอนำเสนอ SQL Script ในการเปลี่ยน Post เป็น Page หรือ Page เป็น Post

ต้องเข้าไปเขียน SQL Script เพื่อทำการ Update ค่า post_type ให้เป็น ดังที่เราต้องการ อันนี้ขอยกตัวอย่าง 2 อัน คือ page และ post โดย
ให้ update ที่ ID ของ Post หรือ Page นั้นๆ โดยเอา mouse ไปวาง แล้วดูที่ status bar ดังรูป

จากนั้นก็ทำการ Run SQL Script

UPDATE wp_posts SET post_type = ‘post’ WHERE  ID =473 ;

แค่นี้ Page ก็เปลี่ยนเป็น Post แล้วครับ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

BigDump Save My Ass

หลังจากที่ย้าย Server ไป Hostmonster MSIT9 Webboard ก็ใช้งานไม่ได้เรื่อยมา เป็นระยะเวลาเกือบ 2-3 เดือน เนื่องจากติดปัญหาใหญ่ๆ เลยก็คือ File Database ที่ dump มาจาก mysqldump นั้น มีขนาดใหญ่โตถึง 450-500 Mb (เฉพาะ posts table ของ ipb นี่ก็ 400 แล้ว) เมื่อรวบ Log File แล้วยิ่งใหญ่โตเข้าไปอีก แค่คิดก็ท้อซะแล้ว แต่ด้วยมีความต้องการ webboard เก่าคืน ผมจึงพยายามหาทางทำมาเรื่อย อันดับแรกผมลบ ข้อมูลที่เป็น Spam Post ทิ้งทั้งหมด แล้วก็ไม่เอา Log อะไรเลย ไฟล์จึงเหลือ ขนาดสักประมาณ 10 Mb ได้ (โห..ลบไปเยอะนะเนี้ย)

แต่แม้จะเหลือแค่ 10 Mb ชีวิตผมก็ไม่ได้ง่ายขึ้นเลย เพราะว่า นอกจากจะต้องแปลง Encoding แล้ว ผมยังต้อง หาทาง Split File ที่ได้จาก mysqldump ให้เหลือสักไม่เกิน 1 Mb ด้วย เพราะถ้าไฟล์ขนาดนี้ การ ส่งไป Monster Host ไม่่ง่ายเลย เพราะมันจะเดี้ยง เดี้ยง และ เดี้ยง

แต่แล้วผมก็ได้พบกับ BigDump ที่ช่วย Webboard ของผมได้ในที่สุด เพราะโปรแกรมสามารถทำให้ restore ข้อมูลขนาดใหญ่ๆ ได้อย่างสบายๆ เพราะว่า ถ้าไฟล์มันใหญ่มาก ก็ upload ผ่าน FTP ไปแทนเลย ซึ่ง โปรแกรมนี้แก้ปัญหาให้ผมได้นั่นเอง

หน้าตาโปรแกรมเป็นแบบข้างบน

อ่านเพิ่มเติม →

แปลง Mysql Database ภาษาต่างดาวเป็น ภาษาไทย แบบปกติ

เมื่อก่อนตอนใช้ MySql แรกๆ ผมก็ติดตั้งแล้วก็ใช้งาน ลง Application แล้วก็ไม่ได้สนใจอะไรมาก แต่เมื่อถึงเวลาย้าย Server กลับต้องมามองว่า แล้ว Database ที่เราเก็บเนี้ย มันอ่านภาษาไทยไม่ได้เนี้ย ต้องทำยังไงกับมันดี ก็ได้ทดลอง และ พบวิธีแก้ปัญหา ดังที่เขียนด้านล่างครับ

ขั้นตอนแรกต้องอ่าน Table มันออกมาเป็น Script SQL เสียก่อน ด้วยคำสั่ง Backup Mysql ชื่อ mysqldump

ตัวอย่าง
เข้าไปที่ Dos
พิมพ์คำสั่ง cd เพื่อเข้าไปที่ Root ของ Drive C
พิมพ์คำสั่ง mysqldump –default-character-set={ค่า charset} -u {Username} -p {ชื่อ database}> backup.sql

ตัวอย่าง : mysqldump –default-character-set=latin1 -u root -p db_museumshopbangkok> msbkk_backup.sql

โดยแทนค่าดังนี้
{ค่า charset} = ของผมจะเป็น latin1
{Username} = username สำหรับ mysql
{ชื่อ database} = ชื่อ database ที่ต้องการ backup

อ่านเพิ่มเติม →

date_add ใน MYSQL

หลังจากที่ร้างลาไม่ได้เข้ามายุ่มยามกับ MySQL เท่าไหร่ แต่มีเหตุอันต้องกลับมาใช้ แต่อยากจะทำการจัดการเกี่ยวกับวันที่ในระบบ เลยเก็บรวบรวม Function ที่จำเป็นต้องใช้เกี่ยวกับวันที่มารวบรวมไว้

ถ้าคุณต้องการ จัดรูปแบบวันที่ใน MySQL ละก็ต้องนี่

select date_format(‘2008-02-01’, ‘%d-%m-%Y’)

ผลจะออกมาเป็น 01-02-2008

ถ้าคุณต้องการเพิ่มวัน ต้องแบบนี้

SELECT ‘2008-02-01’ + INTERVAL 6 day

ผลจะออกมาเป็น 2008-02-07

ถ้ามีเพิ่มเติมในแต่ละขั้นตอนจะนำมาโพสเพิ่มเติมครับ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

ERROR 1030 (HY000): Got error 1 from storage engine

เมื่อ MySQL เกิด Error อย่างนี้ คือเกิดอะไรขึ้น (MySQL4.0)

เหตุมันเกิดที่ มาวันนึงผมไม่สามารถ Start MySQL Service ได้ เนื่องจากผมไป Skip InnoDB ใน my.ini แล้วก็ไม่ได้ Restart MySQL Service แล้วเครื่อง ทำการ Update Windows ซึ่ง Windows ก็จับ Restart ตัวเองตอนตี 3 พอ Restart เสร็จก็ Start MySQL Service ไม่ได้ จะขึ้น Error

System error 1067 has occurred

อ่านเพิ่มเติม →

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

Mysql Old Password

ปัญหา MySQL Old Password

ปัญหานี้เกิดจาก การที่ MySQL มีการเปลี่ยนแปลงกระบวนการในการเข้ารหัส password ของ user
ผลก็คือ ทำให้ client รุ่นเก่า ไม่สามารถติดต่อ MySQL ได้ ซึ่งกลไกดังกล่าว มีใช้ใน MySQL 4.1 เป็นต้นไป

แต่เราสามารถสั่งให้ MySQL สามารถใช้ OLD_PASSWORD() เพื่อกำหนดให้ MySQL ใช้รูปแบบการจัดเก็บ password แบบเดิมได้ เช่น

CODE

mysql> SET PASSWORD FOR ‘some_user’@’some_host’ = OLD_PASSWORD(‘newpwd’);

หรือการมี user อยู่แล้ว

CODE

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(‘newpwd’)
WHERE Host = ‘some_host’ AND User = ‘some_user’;
mysql> FLUSH PRIVILEGES;

ถ้าคุณมี user อยู่เป็นพัน เปลี่ยนแบบนี้คงไม่ไหวแน่ กรณีนี้ให้สั่ง MySQL ทำงานคู่กับ parameter –old-passwords

CODE

mysqld –old-passwords

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย