Архив

Статии по ключова дума: ‘таблица’

Редактиране на MySQL тип чрез alter table

19 януари, 2010 Няма коментари

Видях, че има хора които се затрудняват когато им се наложи да променят тип на колона в MySQL. Примерно един приятел направил таблица и колоната X е от тип varchar(500), но след време установява, че тази колона иска да бъде от тип "text", а не varchar. Той дъмпнал цялата таблица и ръчно заместил varchar(500) със "text" и всичко било наред, но това рационално ли е ? НЕ

Решението е:
Могат да се ползват два вида метода:

1. Alter table change
При първия метод се изисква да се въведе старо име на колона и ново:

ALTER TABLE t1 CHANGE a b INTEGER;

или

ALTER TABLE t1 CHANGE b b INTEGER;

2. Alter table modify (Аз лично бих използвал този метод):

ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

За повече информация тук: Mysql Reference Manual

Извеждане на дублираните редове в MySQL

12 януари, 2010 Няма коментари

Предполагам на всеки ползващ MySQL му се е налагало да изведе дублираните редове от дадена колона в таблица. Идеята е, че колоната позволява записването на дублиращи редове , а ние искаме да ги изведем. За целта използваме having или ето го целият пример:

select gid,title,count(title) as cnt from super_info group by title having cnt > 1 order by cnt

Изход:

+------+-----------------------------------+-----+
| gid  | title                             | cnt |
+------+-----------------------------------+-----+
| 1620 | Запис1                            |   7 |
| 1175 | Запис2                    |   7 |
| 1229 | Запис3                             |   7 |
| 3637 | Запис4                         |   8 |
| 1310 | Запис5                           |   8 |
| 1806 | Запис6                       |   8 |
| 6046 | Запис7                  |   8 |
| 2137 | Запис8                             |   8 |
| 1108 | Запис9                            |   8 |
|  364 | Запис10 |   8 |
| 5085 | Запис11                           |  10 |
|  498 | Запис12                          |  10 |

Тук в изхода става ясно, че колоната "cnt" извежда броя повторения за съответния ред.

Replace на един стринг с друг в MySQL

28 декември, 2009 2 коментари

Случвало ли ви се е в MySQL таблица да имате 1 мил. реда като в една от колонките имате стринг "гад" които желаете да премахнете. Сещам се за две решения едното е чрез някакъв език(php,perl …) да обходихте всички редове (select) и да ги обновите(update)  което са си две операции т.е. 1 000 001 (1 000 000 пъти -- update и 1 път select).
Вторият и най- рационален вариант за мен е, чрез функцията REPLACE която е вградена в MySQL.

Ето Ви пример:

update nasha_tablica set kolonka=replace(kolonka,'gad','pich');

Тук в таблица "nasha_tablica" в колона "kolonka" ще бъде презаписано "gad" със "pich".

Конструкции на SQL за поддръжка на таблици в MySQL

14 октомври, 2009 Няма коментари

MySQL притежава няколко конструкции на SQL за поддръжка на таблици: CHECK TABLE за проверка на целостта им, REPAIR TABLE за извършване на поправка, ANALYZE TABLE за анализ и OPTIMIZE TABLE за оптимизиране.  Следва малко информация за всяка от конструкциите за поддръжка на таблици в MySQL:

CHECK TABLE

Конструкцията CHECK TABLE извършва проверка за целостта на структурата и съдържанието на съответната таблица. Тя е приложима и за MyISAM, и за InnoDB. За таблиците от тип MyISAM се осъществява също и актуализиране на статистиката на индексите. Ако дадената таблица с изглед, с CHECK TABLE се проверява дефиницията му. Ако данните, изведени от CHECK TABLE показват наличие на проблем с таблицата, тя трябва да бъде поправена.

REPAIR TABLE

Конструкцията REPAIR TABLE служи за коригиране на проблеми в таблица, която е повредена. Тя е приложима само за таблици от тип MyISAM. Можете да конфигурирате автоматична поправка на таблиците на MyISAM.

Пример: repair table dhstudio

ANALYZE TABLE

Конструкцията ANALYZE TABLE служи за актуализиране на таблица с информация за разпределението на ключовите стойности в нея. Тя се използва от оптимизатора за избор на по- подходящи планове за изпълнението на заявки. Тази конструкция работи с таблици на MyISAM и InnoDB.

Пример: analyze table dhstudio

OPTIMIZE TABLE

Конструкцията OPTIMIZE TABLE служи за "изчистване" на таблици от тип MyISAM чрез дефрагментирането им. Резултатът е повторното разпределяне на неизползваното пространство, получено в резултат от изтриване и актуализации, както и обединяване на записите, които са били разделени и съхранени разпокъсано. OPTIMIZE TABLE се използва също така за сортиране на индексните страници, ако не са подредени, както и за актуализиране на статистиката за индексите.
OPTIMIZE TABLE работи и с таблици на InnoDB, но ги пренасочва към конструкцията ALTER TABLE, която ги изгражда наново. По този начин се актуализира статистиката за индексите и се освобождава място в клъстерния индекс.

