These are capabilities found in some other databases but not in MySQL. Such features include triggers, stored procedures, and views. Do these omissions mean that MySQL isn't a "real" database system?
Some people think so, but in response I'll simply observe that the lack of these capabilities in MySQL hasn't stopped large numbers of people from using it. That's probably because for many or most applications, those features don't matter. I should also point out that the set of features missing from MySQL continues to shrink over time.
For the first edition of this book, the list of missing features included transactions, subselects, foreign keys, and referential integrity. A significant amount of progress has been made in improving MySQL since then, and those capabilities all have been added now. Triggers, stored procedures, and views are scheduled for implementation in the future. This section describes the syntax rules for referring to databases, tables, columns, indexes, and aliases. Names are subject to case sensitivity considerations, which are described as well.
Referring to Elements of Databases When you use names to refer to elements of databases, you are constrained by the characters you can use and the length that names can be. The form of names also depends on the context in which you use them. Another factor that affects naming rules is that the server can be started in different naming modes. Legal characters in names. Names can start with any character that is legal in a name, including a digit.
However, a name cannot consist entirely of digits because that would make it indistinguishable from a number. MySQL's support for names that begin with a number is somewhat unusual among database systems. If you use such a name, be particularly careful of names containing an 'E' or 'e' because those characters can lead to ambiguous expressions. Does it mean the same thing, or is it a number in scientific notation?
Aliases can be fairly arbitrary, but you should quote an alias within single or double quotes if it is a SQL keyword, is entirely numeric, or contains spaces or other special characters.
As of MySQL 3. This is useful when a name contains special characters or is a reserved word. Quoting a name also allows it to be entirely numeric, something that is not true of unquoted names. There are also two additional constraints for database and table names, even if you quote them. First, you cannot use the '. The separator characters are disallowed in database and table names because databases are represented on disk by directories, and tables are represented on disk by at least one file.
Consequently, these types of names must not contain characters that are illegal in directory names and filenames. The UNIX pathname separator is disallowed on Windows and vice versa to make it easier to transfer databases and tables between servers running on different platforms.
For example, suppose you were allowed to use a slash in a table name on Windows. That would make it impossible to move the table to UNIX, because filenames on that platform cannot contain slashes. Names for databases, tables, columns, and indexes can be up to 64 characters long. Alias names can be up to characters long. Depending on context, a name may need to be qualified to make it clear what the name refers to.
To refer to a database, just specify its name: First, a fully qualified table name consists of a database name and a table name: If sampdb is the default database, the following statements are equivalent: To refer to a column, there are three choices: The following two queries refer to the same pair of column names, but the context supplied by the FROM clause of each statement indicates from which table to select the columns: If you select a database with a USE statement, that database becomes the default database and is implicit in every unqualified table reference.
If you're using a SELECT statement that refers to only one table, that table is implicit for every column reference in the statement. It's necessary to qualify names only when a table or database cannot be determined from context. Similarly, if a query uses multiple tables and refers to a column name that is present in more than one table, it's necessary to qualify the name with a table name to make it clear which column you mean.
Case Sensitivity in SQL Statements Case sensitivity rules in SQL statements vary for different parts of the statement and also depend on what you referring to and the operating system of the machine on which the server is running: SQL keywords and function names.
Keywords and function names are not case sensitive. They can be given in any lettercase. The following statements are equivalent: Databases and tables in MySQL are implemented using directories and files in the underlying file system on the server host. As a result, case sensitivity of database and table names depends on the way the operating system on that host treats filenames. Windows filenames are not case sensitive, so a server running on Windows does not treat database and table names as case sensitive.
You should consider lettercase issues if you create a database on a server with case-sensitive filenames and you might someday move the database to a server where filenames are not case sensitive.
For example, if you create two tables named abc and ABC on a UNIX server where those names are treated differently, you would have problems moving the tables to a Windows machine; there, abc and ABC would not be distinguishable because names are not case sensitive. One way to avoid having case sensitivity properties become an issue is to pick a given lettercase for example, lowercase and always create databases and tables using names in that lettercase.
Then case of names won't be a problem if you move a database to a different server. Column and index names are not case sensitive in MySQL. The following queries are equivalent: Aliases are case sensitive. You can specify an alias in any lettercase upper, lower, or mixed , but you must refer to it elsewhere in the query using the same case.
Regardless of whether or not a database or table name is case sensitive on your system, you must refer to it using the same lettercase throughout a given query. That is not true for SQL keywords, function names, or column and index names, all of which can be referred to in varying lettercase style throughout a query.