autoincrement int/bigint или още ?

Pok4

Registered
Здравейте,
Имам един въпрос и реших и тук да питам.
Значи имам нали Int(11) колона с autoincrement, но ме е страх, че в бъдеще може да се случи гаф и да се доближи до максимума заради парсерите.
В момента е 70к. След 1 месец ще е 140к или и повече, ако направя втори парсер.
Искам да попитам, понеже гледах, че на някои места има и bigint формат, дали не е добре да подменя типа (формата) на колоната с друг ?
Това възможно ли е да стане със записите вътре или трябва да се дропне и да се пре-създаде ?
Не съм чел на дълбоко, просто хвърлих няколко прегледа в стака..
Дайте идеи как да постъпя така, че никога да не стане грешка с големи стойности, които предполагам, че с времето ще ми създадат проблеми..
Нещо от рода на 1000000000000000000 числа трябва да е...
 
11 в int няма значение тук, освен ако не ползваш foreign keys или zerofill.

signed int поддържа до ~2 милиарда. Принципно такива полета се правят unsigned, понеже не би трябвало да се очаква да имаш негативни стойности.

unsigned int поддържа ~4.3 милиарда.

Това е страшно много и скоро няма да стигнеш това число. Това се предполага да имаш терабайти база данни.

bigint ти е 8 байта, което ще рече, че ще заема повече място, а предвид, че скоро няма да ти трябва, аз лично бих си спестил място (колкото и незначимо да е).

Иначе понеже bigint е също числов тип няма да имаш проблем да смениш типа.
На първо време аз бих променил int да е unsigned.
 
  • Like
Реакции: Pok4
Ок. За да стане unsigned може ли с някаква заявка или трябва да се дропне ?
Ето какво е в момента:

PHP:
CREATE TABLE `wpls_sw_listing` (
  `idlisting` int(11) NOT NULL,
  `transition_id` varchar(100) DEFAULT NULL,
  `category_id` int(11) DEFAULT NULL,
  `location_id` int(11) DEFAULT NULL,
  `is_primary` tinyint(1) DEFAULT NULL,
  `last_edit_user_id` int(11) DEFAULT NULL,
  `related_id` int(11) DEFAULT NULL,
  `is_featured` tinyint(1) DEFAULT NULL,
  `is_activated` tinyint(1) DEFAULT NULL,
  `gps` varchar(100) DEFAULT NULL,
  `lat` decimal(9,6) DEFAULT NULL,
  `lng` decimal(9,6) DEFAULT NULL,
  `address` varchar(200) DEFAULT NULL,
  `rank` int(11) DEFAULT NULL,
  `date_submit` datetime DEFAULT NULL,
  `date_modified` datetime DEFAULT NULL,
  `date_activated` datetime DEFAULT NULL,
  `date_rank_expire` datetime DEFAULT NULL,
  `date_alert` datetime DEFAULT NULL,
  `date_notify` datetime DEFAULT NULL,
  `date_repost` datetime DEFAULT NULL,
  `date_renew` datetime DEFAULT NULL,
  `date_activation_paid` datetime DEFAULT NULL,
  `date_featured_paid` datetime DEFAULT NULL,
  `date_status` datetime DEFAULT NULL,
  `date_expire` datetime DEFAULT NULL,
  `status` varchar(45) DEFAULT NULL,
  `last_edit_ip` varchar(45) DEFAULT NULL,
  `counter_views` int(11) DEFAULT NULL,
  `reviews_stars` int(11) DEFAULT NULL,
  `image_filename` varchar(200) DEFAULT NULL,
  `image_repository` text DEFAULT NULL,
  `repository_id` int(11) DEFAULT NULL,
  `affilate_id` int(11) DEFAULT NULL,
  `not_notified_user` tinyint(1) DEFAULT NULL,
  `hubspot_id` varchar(60) DEFAULT NULL,
  `custom_phone` text DEFAULT NULL,
  `custom_site` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
ALTER TABLE `wpls_sw_listing`
  MODIFY `idlisting` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
COMMIT;
 
SQL:
ALTER TABLE `wpls_sw_listing` CHANGE COLUMN `idlisting` `idlisting` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;

Защо нямаш primary key?
 
  • Like
Реакции: Pok4
Получи се! Благодаря!
Имам май:
PHP:
--
ALTER TABLE `wpls_sw_listing`
  ADD PRIMARY KEY (`idlisting`);
Просто съм го изпуснал..

Еми като цяло така ще е на този етап.
Само още 1 въпрос.. Понеже това idlisting (тази колона), се ползва от други таблици и там трябва да пусна заявката, за да ги обходи и тях,нали ? Те си имат други auto increment-и, но ползват idlisting отделно..
Тоест, там освен че трябва да пусна и на техните autoincrement-и, а и на другите колони, които ползват idlisting.
Ето пример:
PHP:
CREATE TABLE `wpls_sw_listing_agent` (
  `idlisting_agent` int(11) NOT NULL,
  `listing_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
ALTER TABLE `wpls_sw_listing_agent`
  ADD PRIMARY KEY (`idlisting_agent`);


ALTER TABLE `wpls_sw_listing_agent`
  MODIFY `idlisting_agent` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=121;
COMMIT;

Както виждате тук има 2 колони:
idlisting_agent - autoincrement
listing_id - тук се ползва idlisting от главната таблица wpls_sw_listing.

Тоест, сега трябва да изпълня заявката и върху 2-те колони, за да е ОК всичко, нали ?
 
Последно редактирано:
Ти не ползваш foreign keys, така че няма голямо значение, но е хубаво да са еднакви.

Ще е хубаво да се запознаеш с базовите неща при базата данни.

Виж и част 1 и 2.
 
  • Like
Реакции: Pok4

Back
Горе