Students in my training classes usually prefer to use some kind of visual editor for MySQL. Typically this would be the software they’re using at work. Sometimes they just bring over their laptops with the software installed. Or they would use MySQL Workbench, which is what I usually have pre-installed on their desktops.
I see MySQL Workbench, SQLyog, Toad for MySQL, or several more.
I always humbly suggest they close down their software and open up a command line.
It isn’t fancy. It may not even be convenient (especially on Windows, in my opinion). And repeating your last command with a minor modification requires a lot of key stroking. Or you would copy+paste from some text editor. Most students will give it a shot, then go back to their favorite editor.
Well, again and again I reach the same conclusion:
Visual editors are not as trustworthy as the command line.
Time and again students show me something on their editor. Behavior seems strange to me. Opening up a console shows a completely different picture.
Things like:
- The visual editor would open a new connection for every new query (oh, so the @user_defined_variable I’ve just assigned turns NULL, or the TEMPORARY TABLE disappears).
- The visual editor will only show 1,000 results, via LIMIT 0,1000. “But the same query runs so much faster on my machine!”. Well, sure, a filesort of 1,000,000 rows that can satisfy the first 1,000 will quit early!
- The visual editor shows table definition graphically. “I didn’t realize the index did(n’t) cover this and that columns. I didn’t realize it only covered first n characters of my VARCHAR.”. That’s because you can’t beat SHOW CREATE TABLE, the definite table structure description.
- The visual editor allows for export/import/copy/transfer of tables and rows with just one click! “Why is it so complicated in the command line to purge 1,000,000 rows from a table?”. Ummm, did you realize the visual editor would typically use a naive approach of doing everything in one huge transaction?
- The visual editor is smart. But sometimes you don’t want smart. You just assume simple. I personally take great precaution with smart solutions. Luckily, with scripts you have so much greater control (i.e. command line options, “dry-run” mode, etc.) that I have greater confidence in them.
I do like it when a visual editor plays it both smart and safe, in such way that before doing its smart work it actually presents you with the query it’s going to issue. Which is why I always considered MySQL Query Browser (now replaced by Workbench) to be the visual editor of choice in my classes.
But, at the end of the day, I strongly believe: if you don’t know how to do it with command line, you can’t really know how it’s done.
@wlad,
point well taken.
Like I said, most students revert back to whatever feels more comfortable to them, and I don’t object.
If my post read to you like “I do not allow use of GUI tools in my classes”, then I have failed to deliver the message properly. It is not as such, but rather “I see importance that students know how to use the command line and that what they get from visual editors may not be consistent with what they get from command line”. And I confess I do encourage them to use the command line, after all.
To the other extreme, I don’t think the learning process should fully comply with whatever students are doing and using. For example, if they all use Windows, that doesn’t mean I shouldn’t be telling them on the advantages of using MySQL on linux. I may just even go as far as suggesting that they should try linux.
I think you have also extra-extrapolated your conclusion about “the dogmatic one true way”. I did *not* say people should not be using visual editors. I *do* say they should be using the command line. To be very verbose: they can do so even while working with their visual editors. I stand by my point: if you don’t know how to do it with command line, you can’t really know how it’s done.
“I don’t know it. It sucks” is truly a bad approach. I do not think I take this approach. Since you do believe I do, allow me to take a few days to reflect upon myself. It is possible others see in me things I do not see in myself (though a bit extreme to diagnose a person from a single blog post), and I will think this over as good measure.
@Shlomi,
There are reasons why GUI tools behave in certain ways. A lot of thought has been put into each of these aspects.
For example, I want to explain why there is a limit of 1000 rows in SQLyog “by default”, as this behavior has been specifically pointed out in your post.
In the command line, it takes a little more effort to look at the contents of a table. At the very minimum, you have to type “select * from “.
In SQLyog, viewing the data is just a single click on the table name. When it is that simple, users have the tendency to click on one table after another in quick succession when they want to “study” a database. They just want to quickly look at a few rows and see what type of data each of these tables contain.
For such use-cases, it would be annoying to bring up all rows of a table if that particular table has thousands of rows. It is just wasteful — both on the client and the server.
Earlier versions of SQLyog didn’t have this “feature” π We built this based on feedback from thousands of SQLyog users.
@Shlomi,
I can understand your concern about using Command Line and other Visual Editors.
Using any Visual Editors definitely you will not be known to syntax for DDL and DML statements.
For student or MySQL trainee one must use command line for basic SQL operations and understanding MYSQL internals i.e. Related to server metadata, user management etc..
Once they gain intermediate knowledge about SQL and MySQL internals.. they can opt for Visual tools using this they will improve productivity and something which is found in Visual tool not in command line (Like LIMIT 1000 and pagination kind of result set) as they already gained enough knowledge to check what queries being executed in background.
Also using Visual tools they can save time for doing tasks such as CREATE TABLE, FK RELATIONSHIP , Build queries, Optimize queries, User Management, Sync Schemas/Data etc.. which can be difficult and time consuming tasks using Command line isn’t it? π
@Rohit,
Thank you. Yes, I agree this is a feature, I didn’t suggest it is a bug. And I realize many users sent you feedback saying “we just want to see a sample of the data”. And you would not be able to load 1,000,000 rows into the GUI widget you are using (who wants to browse through 1,000,000 rows anyway?)
And your tool wants to be smart. Who wants to use a stupid GUI tool? Being smart is important.
Everything that is smart falls into the corner of not satisfying the minority who actually want something else.
I’m suggesting that the command line client, being not-smart, shows the de-facto real picture, and is the place to go to for reference.
@Mahesh,
I agree.