If you can guarantee that no content will change on the live site while you do the work then that is fine.
This doesn't just include content creation, but also things like users signing up, users commenting or submitting webforms (unless you don't need to keep the webform submissions on your site), users flagging things, or rating things or subscribing to things.
Basically anything an user, admin or not, can do that might change the database in some way.
Or even things that change without user action, like time based events (this is probably less likely).
If you can't be sure of that and you can't afford to lose any data there are other options.
Whether these options are suitable for you also depends on your specific project and what you are actually changing.
- You can try keeping a record of any database changes you make and make them again to the live site when deploying your changes. This method is very error prone and can cause you grief if you are not extremely careful. - Things like views & contexts (and many other things) can be exported and imported, making certain tasks very easy to deploy in this manner. Other things require manually reproducing all the changes. There are other import/export type modules around for things like content types, users, taxonomy, menus etc. that are useful to varying degrees depending on your requirements.
- You can try using modules like features or configuration management, for deploying your database config.
In the end, an exact answer cannot be given for a question like this as it depends on your requirements.