Chris Green writes:
What I have is something like:-
Date Description Amount
10/11/04 Stamps 3.49 10/11/04 Stamps 4.72
... and other similar things. As I said I can delete (say) the 3.49 transaction using my Access forms and it does just delete that transaction and not the 4.72 one as well even though there is no key which will differentiate the two rows.
Ultimately, for Access to delete a single row it needs to know which row it is deleting. I doubt very much that it is looking at the contents, its simply deleting record number X, where X is effectively a primary auto-incrementing key (whether it is shown to you or not).
If you are using Access's forms then it can do all that in the background and never show you, because the information will be held within the form components even if its hidden. In the case of PHP, say, there's nothing hidden; you simply do it yourself.
I think other databases tend to have unique record identifiers built in, as opposed to mySQL's requirement that you create one if you need one, and they might not call it a "primary key", but the concept is the same.
NB: It's quite typical when defining web forms for manipulating the data to hide the primary key from the user in the same way as Access is doing for you. It's just that you don't have the wysiwyg form designer to do the work for you.