How can differences in Microsoft SQL Server and MySQL affect the syntax of a dynamic query?
Scott Noyes: There is no "TOP" clause in MySQL. Instead, you need to use ORDER BY and LIMIT clauses at the end of the query to return the first few rows from a set:
SELECT * FROM theTable ORDER BY someField LIMIT 5
MySQL offers two types of variables. User variables, prefaced with an '@' symbol, persist beyond the routine. Local variables exist only within the routine. In either case, variable assignments in MySQL stored procedures use the SET or SELECT...INTO statements. Building dynamic queries requires use of a user variable, rather than a local variable, along with the SQL syntax for prepared statements:
SET @statement = CONCAT('SELECT * FROM ', tableNameVariable); PREPARE myStatement FROM @statement; EXECUTE myStatement;
What are some GUIs for MySQL that are similar to Microsoft SQL Server?
Noyes: There are several
What advice do you have for users who are working with MySQL 3.23 or earlier versions?
Noyes: MySQL 3.23 is a very old version; the current recommended release is 5.0. Version 3.23 will still work, but you will miss out on a number of features and bug fixes added in the last few years.
What are some errors that can be avoided in SQL syntax?
Noyes: Like most computer languages, SQL is picky about the characters used for syntax. Sometimes, "smart quotes" are inserted by some word processors. Stick to straight quotes (') around strings and backticks (`) around identifiers (table and column names).
How can users connect to Web pages with MySQL?
Can you suggest a workaround for the lack of automation in timestamping multiple fields for a single table in MySQL?
Noyes: There are a few ways around this limitation. One solution is to forego attempts at automatic timestamps, and explicitly set the time in the data manipulation statements, using the NOW() or CURRENT_DATE() functions:
INSERT INTO table1 (someData, create_time, update_time) VALUES ('someValue', NOW(), NOW()); UPDATE table1 SET someData = 'someOtherValue', update_time = NOW();
A closer step to automation is to define only the update_time as a timestamp, and explicitly set the time during creation:
INSERT INTO table1 (someData, create_time) VALUES ('someValue', NOW()); UPDATE table1 SET someData = 'someOtherValue';
In versions 4.0 and older, the first timestamp field in a table (and only that one!) would automatically update unless given some other value. Starting in version 4.1, you have a great deal more control over which field automatically updates and when.
The closest we can get with MySQL is to build a trigger on the table to automatically populate the fields:
CREATE TRIGGER table1_BI BEFORE INSERT ON table1 FOR EACH ROW NEW.create_time := NOW(), NEW.update_time := NOW(); INSERT INTO table1 (someData) VALUES ('someValue'); UPDATE table1 SET someData = 'someOtherValue';
This article originally appeared on SearchOpenSource.com.