Пример:  optimize table dhstudio

Ако искате да разберете кои таблици трябва да оптимизирате изпълнете следното:

show table status where Data_free!=0;

По този начин ще фрагментирате таблиците които се нуждаят от това, а не тези които са фрагментирани.

Процент на кликове в ТОП 10 резултати

6 октомври, 2009 1 коментар

Случвало ли ви се е когато търсите нещо в интернет търсачките да си зададете въпроса колко процента от посетителите кликат на първата позиция, втора, третата и т.н. Тук с тази таблица предоставена от seosearcher можете най- нагледно да си изясните всичко, а именно, че пърият резултат привлича над 50% от потребителите.

click-distribution-serp

Поправяне на повредена mysql таблица

2 октомври, 2009 Няма коментари

Понеже забелязах, че има доста питания за поправяне на повредена таблица в mysql база реших в тази публикация да напиша някои от начините които ползвам.

Обикновено когато таблицата е повредена излиза следното съобщение:

"… is marked as crashed and should be repaired …"

Първи начин:

myisamchk -r <DatabaseName>\*.MYI

Втори начин:

repair table powredena_tablica_w_mysql

Ето напа бързо исах недин прост script които предлага repair, optimize и check на таблиците в mysql:

#!/bin/sh
#Mysql Table Fixer v 0.75 |  Written by amri

#Variables

MUSER=$2
MPASS=$3
DBNAME=$4

Usage() {
echo "Usage: $0"
echo " --optimize mysqluser mysqlpass tablename"
echo " --repair mysqluser mysqlpass tablename"
echo " --check mysqluser mysqlpass tablename"
return
}

repair_mysql_table()
{
TABLENAMES=`mysql -u$MUSER -p$MPASS -D $DBNAME -e "SHOW TABLES\G;"|grep 'Tables_in_'|sed -n 's/.*Tables_in_.*: \([_0-9A-Za-z]*\).*/\1/p'`
for TABLENAME in $TABLENAMES
do
mysql -u$MUSER -p$MPASS -D $DBNAME -e "$1 TABLE $TABLENAME;"
done
}

if [ $# -eq 0 ] ; then
Usage
exit 1
fi

case $1 in
--repair) repair_mysql_table "repair";;
--optimize) repair_mysql_table "optimize";;
--check) repair_mysql_table "check";;
--help) Usage; exit 1;;
*) Usage; exit 1;;
esac

Динамично добавяне на ред в html

28 септември, 2009 Няма коментари

Икона на htmlДнес се наложи да правя/редактирам едно малко приложение в което се налага да се менажират редовете в таблица без да се релоадва страницата. Тъй като съм го правил доста пъти реших да потърся другите методи и начини и да понапиша малко за това. Преводох, добавях, редактира и като цяло ето една публикация която има за цел да ви обясни как динамично, чрез javascript да добавяте,редактиране,изтриване редове или коловини в таблиците на html :) .
Ето я публикацията: Динамично добавяне на ред в таблица, чрез innerHTML срещу DOM срещу cloneNode

Проблем с MySQL encoding

Днес трябваше да направя Upgrade на едно старо приложение от преди доста години, обаче преди като съм го правил съм допуснал грешка.

Забравил съм да сложа encoding на таблиците и е останал подразбиращият се: latin1. С него кирилицата си работи, но не напълно коректно. Проблема беше че не може да сортира правилно по азбучен ред (напълно логично е все пак, друга таблица).

За целта за да видя какво пише като се свържа трябва да изпълня: SET character_set_client = utf8; и всичко се фиксва. Сега обаче възнамерявам да фиксна това.

1. Експортвам ставара инфо: mysqldump -uroot -p --compatible=mysql40 radiolist > d1.sql

2. Коментирам всички по- долу изброени редове:

SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;

Hint: Примерен коментар: /* primeren komentar */

3. След всяко създаване на таблица добавям:
DEFAULT CHARSET=cp1251
Пример:

CREATE TABLE `lists` (
`art_id` int(5) unsigned NOT NULL auto_increment,
….
) TYPE=MyISAM AUTO_INCREMENT=562525 DEFAULT CHARSET=cp1251;

4. Oтварям файла с Word и го записвам с Encoding: Windows cp1251.(Интересното беше, че нещо ми се закучи с iconv както и да е).

5. Импортирам новата база с коригирам encoding:

mysql -uroot -p radiolist --default-character-set=cp1251 < word_test.sql

6. Това е всичко :)