webForumDet fria alternativet

Hjälp med att skapa tabell

Databaser & SQLur Databashanterare & SQL

14 svar · 629 visningar · startad av silfver

Medlem sedan apr. 200312 679 inlägg
Frågan#1

Hej!

Tänkte försöka ge mig på att skapa något slags script så jag kan sortera filmtitlar efter år, namn och så vidare. Men det här med php och databaser är som jag sagt tidigare, är inte min grej riktigt.

 CREATE TABLE `filmer` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT ,
`title` TEXT NOT NULL ,
`year` TEXT NOT NULL ,
`imdb` TEXT NOT NULL ,
`vote` TEXT NOT NULL
)

Det där funkar ju inte så bra tydligen, när man ska skapa så får jag felmeddelandet:

#1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key

Det säger mig ingenting...

Kan någon ge mig förslag på vad jag ska sätta för värden på varje kolumn?

id - den skapar ett värde automatiskt va?
title - The Ring
year - 1990
imdb - http://imdb.com/filmtitelid/
vote - 8

Ungefär sådär kommer det se ut när jag fyller i det. Vad jag då behöver hjälp med är hur tabellen ska se ut. "TEXT NOT NULL" kan man ju inte ha på alla...

Mvh,
silfver

Medlem sedan nov. 20048 inlägg
#2

Felet beror nog på att du måste ange att id ska vara primary key.

Medlem sedan mars 20025 907 inlägg
#3
CREATE TABLE `filmer` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT ,
`title` TEXT NOT NULL ,
`year` TEXT NOT NULL ,
`imdb` TEXT NOT NULL ,
`vote` TEXT NOT NULL ,
[b]PRIMARY KEY ( `id` )[/b]
)

i imdb-kolumnen skulle jag bara spara filmens imdb-nummer, inte hela urlen. Blir massa onödig data att spara annars.

Flyttas från PHP!

/r "title" skulle jag köra datatypen varchar på istället, year skulle jag köra datatypen smallint, imdb kan vi sätta varchar på igen och vote (betyg 1-10?) tinyint.

Medlem sedan apr. 200312 679 inlägg
#4

Det kör vi på. Tack! :)

r\ Peeer: När jag ändrade title till varchar så säger den "This is not a number!". Ska jag ange hur många tecken filmnamnet får innehålla där eller vad?

Medlem sedan juni 200032 967 inlägg
#5

Ja.

Year, bör väl också vara ett tal?

Medlem sedan apr. 200312 679 inlägg
#6

@nders skrev:

Ja.

Year, bör väl också vara ett tal?

Ok. Vad ska jag sätta på Year då? :) Det lär ju inte bli längre än fyra tecken ändå. Ska man sätta smallint då?

r\ *Läsa Peeers inlägg igen.*

Medlem sedan juni 200454 inlägg
#7

Du verkar inte ha speciellt mycket kunskap om just SQL.
Det vore väl kanske en idé att du läser på lite i manualen?

Detta är inte för att vara taskig, men ALLT står ju där i vad gäller dina hittills uppkomna problem.

varchar måste alltid sättas till ett tal på hur många tecken kan vara upp till.

char måste alltid sättas till ett tal på hur många tecken strängen alltid ska vara.

int/tinyint/smallint/whateverint är god praxis om du anger maxvärde. ett id-nummer har som de-facto standard att ha 11 som max antal. (alltså 11 bytes).

Mvh.
Niklas

Medlem sedan dec. 200012 464 inlägg
#8

För att lagra en kolumn av typen int används alltid 4 bytes.

Medlem sedan juni 200454 inlägg
#9

LarsG skrev:

För att lagra en kolumn av typen int används alltid 4 bytes.

4 bytes som i tecken? Isånafall har du fel!

Medlem sedan juni 200032 967 inlägg
#10

Nej, LarsG har rätt.

En integer är ett 32-bitars tal, och tar därmed 4 bytes i anspråk.

Medlem sedan dec. 200012 464 inlägg
#11

Tecken? Jag menar 4 bytes. Varifrån har du fått 11?

Medlem sedan juni 200454 inlägg
#12

@nders skrev:

Nej, LarsG har rätt.

En integer är ett 32-bitars tal, och tar därmed 4 bytes i anspråk.

Just precis!

Det jag menade med mitt inlägg var att en integer ska sättas till max 11 tecken för ett ID-nummer som en de-facto.

Mitt meddelande blev kanske lite klumpigt nu när jag läser det själv...

Medlem sedan dec. 200012 464 inlägg
#13

Om man i Mysql anger int(11) så påverkar det inte vilka värden som kan lagras. Det går inte att lagra värdet 99999999999 i en kolumn som är definierad som int(11) så du har missförstått det där.

Om man anger int(1) så går det att lagra samma värden som om man angett int(11) så att ange något värde är irrelevant (om man inte använder zerofill) och vilseledande.

Medlem sedan juni 200454 inlägg
#14

LarsG skrev:

Om man i Mysql anger int(11) så påverkar det inte vilka värden som kan lagras. Det går inte att lagra värdet 99999999999 i en kolumn som är definierad som int(11) så du har missförstått det där.

Om man anger int(1) så går det att lagra samma värden som om man angett int(11) så att ange något värde är irrelevant (om man inte använder zerofill) och vilseledande.

Kan du förklara det lite närmre då? Vad står sifforna för?

Medlem sedan juni 200032 967 inlägg
#15

Det finns mycket gottis att läsa på mysql.com, bland annat svaret på din fråga:

Another extension is supported by MySQL for optionally specifying the display width of an integer value in parentheses following the base keyword for the type (for example, INT(4)). This optional display width specification is used to left-pad the display of values having a width less than the width specified for the column.

The display width does not constrain the range of values that can be stored in the column, nor the number of digits that will be displayed for values having a width exceeding that specified for the column.

When used in conjunction with the optional extension attribute ZEROFILL, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(5) ZEROFILL, a value of 4 is retrieved as 00004. Note that if you store larger values than the display width in an integer column, you may experience problems when MySQL generates temporary tables for some complicated joins, because in these cases MySQL trusts that the data did fit into the original column width.

256 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
130 ms — hämta forumlista (db)
117 ms — hämta statistik (db)
136 ms — hämta tråd, inlägg och bilagor (db)