Avatar billede startlinket.dk Nybegynder
01. juli 2002 - 19:00 Der er 31 kommentarer og
4 løsninger

Brug af NULL i INSERT´s?... Hvordan?

Jeg har en tabel hvori jeg auto_increment tildeler hver række et unikt id, til det bruger jeg NULL i min mysql_query, altså sådan:

mysql_query("INSERT INTO ... VALUES ('NULL', ...

Men hvorfor bruger man egentlig NULL? Kan jeg ikke bare lade være med at skrive noget?
Avatar billede tmceu Praktikant
01. juli 2002 - 19:42 #1
Du kan bare udelade auto_increment feltet fra din kolonne og values liste.
Avatar billede startlinket.dk Nybegynder
01. juli 2002 - 19:51 #2
kolonne, hvad mener du?
Kan du komme med et eksempel?
Avatar billede a1a1 Novice
01. juli 2002 - 20:05 #3
jo det kan du?

mysql_query("INSERT INTO table (field1) VALUES ('field value')

så bliver auto indsat "automatisk" :)
Avatar billede a1a1 Novice
01. juli 2002 - 20:05 #4
måske lige huske.... ");

:)
Avatar billede startlinket.dk Nybegynder
01. juli 2002 - 20:14 #5
Det ser da bare ud til at blive en meget længere kode...
Det jeg spørger om er om det er korrekt at bruge NULL og om det i så fald skal quotes.
Og så kunne jeg også godt tænke mig at vide om det overhovedet er nødvendigt at skrive noget dér, for ellers kunne man vel bare skrive ...('', ...
Avatar billede a1a1 Novice
01. juli 2002 - 20:26 #6
det er ikke nødvendigt at specificere ID'et (auto_increment)
(mysql_query("INSERT INTO table (ID,field1) VALUES (NULL,'field value')") )
Avatar billede startlinket.dk Nybegynder
01. juli 2002 - 20:40 #7
Fatter det stadig ikke...
Jeg gør aldrig som I gør, jeg tager hele rækken og fylder ud.
Hvis nogle kolonner ikke skal indeholde noget, så skriver jeg bare ''.
Dvs. sådan her: mysql_query("INSERT INTO x VALUES (NULL, 'Morten Jørgensen', 'admin@startlinket.dk', '')");

Men det jeg så spørger om er jo om jeg overhovedet behøver at skrive NULL i den første, og ikke bare '' isteden?
Jeg ved jo ikke om den vil give et unikt ID alligevel, hvis jeg f.eks. skriver 'HEHE' isteden for NULL...

Er der ingen der kan hjælpe mig da???
Avatar billede terry Ekspert
01. juli 2002 - 22:26 #8
lets say you have a table with two (2) fields, ID (autoincrement) and another field named fld1 (text)

INSERT INTO YourTable (fld1)VALUES ('Some text')

NOTE that I didndt use ID in the fields or values list. You cant if it is autoincrement!
An Autoincrement field is a numeric value which can NOT be 'HEHE'
Avatar billede tipsen Nybegynder
01. juli 2002 - 22:48 #9
Hvis du ikke angiver feltnavne, skal NULL angives og det må ikke quotes!
Avatar billede startlinket.dk Nybegynder
01. juli 2002 - 23:09 #10
terry -> As I said, I don't use such a query-structure...
So I will just use the one, as the example send before.

tipsen -> Altså den måde jeg har forstået det på, er at man ikke behøver sætte den, hvis man gør det på samme måde som tmceu, a1 og terry.
Men da koden på den måde vil blive meget længere, så bruger jeg bare min normale måde, hvilket er sådan:
mysql_query("INSERT INTO x VALUES (NULL, 'Morten Jørgensen', 'admin@startlinket.dk', '')");
Det du så siger er vel at hvis jeg vil gøre det i én lang linie, så SKAL ID jo sættes, hvilket det ikke kan gøres med en tom '', men skal gøres med NULL, som der ikke må quotes.
Er det rigtigt forstået? Og I så fald, så må du godt sende et svar, så du kan få point...
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 01:40 #11
Hallooo... Ville du give mig ret eller ej?
Avatar billede terry Ekspert
02. juli 2002 - 08:20 #12
well if you say that you dont use the syntax I mention and your syntax works then you have no problem do you?
I woulD NOT use NULL if I know it is an autoincrement field so I wouldnt know if it would work but I dont think it will!
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 10:50 #13
It IS working quite good, but I just want to know if it IS the right way to make the it...
Avatar billede terry Ekspert
02. juli 2002 - 10:53 #14
If it works then dont change it!
Avatar billede tipsen Nybegynder
02. juli 2002 - 11:00 #15
startlink: Det er den rigtige måde at gøre det på og du har forstået det korrekt!

NB: Du kan bare give pointene til tmceu og a1 som har besvaret spørgsmålet korrekt!
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 11:07 #16
Okay, så bruger jeg da bare den måde, men står det da nogle steder, f.eks. i MySQL manualen at det skal gøres sådan?
Vil jo heldst ikke komme ud for at der pludselig kommer en ny version af MySQL og uden jeg ved det, så har de fjernet muligheden for at gøre sådan, så den pludselig overskriver alt det andet jeg har...

Og nej, de andre skal vel ikke have points, da det jo var dig der kom med svaret vel?!?...

Så bare kom med et svar og du får pointsne...
Avatar billede terry Ekspert
02. juli 2002 - 13:28 #17
your exepecting a lot for 5(FIVE) points!
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 13:38 #18
Whoops... I thought it would be a fast and simple answer I would get...
Okay, who want points?
Avatar billede proaccess Nybegynder
02. juli 2002 - 14:00 #19
Problemet med din fremgangsmpde, er at hvis du "pludeslig" ændrer design i din tabel... Du kan for eksempel ikke tilføje et nyt felt eller ændre på rækkefølgen af dine felter uden at skulle lave din INSERT om!

Hvis du derimod angav INSERT INTO (...) VALUES (...); så er rækkefølgen på felterne ligegyldig.

Så min 5-point's svar vil være: JO - det er nemt lige nu, men hvordan vil du vedligeholde dit system om 3½ år?
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 14:34 #20
Ja, det ser selvfølgelig rigtig nok, men hvad sker der så med dem som jeg ikke angiver? Bliver de så bare tomme?
Og hvis jeg nu alligevel beholder min egen måde i et lille stykke tid endnu, skal jeg så sætte NULL ind, og ikke bare en tom?
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 14:35 #21
Iøvrigt er den måde som gør gør det på, jo også den måde som webcafe.dk og en masse andre sider siger man skal...
Avatar billede proaccess Nybegynder
02. juli 2002 - 14:36 #22
Du skal tænke på at:
  NULL er en nul-værdi af ukendt datatype
  '' er en tom tekst-værdi
  0 er 0 (tal-værdi)

Men JO, dem du ikke angiver bliver tomme (NULL), med mindre du har angivet en standard-værdi...
Avatar billede proaccess Nybegynder
02. juli 2002 - 14:39 #23
JA, Der er mange, som giver dig ret...  Og hvis de alle foreslog at du skulle springe ud fra Storebæltsbroen ville du også gøre det  ;0)

