คลังเก็บบล็อก

mysql auto number


บางตารางที่จะย้ายระบบอาจจะไม่มี primary key เพื่อให้ถูกต้องตามหลักการออกแบบตารางที่ดีจึงควรเพิ่ม pk ให้ตาราง
สมมุติตารางชื่อ contents และต้องการให้ pk ชื่อ contentId จะเขียน query ได้ตามตัวอย่าง

ALTER TABLE `contents` ADD `contentId` INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST ,
ADD PRIMARY KEY ( `contentId` )

อีกวิธีถ้าต้องการให้ primary key เรียงลำดับใหม่โดยให้ แคทตากอรี่เดียวกันอยู่ใกล้กัน หลังจากนั้นเรียงตามชื่อทำได้โดยใช้เทคนิค
row number เข้าไปทำง่ายๆ ตามตัวอย่าง

Update `contents` set `contentId` =
(select @rownum:=@rownum+1 rownum FROM (SELECT @rownum:=0) r)
ORDER BY `categoryId` ,`title`;

หาอินเด็กซ์ที่หายไป


ถ้าต้องการหาอินเด็กซ์  ที่หายไปในตารางที่มีอินเด็กซ์แบบ auto_increment ไว้หรือคีย์มีค่าแบบเรียงลำดับ 1,2,3,4…

index Alpha
1 a
2 b
4 c
5 e
6 f

ทำได้โดยเอาตารางมาจอยกับตัวเองโดยกำหนดให้ index น้อยกว่าอีกฝั่งอยู่ 1 ค่าแล้วหาว่าฝั่งขวามีข้อมูลรึเปล่า

SELECT *
FROM testTable  AS a
  LEFT JOIN testTable  AS b
    ON a.id = b.key_column - 1
WHERE b.key_column IS NULL;
%d bloggers like this: