Portál AbcLinuxu, 14. května 2025 11:35
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '192.168.0.3 (datum date,data_out int,data_in int)' at line 1Pokud mu dam jmeno obycejne slovo tak se tabulka vytvori. V phpmyadmin tabuku s jmene ip adresy vytvorim , ale ja to potrebuju vkladat shellem.
Řešení dotazu:
mysql -N -D $DB_DB -u $DB_USER -h$DB_HOST -p$DB_PASS -e "CREATE TABLE '192.168.0.3' (datum int,data_out int,data_in int)"
./ipaccount_sql.sh: line 106: 192.168.0.3: command not found ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(datum int,data_out int,data_in int)' at line 1a kdyz pouziju '' tak ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''192.168.0.3' (datum int,data_out int,data_in int)' at line 1
"CREATE TABLE \`192.168.0.3\` (datum int,data_out int,data_in int)"
Samozřejmě že nepotřebuje, jen mu asi nedošlo že je to prasárna a že takhle se to prostě nedělá.
Nevim o nicem lepsim jak popsat hosta nez podle IP.
Toto je v pořádku, pokud jsou IP unikátní a jednoznačně identifikují hosta.
Pak IP by mohla sloužit například v tabulce "nastaveni" jako primární klíč. Další prvky by pak byly: mac, rychlost atd se vhodnými datovými typu. Případně odkázané přes cizí klíče do dalších tabulek (například to tabulky s osobami) dle normálních forem. Tedy nikoliv co IP to tabulka, ale jedna tabulka a co řádek to IP.
Nedokazu si predstavit co ip tak sloupec
Proč zase sloupec? ŘÁDEK!
Tabulka se sloupci např. ip UNSIGNED INT, cas DATETIME, incoming BIGTINT, outcoming BIGINT
atd. Primární klič na (ip, cas)
a podle verze MySQL ještě třeba další samostatný index nad sloupcem cas
. Pak si můžeš psát dotazy typu WHERE `ip`=nejaka_ip AND `cas` BETWEEN datum1 AND datum2
.
Nedokazu si predstavit co ip tak sloupec.
Proboha, nic takového jsem přece nepsal, ba ani nenaznačil, to by byla v podstatě stejná šílenost jako "co adresa, to tabulka". Prostě si uděláte strukturu ve stylu např.
create table HOSTS ( IPADDR bigint primary key, NAME varchar(32), ... ); create table TRAFFIC ( IPADDR bigint not null references HOSTS(IPADDR), RDATE date not null, DATA_IN bigint, DATA_OUT bigint, primary key (IPADDR,RDATE) ); create index IDX_TRAFFIC_DATEADDR on TRAFFIC(RDATE,IPADDR);
Pokud trváte na tom, že dat nesmí být moc, tak třeba jednou za měsíc záznamy starší než rok smažete, ale nehodláte-li těch počítačů evidovat statisíce, tak k takovému počínání nevidím důvod.
Pokud trváte na tom, že dat nesmí být moc, tak třeba jednou za měsíc záznamy starší než rok smažete
Případně je přesune to tabulky archiv (klidně i používající stejnojmenný engine) nebo ještě lépe: nastaví paritioning.
CREATE TABLE tabulka (`ip` varchar(15),`datum` date,`data_out` int, `data_in` int); ALTER TABLE `tabulka` ADD PRIMARY KEY (`ip`, `datum`); INSERT tabulka (ip,datum,data_out,data_in) VALUES ('192.168.1.1','2009-12-01',10,20), ('192.168.1.1','2009-12-02',11,21), ('192.168.1.1','2009-12-03',15,25), ('192.168.1.2','2009-12-01',1110,550), ('192.168.1.2','2009-12-03',100,200); SELECT * FROM tabulka WHERE `ip`='192.168.1.1'; SELECT * FROM tabulka WHERE `datum`='2009-12-01'; SELECT * FROM tabulka WHERE `ip`='192.168.1.1' AND `datum`='2009-12-01'; SELECT SUM(`data_out`) AS `out`, SUM(`data_in`) AS `in` FROM tabulka; SELECT SUM(`data_out`) AS `out`, SUM(`data_in`) AS `in` WHERE `ip`='192.168.1.1'; SELECT SUM(`data_out`) AS `out`, SUM(`data_in`) AS `in` FROM tabulka WHERE `datum`='2009-12-01'; SELECT SUM(`data_out`) AS `out`, SUM(`data_in`) AS `in` FROM tabulka WHERE `ip`='192.168.1.1' AND `datum`='2009-12-01';
`ip` varchar(15)
Špatně. IP(v4) je 32b, tedy typ UNSIGNED INT -- operace s tím budou daleko rychlejší než s varcharem (a to nemluvě o potenciální možnosti použít bitové operace) a zabere to méně místa.
date
jsem opravil.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.