Nej - forskellen er nok at jeg ser det lidt mere fra database-siden, end webcafe.dk (alene navnet giver visse associationer)...  En ting er web-design noget helt andet er design af databaser...
Avatar billede proaccess Nybegynder
02. juli 2002 - 14:42 #24
Prøv at gennemskue denne om 3½år:

INSERT INTO Brugere (13, 'ProAccess', 34);

Hvad er ID, navn og alder ??

tilsvarende:
INSERT INTO Brugere (ID, Navn, Alder) VALUES (13, 'ProAccess', 34);

Meget bedre at overskue !!  - og vedligeholde !
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 15:00 #25
Ja, jeg kan godt se at det er nemmere at overskue og også hvis man ofte ændrer i ens tabeller.
Men koden bliver jo så bare dobbelt så lang jo...
Men nu tror jeg godt nok aldrig at der vil gå 3½ år mellem jeg koder noget og til jeg ser det...
Jeg retter meget ofte i mine ting og i det hele taget så lærer jeg det hele at kende og sørger for at der ikke er overflødige funktioner.

Men jeg lader bare vær med at quote NULL så.
Jeg kan ikke lige overskue det med point nu, så jeg afsætter bare 20 point, og så får I alle 4 (Som der har svaret) bare 5 point hver.
Avatar billede a1a1 Novice
02. juli 2002 - 18:58 #26
hvad så hvis en anden skulle rette i det (fordi der kom en fejl?)

