Posted by Sheeri Cabral on Jun 28, 2010
Today at Kaleidoscope I will be doing a 90-minute session comparing MySQL’s SQL syntax to the ANSI/ISO SQL:2003 standard, entitled What Do You Mean, “SQL Syntax Error”?
You can download the PDF slides now.
Read the rest of this entry . . .
Posted by Sheeri Cabral on Jun 25, 2010
MySQL does not follow the ANSI SQL standard for quoting. MySQL’s default quoting behavior is that either single or double quotes can be used to quote a string (this gets me into trouble when I work with Oracle databases, as double quotes do not indicate a string!).
mysql> SELECT 'alive';
+-------+
| alive |
+-------+
| alive |
+-------+
1 row in set (0.00 sec)
mysql> SELECT "alive";
+-------+
| alive |
+-------+
| alive |
+-------+
1 row in set (0.00 sec)
Bare words are dealt with in context; in this case, a bare word would be parsed as a column name:
mysql> SELECT alive;
ERROR 1054 (42S22): Unknown column 'alive' in 'field list'
Backquotes are the way MySQL escapes table names. So, if you want a reserved word, number or operator to be the name of an object (ie, a table named “1″ or a column named “date”) you need to use backquotes to avoid a syntax error….for example:
Read the rest of this entry . . .
Posted by Augusto Bott on Dec 29, 2008
The other day, a client mentioned they were getting strange results when running ALTER TABLE. The episode involved modifying an existing primary key to add an auto_increment primary key: it was “shifting” values. Say what?!
As it turns out, it was a very special value getting changed: zero. Some fiddling revealed the underlying reason. Care to join me?
To understand what’s going on, follow the example below as we start with an empty database, create a table and insert a few rows:
mysql> use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table test_table (id int not null primary key) engine=innodb;
Query OK, 0 rows affected (0.01 sec)
mysql> desc test_table;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> insert into test_table (id) values (1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test_table (id) values (2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test_table (id) values (0);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test_table;
+----+
| id |
+----+
| 0 |
| 1 |
| 2 |
+----+
3 rows in set (0.00 sec)
mysql>
Now let’s change our PK and make it auto_increment Read the rest of this entry . . .