Make it clear that in this answer I'm talking about purely desktop applications. I'm not talking about a client server where the client is an executable to run on the desktop and the database will be on the server for access by multiple clients.
In the client / server scenario the desktop application will be installed separately from the server, so the question would not fit.
The scenario described in the question is for standalone applications, where the database is closely linked to the executable and will only be accessed by it.
MySQL
Without much detail it is not easy to give an accurate answer, but generally speaking it does not pay to use MySQL for a desktop application like that. Then the other questions would not make sense. Of course you have to install it together, but you should not.
- MySQL needs to be installed, a lot of things can go wrong in this process. Not to mention the size that should go next to the application.
- And it has to keep rolling. It takes up a lot of memory. And unsuspecting users can easily compromise their performance when they detect weird things on their computer (it has to run on demand, but it does not help much and can bring other problems).
- It's common to need maintenance, and it's not that simple.
- It's a cannon to kill bird. Much of what it offers is not necessary in this scenario.
- There may be other problems in specific scenarios. For example, there may already be a MySQL on the machine for something else. You would have conflict or need to be prepared to deal with it, which is too much for something that should be simple.
SQLite
SQLite is the default database for desktop (non-server) applications. It can do essentially everything that MySQL can. The difference is that it is not a server (great in this case), and that it can not make a number of really simultaneous writes as large as MySQL, but the difference is not brutal and on the desktop this should not occur, on the contrary probably you will only need to write one at a time.
Information about the additional component that you need to attach to the project for your use can be found at official page of it. You do not need to install it, it happens to be part of the application.
The Nuget packages found on the download page are easier to manipulate.
Contrary to what some people think, SQLite can also be used, and I use it successfully in client / server (you have my answer below showing how), but there may not be the most appropriate solution. See more about its use .
If you have specific questions, ask individual questions.