;)
Avatar billede startlinket.dk Nybegynder
02. juli 2002 - 23:20 #27
Tror aldrig jeg vil komme ud for det... Har jo eksperten.dk...
Avatar billede tmceu Praktikant
03. juli 2002 - 00:15 #28
Nu har jeg desværre været væk nogle timer og er gået glip af hele den væsentlige diskussion om point :-) Jeg fatter simpelt hen ikke kommentarer som "your exepecting a lot for 5(FIVE) points!"
- hvis man mener at antal point er for lidt, så lad dog være med at svare, frem for at fylde spørgsmålene op med meningsløse kommentarer.

Som andre allerede har sagt, vil jeg også mene at "Best Practise" er at angive sine felter eksplicit i INSERT statements og lade constraints og defaults styre resten.

Proaccess' eksempel fra 02/07-2002 14:42:30 siger alt.

Dine kommentarer om at du ikke kan forestille dig nogle ændringer ude i fremtiden du ikke kan overskue, er desværre en typisk reaktion. Forestil dig så i stedet at du får succes som i de gode gamle .com dage, og at din løsning vokser til monster størrelse på rekordtid. Til den tid vil jeg garantere dig, at din effektivitet som udvikler vil falde i samme takt som kurserne en dårlig dag på Nasdaq.
Avatar billede startlinket.dk Nybegynder
03. juli 2002 - 02:03 #29
Som sagt så arbejder jeg hårdt på at have så meget styr over koden som overhovedet muligt og have den så optimere som muligt...
Og ændrer heller ikke i databasen, før jeg har lukket alle systemer ned og er klar over at jeg skal ændre i filerne...
Avatar billede terry Ekspert
03. juli 2002 - 08:06 #30
tmceu>My comment "your exepecting a lot for 5(FIVE) points!" was to indicate to stratlink.dk that I believed he had received the answer he asked for in the c. 15 comment/answeer previouse to that comment. I wasnt expecting ANY extra points be given for this question. So keep YOUR "meningsløse kommentarer" to yourself please!
Avatar billede tmceu Praktikant
03. juli 2002 - 11:05 #31
terry >> nej jeg vil ikke, for jeg mener at din kommentar var unødig og meningsløs og at min er nødvendig for at forklare dig det.

Du har været her længe nok til at vide, at det er normalt at der undervejs i et spørgsmål opstår nye, relaterede spørgsmål. Men pointen er at hvis din primære interesse er point, hvad den åbentbart er, så hold dig dog væk fra spørgsmålet. I dette tilfælde kunne du jo blot have ladet være med at kommentere, når du mener at spørgsmålet er besvaret og at vedkommende ikke kan få mere for sine 5 point.

Hvis andre ikke er lige så fokuserede på point og gerne vil give yderligere forklaring, kan du jo blot lade dem gøre det.
Avatar billede terry Ekspert
03. juli 2002 - 11:38 #32
tmceu>Your obviosuly more inteligent than I am to be able to see that all I am thinking about is scoring points (all 5 of them).
And at the moment your the one making ""meningsløse kommentarer"
Avatar billede tmceu Praktikant
03. juli 2002 - 13:43 #33
terry >> hvis det ikke er for at score point, kan jeg slet ikke se meningen med din kommentar. Jeg vil godt gentage min opfordring om, at hvis du mener at spørgsmålet er besvaret og at spørgeren ikke kan få mere for x point eller du mener at der er afsat for få point, så bliv dog væk fra spørgsmålet og lad andre svare i stedet.

Og blot for at slå fast at dette ikke er et personligt angreb. Jeg mener du kommer med særdeles kompetente svar på mange SQL relaterede spørgsmål, men jeg kan ikke forestille mig, at ret mange er interesseret i at vide hvad du synes om antallet af point.

Men denne diskussion er ved at blive meningsløs, så slut herfra.
Avatar billede terry Ekspert
03. juli 2002 - 14:10 #34
are you telling me that you have NEVER seen comments concerning too few or too little points?
If I was ONLY concerned with 5 (FIVE) points then I wouldnt have answered, but I AM ALLOWED to say enough is enough!
Avatar billede startlinket.dk Nybegynder
03. juli 2002 - 16:13 #35
Jeg forstår ikke rigtig diskutionen... Jeg mener ikke jeg har gjordt noget forkert, jeg startede på 5 point, fordi jeg bare lige ville vide om NULL skulle quotes og om det overhovedet var nødvendigt at skrive det...
Men det blev straks længere, da jeg ikke fik svar på mit spørgsmål før lang tid...

Så synes jeg at I alle skulle have nogle point hver, fordi I gad bruge jeres tid på det.
Jeg burde nok ikke have givet andre end tipsen point, men jeg synes bare ikke jeg havde lyst til at høre jer brokke over det...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester