SlideShare una empresa de Scribd logo
1 de 101
Descargar para leer sin conexión
Title




    MySQL Idiosyncrasies
        that BITE
                                   2010.07




Ronald Bradford
http://ronaldbradford.com2010.07
MySQL Idiosyncrasies That BITE -             #mysql @ronaldbradford
Definitions




     idiosyncrasy
     [id-ee-uh-sing-kruh-see, -sin-]
     –noun,plural-sies.


     A characteristic, habit, mannerism, or the
     like, that is peculiar to ...
                                           http;//dictionary.com



MySQL Idiosyncrasies That BITE - 2010.07
Oracle != MySQL




     Age
     Development philosophies
     Target audience
     Developer practices
     Installed versions



MySQL Idiosyncrasies That BITE - 2010.07
RDBMS Characteristics




     Data Integrity
     Transactions
     ACID
     Data Security
     ANSI SQL



MySQL Idiosyncrasies That BITE - 2010.07
These RDBMS characteristics
 are NOT enabled by default
        in MySQL


MySQL Idiosyncrasies That BITE - 2010.07
MySQL Terminology




     Storage Engines
          MyISAM - Default
          InnoDB
     Transactions
          Non Transactional
          Transactional


MySQL Idiosyncrasies That BITE - 2010.07
1. Data Integrity


MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Expected




CREATE TABLE sample_data (
  i TINYINT UNSIGNED NOT NULL,
                                                       ✔
  c CHAR(2) NULL,
  t TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET latin1;
INSERT INTO sample_data(i) VALUES (0), (100), (255);
Query OK, 3 rows affected (0.00 sec)
SELECT * FROM sample_data;
+-----+------+---------------------+
| i   | c    | t                   |
+-----+------+---------------------+
|   0 | NULL | 2010-06-06 13:28:44 |
| 100 | NULL | 2010-06-06 13:28:44 |
| 255 | NULL | 2010-06-06 13:28:44 |
+-----+------+---------------------+
3 rows in set (0.00 sec)



MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Unexpected




                                                      ✘
mysql> INSERT INTO sample_data (i) VALUES (-1), (9000);

mysql> SELECT * FROM sample_data;
+-----+------+---------------------+
| i   | c    | t                   |
+-----+------+---------------------+
|   0 | NULL | 2010-06-06 13:28:44 |
| 100 | NULL | 2010-06-06 13:28:44 |
| 255 | NULL | 2010-06-06 13:28:44 |
|   0 | NULL | 2010-06-06 13:32:52 |
| 255 | NULL | 2010-06-06 13:32:52 |
+-----+------+---------------------+
5 rows in set (0.01 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Unexpected




mysql> INSERT INTO sample_data (i) VALUES (-1), (9000);  ✘
mysql> SELECT * FROM sample_data;
+-----+------+---------------------+
| i   | c    | t                   |
+-----+------+---------------------+
|   0 | NULL | 2010-06-06 13:28:44 |
| 100 | NULL | 2010-06-06 13:28:44 |
| 255 | NULL | 2010-06-06 13:28:44 |
|   0 | NULL | 2010-06-06 13:32:52 |
| 255 | NULL | 2010-06-06 13:32:52 |
+-----+------+---------------------+
5 rows in set (0.01 sec)

                                               TINYINT is 1 byte.
                                              UNSIGNED supports
                                                 values 0-255


MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Warnings




mysql> INSERT INTO sample_data (i) VALUES (-1), (9000);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'i' at row 1 |
| Warning | 1264 | Out of range value for column 'i' at row 2 |
+---------+------+--------------------------------------------+




MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Unexpected (2)




mysql> INSERT INTO sample_data (c)
    -> VALUES ('A'),('BB'),('CCC');
                                                        ✘
mysql> SELECT * FROM sample_data WHERE c IS NOT NULL;
+---+------+---------------------+
| i | c    | t                   |
+---+------+---------------------+
| 0 | A    | 2010-06-06 13:34:59 |
| 0 | BB   | 2010-06-06 13:34:59 |
| 0 | CC   | 2010-06-06 13:34:59 |
+---+------+---------------------+
3 rows in set (0.09 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Warnings (2)




mysql> INSERT INTO sample_data (c) VALUES ('A'),('BB'),('CCC');
Query OK, 3 rows affected, 2 warnings (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 1

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+   Only listed
| Warning | 1364 | Field 'i' doesn't have a default value |
| Warning | 1265 | Data truncated for column 'c' at row 3 |   for 1 row
+---------+------+----------------------------------------+
2 rows in set (0.01 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity with Dates - Warnings




mysql> INSERT INTO sample_date (d) VALUES ('2010-02-31');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
                                                              ✘
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'd' at row 1 |
+---------+------+----------------------------------------+
mysql> SELECT * FROM sample_date;
+------------+
| d          |
+------------+
| 0000-00-00 |
+------------+




MySQL Idiosyncrasies That BITE - 2010.07
SHOW WARNINGS

                                    http://dev.mysql.com/doc/refman/5.1/en/show-warnings.html



MySQL Idiosyncrasies That BITE - 2010.07
Using SQL_MODE for Data Integrity




                                                                              Recommended
                                                                              Configuration
SQL_MODE =
      STRICT_ALL_TABLES;




                                  http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html



MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity - Expected




mysql> SET SESSION SQL_MODE=STRICT_ALL_TABLES;
mysql> TRUNCATE TABLE sample_data;
                                                                 ✔
mysql> INSERT INTO sample_data(i) VALUES (0), (100), (255);

mysql> INSERT INTO sample_data (i) VALUES (-1), (9000);
ERROR 1264 (22003): Out of range value for column 'i' at row 1

mysql> SELECT * FROM sample_data;
+-----+------+---------------------+
| i   | c    | t                   |
+-----+------+---------------------+
|   0 | NULL | 2010-06-06 14:39:48 |
| 100 | NULL | 2010-06-06 14:39:48 |
| 255 | NULL | 2010-06-06 14:39:48 |
+-----+------+---------------------+
3 rows in set (0.00 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity with Dates - Expected




mysql> SET SESSION SQL_MODE=STRICT_ALL_TABLES;
mysql> INSERT INTO sample_date (d) VALUES ('2010-02-31');
ERROR 1292 (22007): Incorrect date value: '2010-02-31' for
                                                             ✔
column 'd' at row 1




MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity with Dates - Unexpected




mysql> INSERT INTO sample_date (d) VALUES ('2010-00-00');
mysql> INSERT INTO sample_date (d) VALUES ('2010-00-05');
                                                            ✘
mysql> INSERT INTO sample_date (d) VALUES ('0000-00-00');

mysql> SELECT * FROM sample_date;
+------------+
| d          |
+------------+
| 2010-00-00 |
| 2010-00-05 |
| 0000-00-00 |
+------------+




MySQL Idiosyncrasies That BITE - 2010.07
Using SQL_MODE for Date Integrity




                                                                              Recommended
                                                                              Configuration
SQL_MODE =
      STRICT_ALL_TABLES,
      NO_ZERO_DATE,
      NO_ZERO_IN_DATE;



                                  http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html



MySQL Idiosyncrasies That BITE - 2010.07
Data Integrity with Dates - Expected




mysql> SET SESSION
SQL_MODE='STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE';
                                                                            ✔
mysql> TRUNCATE TABLE sample_date;

mysql> INSERT INTO sample_date (d)         VALUES ('2010-00-00');
ERROR 1292 (22007): Incorrect date         value: '2010-00-00' for column
'd' at row 1
mysql> INSERT INTO sample_date (d)         VALUES ('2010-00-05');
ERROR 1292 (22007): Incorrect date         value: '2010-00-05' for column
'd' at row 1
mysql> INSERT INTO sample_date (d)         VALUES ('0000-00-00');
ERROR 1292 (22007): Incorrect date         value: '0000-00-00' for column
'd' at row 1
mysql> SELECT * FROM sample_date;
Empty set (0.00 sec)




MySQL Idiosyncrasies That BITE - 2010.07
2. Transactions


MySQL Idiosyncrasies That BITE - 2010.07
Transactions Example - Tables




DROP TABLE IF EXISTS parent;
CREATE TABLE parent (
  id   INT UNSIGNED NOT NULL AUTO_INCREMENT,
  val VARCHAR(10) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (val)
) ENGINE=InnoDB DEFAULT CHARSET latin1;

DROP TABLE IF EXISTS child;
CREATE TABLE child (
  id        INT UNSIGNED NOT NULL AUTO_INCREMENT,
  parent_id INT UNSIGNED NOT NULL,
  created   TIMESTAMP NOT NULL,
PRIMARY KEY (id),
INDEX (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET latin1;



MySQL Idiosyncrasies That BITE - 2010.07
Transactions Example - SQL




START TRANSACTION;
INSERT INTO parent(val) VALUES("a");
INSERT INTO child(parent_id,created)
           VALUES(LAST_INSERT_ID(),NOW());

# Expecting an error with next SQL
INSERT INTO parent(val) VALUES("a");
ROLLBACK;

SELECT * FROM parent;
SELECT * FROM child;




MySQL Idiosyncrasies That BITE - 2010.07
Transactions Example - Expected




...
mysql> INSERT INTO parent (val) VALUES("a");
                                                        ✔
ERROR 1062 (23000): Duplicate entry 'a' for key 'val'

mysql> ROLLBACK;

mysql> SELECT * FROM parent;
Empty set (0.00 sec)

mysql> SELECT * FROM child;
Empty set (0.00 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Transactions Example - Tables




                                               MyISAM is the current
DROP TABLE IF EXISTS parent;                   default if not specified
CREATE TABLE parent (
  id   INT UNSIGNED NOT NULL AUTO_INCREMENT,
  val VARCHAR(10) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (val)
) ENGINE=MyISAM DEFAULT CHARSET latin1;

DROP TABLE IF EXISTS child;
CREATE TABLE child (
  id        INT UNSIGNED NOT NULL AUTO_INCREMENT,
  parent_id INT UNSIGNED NOT NULL,
  created   TIMESTAMP NOT NULL,
PRIMARY KEY (id),
INDEX (parent_id)
) ENGINE=MyISAM DEFAULT CHARSET latin1;



MySQL Idiosyncrasies That BITE - 2010.07
Transactions Example - Unexpected




mysql> INSERT INTO parent (val) VALUES("a");
ERROR 1062 (23000): Duplicate entry 'a' for key 'val'
                                                        ✘
mysql> ROLLBACK;
mysql> SELECT * FROM parent;
+----+-----+
| id | val |
+----+-----+
| 1 | a    |
+----+-----+
1 row in set (0.00 sec)
mysql> SELECT * FROM child;
+----+-----------+---------------------+
| id | parent_id | created             |
+----+-----------+---------------------+
| 1 |          1 | 2010-06-03 13:53:38 |
+----+-----------+---------------------+
1 row in set (0.00 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Transactions Example - Unexpected (2)




mysql> ROLLBACK;
Query OK, 0 rows affected, 1 warning (0.00 sec)
                                                      ✘
mysql> SHOW WARNINGS;
+---------+-------+-------------------------------------
| Level   | Code | Message
|
+---------+------+--------------------------------------
| Warning | 1196 | Some non-transactional changed tables
couldn't be rolled back |
+---------+------+--------------------------------------




MySQL Idiosyncrasies That BITE - 2010.07
Transactions Solution




                                                                                Recommended
       mysql> SET GLOBAL storage_engine=InnoDB;                                 Configuration


       # my.cnf
       [mysqld]
       default-storage-engine=InnoDB

       # NOTE: Requires server restart

       $ /etc/init.d/mysqld stop
       $ /etc/init.d/mysqld start




http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_default-storage-engine



       MySQL Idiosyncrasies That BITE - 2010.07
Why use Non Transactional Tables?




     No transaction overhead
          Much faster
          Less disk writes
          Lower disk space requirements
          Less memory requirements

          http://dev.mysql.com/doc/refman/5.1/en/storage-engine-compare-transactions.html




MySQL Idiosyncrasies That BITE - 2010.07
3. Variable Scope


MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Example




mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL);

mysql> SHOW CREATE TABLE test1G
CREATE TABLE `test1` (
  `id` int(10) unsigned NOT NULL             MyISAM is the current
) ENGINE=MyISAM DEFAULT CHARSET=latin1       default if not specified




MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Example (2)




mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |                             Changing in
+----------------+--------+                           MySQL 5.5
| storage_engine | MyISAM |
+----------------+--------+

mysql> SET GLOBAL storage_engine='InnoDB';
mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+




MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Example (3)




mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine';
+----------------+--------+
                                                       ✘
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+

mysql> DROP TABLE test1;
mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL);

mysql> SHOW CREATE TABLE test1G
CREATE TABLE `test1` (
  `id` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1




MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Example (4)




mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+




MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Example (4)




mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+

mysql> SHOW SESSION VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | MyISAM |
+----------------+--------+




MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Example (4)




mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+

mysql> SHOW SESSION VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | MyISAM |
+----------------+--------+



                                                  MySQL Variables have
                                                      two scopes.
                                                  SESSION & GLOBAL


MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Syntax




     SHOW [GLOBAL | SESSION] VARIABLES;
     SET [GLOBAL | SESSION] variable = value;
     Default is GLOBAL since 5.0.2




                                         http://dev.mysql.com/doc/refman/5.1/en/set-option.html
                                      http://dev.mysql.com/doc/refman/5.1/en/user-variables.html



MySQL Idiosyncrasies That BITE - 2010.07
Variable Scope Precautions




     Persistent connections (e.g. Java)
     Replication SQL_THREAD




                                           Be careful of existing
                                               connections!


MySQL Idiosyncrasies That BITE - 2010.07
4. Storage Engines


MySQL Idiosyncrasies That BITE - 2010.07
Storage Engines Example - Creation




CREATE TABLE test1 (
  id INT UNSIGNED NOT NULL
                                                   ✘
) ENGINE=InnoDB DEFAULT CHARSET latin1;

SHOW CREATE TABLE test1G
*************************** 1. row *************
Table: test1
Create Table: CREATE TABLE `test1` (
  `id` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1




MySQL Idiosyncrasies That BITE - 2010.07
Storage Engines Example - Creation




CREATE TABLE test1 (
  id INT UNSIGNED NOT NULL
                                                          ✘
) ENGINE=InnoDB DEFAULT CHARSET latin1;

SHOW CREATE TABLE test1G
*************************** 1. row *************
Table: test1
Create Table: CREATE TABLE `test1` (
  `id` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1




                                                Even specified the
                                             storage engine reverted
                                                  to the default


MySQL Idiosyncrasies That BITE - 2010.07
Storage Engines Example - Unexpected




CREATE TABLE test1 (
  id INT UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET latin1;
Query OK, 0 rows affected, 2 warnings (0.13 sec)
SHOW WARNINGS;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1286 | Unknown table engine 'InnoDB'                 |
| Warning | 1266 | Using storage engine MyISAM for table 'test1' |
+---------+------+-----------------------------------------------+
2 rows in set (0.00 sec)




MySQL Idiosyncrasies That BITE - 2010.07
Storage Engines Example - Cause




   mysql> SHOW ENGINES;
+------------+---------+-------------------------+--------------+
| Engine     | Support | Comment                  | Transactions |
+------------+---------+-------------------------+--------------+
| InnoDB     | NO       | Supports transaction... | NULL         |
| MEMORY     | YES      | Hash based, stored i... | NO           |
| MyISAM     | DEFAULT | Default engine as ... | NO              |




MySQL Idiosyncrasies That BITE - 2010.07
Storage Engines Example - Unexpected (2)




mysql> CREATE TABLE test1
id INT UNSIGNED NOT NULL
) ENGINE=InnDB DEFAULT CHARSET latin1;
                                                                    ✘
Query OK, 0 rows affected, 2 warnings (0.11 sec)

mysql> SHOW WARNINGS;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1286 | Unknown table engine 'InnDB'                  |
| Warning | 1266 | Using storage engine MyISAM for table 'test1' |
+---------+------+-----------------------------------------------+




                                                       Be careful of spelling
                                                         mistakes as well.


MySQL Idiosyncrasies That BITE - 2010.07
Using SQL_MODE for Storage Engines




                                                                              Recommended
                                                                              Configuration
SQL_MODE =
      STRICT_ALL_TABLES,
      NO_ZERO_DATE,
      NO_ZERO_IN_DATE,
      NO_ENGINE_SUBSTITUTION;

                                  http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html



MySQL Idiosyncrasies That BITE - 2010.07
Storage Engines Example - Solution




SET SESSION SQL_MODE=NO_ENGINE_SUBSTITUTION;        ✔
DROP TABLE IF EXISTS test3;
CREATE TABLE test3 (
  id INT UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET latin1;

ERROR 1286 (42000): Unknown table engine 'InnoDB'




MySQL Idiosyncrasies That BITE - 2010.07
5. ACID


MySQL Idiosyncrasies That BITE - 2010.07
Atomicity -
                      All or nothing


MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Table




DROP TABLE IF EXISTS test1;
CREATE TABLE test1(
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  val CHAR(1) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET latin1;




MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Data




INSERT INTO test1(val)
            VALUES ('a'),('b'),('c'),('d'),('e'),('f'),('g');

mysql> SELECT * FROM test1;
+----+-----+
| id | val |
+----+-----+
| 1 | a    |
| 2 | b    |
| 3 | c    |
| 4 | d    |
| 5 | e    |
| 6 | f    |
| 7 | g    |
+----+-----+
7 rows in set (0.00 sec)

mysql> UPDATE test1 SET id = 10 - id;



MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Unexpected




mysql> UPDATE test1 SET id = 10 - id;
ERROR 1062 (23000): Duplicate entry '7' for key
                                                  ✘
'PRIMARY'
mysql> SELECT * FROM test1;
+----+-----+
| id | val |
+----+-----+
| 9 | a    |
| 8 | b    |
| 3 | c    |
| 4 | d    |
| 5 | e    |
| 6 | f    |
| 7 | g    |
+----+-----+




MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Unexpected (2)




mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
                                           ✘
mysql> SELECT * FROM test1;
+----+-----+
| id | val |
+----+-----+
| 9 | a    |
| 8 | b    |
...




MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Unexpected (2)




mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
                                                        ✘
mysql> SELECT * FROM test1;
+----+-----+
| id | val |
+----+-----+
| 9 | a    |
| 8 | b    |
...




                                           Rollback has no effect
                                           on non transactional
                                                   tables


MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Transactional Table




ALTER TABLE test1 ENGINE=InnoDB;
DELETE FROM test1 WHERE id > 5;
SELECT * FROM test1;
                                           ✘
+----+-----+
| id | val |
+----+-----+
| 3 | c    |
| 4 | d    |
| 5 | e    |
+----+-----+
ROLLBACK;
SELECT * FROM test1;
+----+-----+
| id | val |
+----+-----+
| 3 | c    |
| 4 | d    |
| 5 | e    |
+----+-----+




MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - The culprit




mysql> SHOW GLOBAL VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+




MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - The culprit




mysql> SHOW GLOBAL VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+




                                                 The default for
                                              autocommit is ON.
                                             Great care is needed to
                                               change the default.
MySQL Idiosyncrasies That BITE - 2010.07
Atomicity - Recommendations




                                           Recommended
                                              Practice
     Always wrap SQL in transactions
          START TRANSACTION | BEGIN [WORK]
          COMMIT




MySQL Idiosyncrasies That BITE - 2010.07
Isolation -
     Transactions do not affect
        other transactions


MySQL Idiosyncrasies That BITE - 2010.07
Transaction Isolation - Levels




                                                                           MySQL supports 4
                                                                            isolation levels
       READ-UNCOMMITTED
       READ-COMMITTED
       REPEATABLE-READ
       SERIALIZABLE


                                 http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html
http://ronaldbradford.com/blog/understanding-mysql-innodb-transaction-isolation-2009-09-24/



  MySQL Idiosyncrasies That BITE - 2010.07
Transaction Isolation - Default




     The default is
          REPEATABLE-READ

     SET GLOBAL tx_isolation = 'READ-COMMITTED';


     This is a mistake


               http://ronaldbradford.com/blog/dont-assume-common-terminology-2010-03-03/

MySQL Idiosyncrasies That BITE - 2010.07
Transaction Isolation - Default




     The default is
          REPEATABLE-READ

     SET GLOBAL tx_isolation = 'READ-COMMITTED';


     This is a mistake
                                                                        Common mistake by
                                                                           Oracle DBA's
                                                                         supporting MySQL

               http://ronaldbradford.com/blog/dont-assume-common-terminology-2010-03-03/

MySQL Idiosyncrasies That BITE - 2010.07
Oracle READ COMMITTED
           !=
 MySQL READ-COMMITTED

MySQL Idiosyncrasies That BITE - 2010.07
Transaction Isolation - Binary Logging Errors




SET GLOBAL tx_isolation='READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)
                                                             ✘
mysql> insert into test1 values (1,'x');
ERROR 1598 (HY000): Binary logging not possible.
Message: Transaction level 'READ-COMMITTED' in InnoDB is
not safe for binlog mode 'STATEMENT'




                                                As of 5.1 this requires
                                                further configuration
                                                   considerations



MySQL Idiosyncrasies That BITE - 2010.07
Durability -
                  No committed
               transactions are lost


MySQL Idiosyncrasies That BITE - 2010.07
Data Safety




     MyISAM writes/flushes data every statement
          Does not flush indexes (*)
     InnoDB can relax durability
          flush all transactions per second

     innodb_flush_log_at_trx_commit
     sync_binlog
     innodb_support_xa
MySQL Idiosyncrasies That BITE - 2010.07
Auto Recovery




     InnoDB has it
     MyISAM does not - (*) Indexes


     MYISAM-RECOVER=FORCE,BACKUP
     REPAIR TABLE
     myisamchk


MySQL Idiosyncrasies That BITE - 2010.07
Recovery Time




     InnoDB is consistent
          Redo Log file size
          Slow performance in Undo (*)
     MyISAM grows with data volume




MySQL Idiosyncrasies That BITE - 2010.07
InnoDB Auto Recovery Example




InnoDB: Log scan progressed past the checkpoint lsn 0 188755039
100624 16:37:44 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
                                                                           ✔
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 0 193997824
InnoDB: Doing recovery: scanned up to log sequence number 0 195151897
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 105565 row operations to undo
InnoDB: Trx id counter is 0 18688
100624 16:37:45 InnoDB: Starting an apply batch of log records to the
database...
InnoDB: Progress in percents: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 ... 99
InnoDB: Apply batch completed
InnoDB: Last MySQL binlog file position 0 12051, file name ./binary-log.
000003
InnoDB: Starting in background the rollback of uncommitted transactions
...




MySQL Idiosyncrasies That BITE - 2010.07
MyISAM Repair needed Example




100126 22:44:35 [ERROR] /var/lib/mysql5/bin/mysqld: Table './XXX/
descriptions' is marked as crashed and should be repaired
100126 22:44:35 [Warning] Checking table:   './XXX/descriptions'
                                                                        ✘
100126 22:44:35 [ERROR] /var/lib/mysql5/bin/mysqld: Table './XXX/taggings'
is marked as crashed and should be repaired
100126 22:44:35 [Warning] Checking table:   './XXX/taggings'
100126 22:44:35 [ERROR] /var/lib/mysql5/bin/mysqld: Table './XXX/vehicle'
is marked as crashed and should be repaired




MySQL Idiosyncrasies That BITE - 2010.07
6. Data Security


MySQL Idiosyncrasies That BITE - 2010.07
User Privileges - Practices




Best Practice
CREATE USER goodguy@localhost IDENTIFIED BY 'sakila';
GRANT CREATE,SELECT,INSERT,UPDATE,DELETE ON odtug.* TO
                                                                                                ✔
goodguy@localhost;



Normal Practice
CREATE USER superman@'%';
GRANT ALL ON *.* TO superman@'%';
                                                                                                ✘
                                           http://dev.mysql.com/doc/refman/5.1/en/create-user.html
                                                  http://dev.mysql.com/doc/refman/5.1/en/grant.html


MySQL Idiosyncrasies That BITE - 2010.07
User Privileges - Normal Bad Practice




     GRANT ALL ON *.* TO user@’%’
          *.* gives you access to all tables in all schemas
          @’%’ give you access from any external location
          ALL gives you
          ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY
          TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, FILE,
          INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, RELOAD, REPLICATION
          CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHOW VIEW,
          SHUTDOWN, SUPER, TRIGGER, UPDATE, USAGE



MySQL Idiosyncrasies That BITE - 2010.07
User Privileges - Why SUPER is bad




     SUPER
          Bypasses read_only
          Bypasses init_connect
          Can Disable binary logging
          Change configuration dynamically
          No reserved connection


MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Read Only




$ mysql -ugoodguy -psakila odtug
mysql> insert into test1(id) values(1);
                                                      ✔
ERROR 1290 (HY000): The MySQL server is running with the
--read-only option so it cannot execute this statement




$ mysql -usuperman odtug
mysql> insert into test1(id) values(1);
Query OK, 1 row affected (0.01 sec)
                                                      ✘

MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Read Only




$ mysql -ugoodguy -psakila odtug
mysql> insert into test1(id) values(1);
ERROR 1290 (HY000): The MySQL server is running with the
--read-only option so it cannot execute this statement   ✔

$ mysql -usuperman odtug
mysql> insert into test1(id) values(1);
Query OK, 1 row affected (0.01 sec)
                                                         ✘
                                               Data inconsistency
                                                  now exists


MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Init Connect




                                           Common configuration
#my.cnf                                     practice to support
[client]                                           UTF8
init_connect=SET NAMES utf8


This specifies to use UTF8 for communication with client
and data




MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Init Connect (2)




MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Init Connect (2)




✔
$ mysql -ugoodguy -psakila odtug

mysql> SHOW SESSION VARIABLES LIKE 'ch%';
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| character_set_client     | utf8     |
| character_set_connection | utf8     |
| character_set_database   | latin1   |
| character_set_filesystem | binary   |
| character_set_results    | utf8     |
| character_set_server     | latin1   |
| character_set_system     | utf8     |
+--------------------------+----------+




 MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Init Connect (2)




✔                       $ mysql -usuperman odtug
$ mysql -ugoodguy -psakila odtug
                                                              ✘
                        mysql> SHOW SESSION VARIABLES LIKE
mysql> SHOW SESSION VARIABLES LIKE 'ch%';
                        'character%';
+--------------------------+----------+
                        +--------------------------+----------+
| Variable_name             | Value
                        | Variable_name|           | Value    |
+--------------------------+----------+
                        +--------------------------+----------+
| character_set_client | character_set_client
                            | utf8     |           | latin1   |
| character_set_connection | utf8      |
                        | character_set_connection | latin1   |
| character_set_database character_set_database
                        |   | latin1   |           | latin1   |
| character_set_filesystem | binary    |
                        | character_set_filesystem | binary   |
| character_set_results | character_set_results
                            | utf8     |           | latin1   |
| character_set_server | character_set_server
                            | latin1   |           | latin1   |
| character_set_system | character_set_system
                            | utf8     |           | utf8     |
+--------------------------+----------+
                        +--------------------------+----------+




 MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Init Connect (2)




✔                       $ mysql -usuperman odtug
$ mysql -ugoodguy -psakila odtug
                                                                    ✘
                        mysql> SHOW SESSION VARIABLES LIKE
mysql> SHOW SESSION VARIABLES LIKE 'ch%';
                        'character%';
+--------------------------+----------+
                        +--------------------------+----------+
| Variable_name             | Value
                        | Variable_name|           | Value           |
+--------------------------+----------+
                        +--------------------------+----------+
| character_set_client | character_set_client
                            | utf8     |           | latin1          |
| character_set_connection | utf8      |
                        | character_set_connection | latin1          |
| character_set_database character_set_database
                        |   | latin1   |           | latin1          |
| character_set_filesystem | binary    |
                        | character_set_filesystem | binary          |
| character_set_results | character_set_results
                            | utf8     |           | latin1          |
| character_set_server | character_set_server
                            | latin1   |           | latin1          |
| character_set_system | character_set_system
                            | utf8     |           | utf8            |
+--------------------------+----------+
                        +--------------------------+----------+
                                                 Data integrity can be
                                                    compromised


 MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Binary Log




mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| binary-log.000001 |      354 |              |                  |
+-------------------+----------+--------------+------------------+

mysql> DROP TABLE time_zone_leap_second;
mysql> SET SQL_LOG_BIN=0;
mysql> DROP TABLE time_zone_name;
mysql> SET SQL_LOG_BIN=1;
mysql> DROP TABLE time_zone_transition;
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| binary-log.000001 |      674 |              |                  |
+-------------------+----------+--------------+------------------+




MySQL Idiosyncrasies That BITE - 2010.07
SUPER and Binary Log (2)




$ mysqlbinlog binary-log.000001 --start-position=354 --stop-position=674

# at 354
#100604 18:00:08 server id 1 end_log_pos 450 Query thread_id=1 exec_time=0
error_code=0
use mysql/*!*/;
SET TIMESTAMP=1275688808/*!*/;



                                                                           ✘
DROP TABLE time_zone_leap_second
/*!*/;
# at 579
#100604 18:04:31 server id 1 end_log_pos 674 Query thread_id=2 exec_time=0
error_code=0
use mysql/*!*/;
SET TIMESTAMP=1275689071/*!*/;
DROP TABLE time_zone_transition
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;


                                                            Data auditability is now
                                                                compromised


MySQL Idiosyncrasies That BITE - 2010.07
SUPER and reserved connection




$ mysql -uroot                                              ✔
mysql> show global variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 3     |
+-----------------+-------+
1 row in set (0.07 sec)

mysql> show global status like 'threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 4     |
+-------------------+-------+                    When connected
                                             correctly, 1 connection
                                              is reserved for SUPER

MySQL Idiosyncrasies That BITE - 2010.07
SUPER and reserved connection - Unexpected




$ mysql -uroot
ERROR 1040 (HY000): Too many connections
                                                                                  ✘
mysql> SHOW PROCESSLIST;
+----+------+-----------+-------+---------+------+------------+---------------
| Id | User | Host      | db    | Command | Time | State      | Info
+----+------+-----------+-------+---------+------+------------+---------------
| 13 | root | localhost | odtug | Query   | 144 | User sleep | UPDATE test1 ...
| 14 | root | localhost | odtug | Query   | 116 | Locked      | select * from test1
| 15 | root | localhost | odtug | Query   |   89 | Locked     | select * from test1




                                                                       When application
                                                                      users all use SUPER,
                                                                      administrator can't
                                                                       diagnose problem


MySQL Idiosyncrasies That BITE - 2010.07
7. ANSI SQL


MySQL Idiosyncrasies That BITE - 2010.07
Group By Example




SELECT country, COUNT(*) AS color_count
FROM   flags
GROUP BY country;


                                           ✔
+-----------+-------------+
| country    | color_count |
+-----------+-------------+
| Australia |            3 |
| Canada     |           2 |
| Japan      |           2 |
| Sweden     |           2 |
| USA        |           3 |
+-----------+-------------+


SELECT country, COUNT(*)



                                           ✘
FROM   flags;
+-----------+----------+
| country   | COUNT(*) |
+-----------+----------+
| Australia |       12 |
+-----------+----------+




MySQL Idiosyncrasies That BITE - 2010.07
Group By Example (2)




SET SESSION sql_mode=ONLY_FULL_GROUP_BY;
                                                                                       ✔
SELECT country, COUNT(*)
FROM   flags;

ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
   with no GROUP columns is illegal if there is no GROUP BY clause




                                           http://ExpertPHPandMySQL.com   Chapter 1 - Pg 31



MySQL Idiosyncrasies That BITE - 2010.07
Using SQL_MODE for ANSI SQL




                                           Recommended
                                           Configuration
SQL_MODE =
      STRICT_ALL_TABLES,
      NO_ZERO_DATE,
      NO_ZERO_IN_DATE,
      NO_ENGINE_SUBSTITUTION,
      ONLY_FULL_GROUP_BY;


MySQL Idiosyncrasies That BITE - 2010.07
8. Case Sensitivity


MySQL Idiosyncrasies That BITE - 2010.07
Case Sensitivity String Comparison




  SELECT 'USA' = UPPER('usa');
+----------------------+
| 'USA' = UPPER('usa') |
+----------------------+
|                    1 |
+----------------------+

SELECT 'USA' = 'USA', 'USA' = 'Usa', 'USA' = 'usa',
       'USA' = 'usa' COLLATE latin1_general_cs AS different;
+---------------+---------------+---------------+-----------+
| 'USA' = 'USA' | 'USA' = 'Usa' | 'USA' = 'usa' | different |
+---------------+---------------+---------------+-----------+
|             1 |             1 |             1 |         0 |
+---------------+---------------+---------------+-----------+




SELECT name, address, email
FROM   customer
                                                                         ✘
                                                                 This practice is
WHERE name = UPPER('bradford')
                                                            unnecessary as does not
                                                              utilize index if exists

MySQL Idiosyncrasies That BITE - 2010.07
Case Sensitivity Tables




# Server 1

mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL);
mysql> INSERT INTO test1 VALUES(1);
mysql> INSERT INTO TEST1 VALUES(2);

# Server 2

mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL);
mysql> INSERT INTO test1 VALUES(1);
mysql> INSERT INTO TEST1 VALUES(2);
ERROR 1146 (42S02): Table 'test.TEST1' doesn't exist




MySQL Idiosyncrasies That BITE - 2010.07
Case Sensitivity Tables (2) - Operating Specific Settings




# Server 1 - Mac OS X / Windows Default
mysql> SHOW GLOBAL VARIABLES LIKE 'lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 2     |
+------------------------+-------+

# Server 2 - Linux Default
mysql> SHOW GLOBAL VARIABLES LIKE 'lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+
                                                       Be careful. This default
                                                        varies depending on
                                                         Operating System

MySQL Idiosyncrasies That BITE - 2010.07
Other Gotchas


MySQL Idiosyncrasies That BITE - 2010.07
Other features the BITE




     Character Sets
       Data/Client/Application/Web
     Sub Queries
       Rewrite as JOIN when possible
     Views
       No always efficient
     Cascading Configuration Files
     SQL_MODE's not to use
MySQL Idiosyncrasies That BITE - 2010.07
Conclusion


MySQL Idiosyncrasies That BITE - 2010.07
DON'T
                   ASSUME
MySQL Idiosyncrasies That BITE - 2010.07
Conclusion - The story so far




MySQL Idiosyncrasies that BITE
Definitions, Relational Database [Structure/Requirements], Oracle != MySQL, RDBMS Characteristics,
Data Integrity [Expected | Unexpected | Warnings | Unexpected (2) | Warnings (2) ],
Using SQL_MODE for Data Integrity,
Data Integrity [ Expected ], Data Integrity with Dates [Expected | Unexpected ],
Using SQL_MODE for Date Integrity, Data Integrity with Dates [Expected ],
Transactions Example [ Tables | SQL | Expected | Using MyISAM | Unexpected [ (2)],
Transactions Solution, Why use Non Transactional Tables?
Variable Scope Example [ | (2)| (3)| [4])| Syntax
Storage Engines Example [Creation | Unexpected | Cause | Unexpected (2) ]
Using SQL_MODE for Storage Engines, Storage Engines Example [Solution]
Atomicity [ Table | Data | Unexpected | Unexpected (2) | Transactional Table | The culprit | Recommendations ]
Transaction Isolation [ Levels | Default | Binary Logging ]
Durablilty [ Auto Recovery]
User Privileges [Practices | Normal Bad Practice | Why SUPER is bad ]
SUPER and [ Read Only | Init Connect [(2)] | Binary Log [2] | Reserved Connection [2] ]
Group by Example [2], Using SQL_MODE for ANSI SQL
Case Sensitivity [ String Comparison | Tables [2] ]
More Gotchas, Character Sets, Sub Queries, Views
Conclusion [ DON'T ASSUME | The Story so far | SQL_MODE ] RonaldBradford.com




MySQL Idiosyncrasies That BITE - 2010.07
Conclusion - SQL_MODE




     SQL_MODE =

                                                                                                ✔
     ALLOW_INVALID_DATES, ANSI_QUOTES, ERROR_FOR_DIVISION_ZERO,
     HIGH_NOT_PRECEDENCE,IGNORE_SPACE,NO_AUTO_CREATE_USER,
     NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,
     NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION,
     NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,
     NO_UNSIGNED_SUBTRACTION,NO_ZERO_DATE,
     NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY (5.1.11),
     PAD_CHAR_TO_FULL_LENGTH (5.1.20), PIPES_AS_CONCAT,
     REAL_AS_FLOAT,STRICT_ALL_TABLES, STRICT_TRANS_TABLES
     ANSI, DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE,
     POSTGRESQL,TRADITIONAL
                                  http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html



MySQL Idiosyncrasies That BITE - 2010.07
Conclusion - SQL_MODE




     SQL_MODE =

                                                                                                ✔
     ALLOW_INVALID_DATES, ANSI_QUOTES, ERROR_FOR_DIVISION_ZERO,
     HIGH_NOT_PRECEDENCE,IGNORE_SPACE,NO_AUTO_CREATE_USER,
     NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,
     NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION,
     NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,
     NO_UNSIGNED_SUBTRACTION,NO_ZERO_DATE,
     NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY (5.1.11),
     PAD_CHAR_TO_FULL_LENGTH (5.1.20), PIPES_AS_CONCAT,
     REAL_AS_FLOAT,STRICT_ALL_TABLES, STRICT_TRANS_TABLES
                                                                                                ✘
     ANSI, DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE,
     POSTGRESQL,TRADITIONAL
                                  http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html
                                                                                                ?
MySQL Idiosyncrasies That BITE - 2010.07
RonaldBradford.com

  MySQL4OracleDBA.com


MySQL Idiosyncrasies That BITE - 2010.07

Más contenido relacionado

La actualidad más candente

Mysqlconf2013 mariadb-cassandra-interoperability
Mysqlconf2013 mariadb-cassandra-interoperabilityMysqlconf2013 mariadb-cassandra-interoperability
Mysqlconf2013 mariadb-cassandra-interoperabilitySergey Petrunya
 
Cat database
Cat databaseCat database
Cat databasetubbeles
 
MySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queriesMySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queriesDamien Seguy
 
15 MySQL Basics #burningkeyboards
15 MySQL Basics #burningkeyboards15 MySQL Basics #burningkeyboards
15 MySQL Basics #burningkeyboardsDenis Ristic
 
16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboards16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboardsDenis Ristic
 
Common Table Expressions in MariaDB 10.2
Common Table Expressions in MariaDB 10.2Common Table Expressions in MariaDB 10.2
Common Table Expressions in MariaDB 10.2Sergey Petrunya
 
Introduction To MySQL Lecture 1
Introduction To MySQL Lecture 1Introduction To MySQL Lecture 1
Introduction To MySQL Lecture 1Ajay Khatri
 
Memcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My SqlMemcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My SqlMySQLConference
 
Oracle Diagnostics : Explain Plans (Simple)
Oracle Diagnostics : Explain Plans (Simple)Oracle Diagnostics : Explain Plans (Simple)
Oracle Diagnostics : Explain Plans (Simple)Hemant K Chitale
 
Lecture2 mysql by okello erick
Lecture2 mysql by okello erickLecture2 mysql by okello erick
Lecture2 mysql by okello erickokelloerick
 
MySQL 8 for Developers
MySQL 8 for DevelopersMySQL 8 for Developers
MySQL 8 for DevelopersGeorgi Sotirov
 
Tracking Data Updates in Real-time with Change Data Capture
Tracking Data Updates in Real-time with Change Data CaptureTracking Data Updates in Real-time with Change Data Capture
Tracking Data Updates in Real-time with Change Data CaptureScyllaDB
 
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀EXEM
 
Window functions in MySQL 8.0
Window functions in MySQL 8.0Window functions in MySQL 8.0
Window functions in MySQL 8.0Mydbops
 
Optimizer in oracle 11g by wwf from ebay COC
Optimizer in oracle 11g by wwf from ebay COCOptimizer in oracle 11g by wwf from ebay COC
Optimizer in oracle 11g by wwf from ebay COCLouis liu
 
15 protips for mysql users pfz
15 protips for mysql users   pfz15 protips for mysql users   pfz
15 protips for mysql users pfzJoshua Thijssen
 

La actualidad más candente (20)

Mysqlconf2013 mariadb-cassandra-interoperability
Mysqlconf2013 mariadb-cassandra-interoperabilityMysqlconf2013 mariadb-cassandra-interoperability
Mysqlconf2013 mariadb-cassandra-interoperability
 
Cat database
Cat databaseCat database
Cat database
 
w_dzon05
w_dzon05w_dzon05
w_dzon05
 
MySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queriesMySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queries
 
15 MySQL Basics #burningkeyboards
15 MySQL Basics #burningkeyboards15 MySQL Basics #burningkeyboards
15 MySQL Basics #burningkeyboards
 
Intro to my sql
Intro to my sqlIntro to my sql
Intro to my sql
 
MySQL Functions
MySQL FunctionsMySQL Functions
MySQL Functions
 
16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboards16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboards
 
Common Table Expressions in MariaDB 10.2
Common Table Expressions in MariaDB 10.2Common Table Expressions in MariaDB 10.2
Common Table Expressions in MariaDB 10.2
 
Introduction To MySQL Lecture 1
Introduction To MySQL Lecture 1Introduction To MySQL Lecture 1
Introduction To MySQL Lecture 1
 
Memcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My SqlMemcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My Sql
 
Oracle Diagnostics : Explain Plans (Simple)
Oracle Diagnostics : Explain Plans (Simple)Oracle Diagnostics : Explain Plans (Simple)
Oracle Diagnostics : Explain Plans (Simple)
 
Lecture2 mysql by okello erick
Lecture2 mysql by okello erickLecture2 mysql by okello erick
Lecture2 mysql by okello erick
 
MySQL 8 for Developers
MySQL 8 for DevelopersMySQL 8 for Developers
MySQL 8 for Developers
 
My SQL
My SQLMy SQL
My SQL
 
Tracking Data Updates in Real-time with Change Data Capture
Tracking Data Updates in Real-time with Change Data CaptureTracking Data Updates in Real-time with Change Data Capture
Tracking Data Updates in Real-time with Change Data Capture
 
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
Window functions in MySQL 8.0
Window functions in MySQL 8.0Window functions in MySQL 8.0
Window functions in MySQL 8.0
 
Optimizer in oracle 11g by wwf from ebay COC
Optimizer in oracle 11g by wwf from ebay COCOptimizer in oracle 11g by wwf from ebay COC
Optimizer in oracle 11g by wwf from ebay COC
 
15 protips for mysql users pfz
15 protips for mysql users   pfz15 protips for mysql users   pfz
15 protips for mysql users pfz
 

Destacado

Time sumbangan cikgu roslina bt mat taib sk jerantut
Time sumbangan cikgu roslina bt mat taib sk jerantutTime sumbangan cikgu roslina bt mat taib sk jerantut
Time sumbangan cikgu roslina bt mat taib sk jerantutshare with me
 
Upsr06 paper2 dwibahasa
Upsr06 paper2 dwibahasaUpsr06 paper2 dwibahasa
Upsr06 paper2 dwibahasashare with me
 
Falencias de los gerentes
Falencias de los gerentesFalencias de los gerentes
Falencias de los gerentesoscarreyesnova
 
Revolução na mídia, internet e redes socias - Café na web, dá para comercial...
Revolução na mídia, internet e redes socias  - Café na web, dá para comercial...Revolução na mídia, internet e redes socias  - Café na web, dá para comercial...
Revolução na mídia, internet e redes socias - Café na web, dá para comercial...Paulo Henrique Leme
 
Requisições becre julho 2011
Requisições becre julho 2011Requisições becre julho 2011
Requisições becre julho 2011delfina
 
Hop dong mua ban biet thu sunny (ok)
Hop dong mua ban biet thu sunny (ok)Hop dong mua ban biet thu sunny (ok)
Hop dong mua ban biet thu sunny (ok)RELand.,Ltd
 
The ideal online course
The ideal online course The ideal online course
The ideal online course Telma Martins
 

Destacado (14)

Time sumbangan cikgu roslina bt mat taib sk jerantut
Time sumbangan cikgu roslina bt mat taib sk jerantutTime sumbangan cikgu roslina bt mat taib sk jerantut
Time sumbangan cikgu roslina bt mat taib sk jerantut
 
Marko Lipsonen
Marko LipsonenMarko Lipsonen
Marko Lipsonen
 
Lidu prueba
Lidu pruebaLidu prueba
Lidu prueba
 
Ex algebra (4)
Ex algebra  (4)Ex algebra  (4)
Ex algebra (4)
 
Upsr06 paper2 dwibahasa
Upsr06 paper2 dwibahasaUpsr06 paper2 dwibahasa
Upsr06 paper2 dwibahasa
 
Falencias de los gerentes
Falencias de los gerentesFalencias de los gerentes
Falencias de los gerentes
 
Soloway targeting
Soloway targetingSoloway targeting
Soloway targeting
 
Revolução na mídia, internet e redes socias - Café na web, dá para comercial...
Revolução na mídia, internet e redes socias  - Café na web, dá para comercial...Revolução na mídia, internet e redes socias  - Café na web, dá para comercial...
Revolução na mídia, internet e redes socias - Café na web, dá para comercial...
 
Requisições becre julho 2011
Requisições becre julho 2011Requisições becre julho 2011
Requisições becre julho 2011
 
Usb idazteko plantilla
Usb idazteko plantillaUsb idazteko plantilla
Usb idazteko plantilla
 
iso3
iso3iso3
iso3
 
Baton da morte
Baton da morteBaton da morte
Baton da morte
 
Hop dong mua ban biet thu sunny (ok)
Hop dong mua ban biet thu sunny (ok)Hop dong mua ban biet thu sunny (ok)
Hop dong mua ban biet thu sunny (ok)
 
The ideal online course
The ideal online course The ideal online course
The ideal online course
 

Similar a MySQL Idiosyncrasies That Bite 2010.07

MySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SFMySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SFRonald Bradford
 
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenNETWAYS
 
MySQL Best Practices - OTN
MySQL Best Practices - OTNMySQL Best Practices - OTN
MySQL Best Practices - OTNRonald Bradford
 
Introduction To Lamp P2
Introduction To Lamp P2Introduction To Lamp P2
Introduction To Lamp P2Amzad Hossain
 
MySQL5.7で遊んでみよう
MySQL5.7で遊んでみようMySQL5.7で遊んでみよう
MySQL5.7で遊んでみようyoku0825
 
Fluentd 20150918 no_demo_public
Fluentd 20150918 no_demo_publicFluentd 20150918 no_demo_public
Fluentd 20150918 no_demo_publicSaewoong Lee
 
4. Data Manipulation.ppt
4. Data Manipulation.ppt4. Data Manipulation.ppt
4. Data Manipulation.pptKISHOYIANKISH
 
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)Valeriy Kravchuk
 
Character Encoding - MySQL DevRoom - FOSDEM 2015
Character Encoding - MySQL DevRoom - FOSDEM 2015Character Encoding - MySQL DevRoom - FOSDEM 2015
Character Encoding - MySQL DevRoom - FOSDEM 2015mushupl
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourRonald Bradford
 
MySQL Performance Schema in 20 Minutes
 MySQL Performance Schema in 20 Minutes MySQL Performance Schema in 20 Minutes
MySQL Performance Schema in 20 MinutesSveta Smirnova
 
Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)
Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)
Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)Tesora
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQLJussi Pohjolainen
 
Percona Live 2019 - MySQL Security
Percona Live 2019 - MySQL SecurityPercona Live 2019 - MySQL Security
Percona Live 2019 - MySQL SecurityVinicius M Grippa
 

Similar a MySQL Idiosyncrasies That Bite 2010.07 (20)

MySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SFMySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SF
 
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
 
MySQL Best Practices - OTN
MySQL Best Practices - OTNMySQL Best Practices - OTN
MySQL Best Practices - OTN
 
MySQLinsanity
MySQLinsanityMySQLinsanity
MySQLinsanity
 
Introduction To Lamp P2
Introduction To Lamp P2Introduction To Lamp P2
Introduction To Lamp P2
 
MySQL5.7で遊んでみよう
MySQL5.7で遊んでみようMySQL5.7で遊んでみよう
MySQL5.7で遊んでみよう
 
Fluentd 20150918 no_demo_public
Fluentd 20150918 no_demo_publicFluentd 20150918 no_demo_public
Fluentd 20150918 no_demo_public
 
Tugas praktikum smbd
Tugas praktikum smbdTugas praktikum smbd
Tugas praktikum smbd
 
4. Data Manipulation.ppt
4. Data Manipulation.ppt4. Data Manipulation.ppt
4. Data Manipulation.ppt
 
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
 
Character Encoding - MySQL DevRoom - FOSDEM 2015
Character Encoding - MySQL DevRoom - FOSDEM 2015Character Encoding - MySQL DevRoom - FOSDEM 2015
Character Encoding - MySQL DevRoom - FOSDEM 2015
 
Instalar MySQL CentOS
Instalar MySQL CentOSInstalar MySQL CentOS
Instalar MySQL CentOS
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
 
MySQL Performance Schema in 20 Minutes
 MySQL Performance Schema in 20 Minutes MySQL Performance Schema in 20 Minutes
MySQL Performance Schema in 20 Minutes
 
Mysql56 replication
Mysql56 replicationMysql56 replication
Mysql56 replication
 
Date and time functions in mysql
Date and time functions in mysqlDate and time functions in mysql
Date and time functions in mysql
 
Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)
Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)
Percona Live 4/15/15: Transparent sharding database virtualization engine (DVE)
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQL
 
Percona Live 2019 - MySQL Security
Percona Live 2019 - MySQL SecurityPercona Live 2019 - MySQL Security
Percona Live 2019 - MySQL Security
 
My sql1
My sql1My sql1
My sql1
 

Más de Ronald Bradford

Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Ronald Bradford
 
MySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsMySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsRonald Bradford
 
The History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystemThe History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystemRonald Bradford
 
Lessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS EnvironmentsLessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS EnvironmentsRonald Bradford
 
Monitoring your technology stack with New Relic
Monitoring your technology stack with New RelicMonitoring your technology stack with New Relic
Monitoring your technology stack with New RelicRonald Bradford
 
MySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTNMySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTNRonald Bradford
 
Successful MySQL Scalability
Successful MySQL ScalabilitySuccessful MySQL Scalability
Successful MySQL ScalabilityRonald Bradford
 
Capturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQLCapturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQLRonald Bradford
 
10x Performance Improvements
10x Performance Improvements10x Performance Improvements
10x Performance ImprovementsRonald Bradford
 
LIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBALIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBARonald Bradford
 
IGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBAIGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBARonald Bradford
 
10x Performance Improvements - A Case Study
10x Performance Improvements - A Case Study10x Performance Improvements - A Case Study
10x Performance Improvements - A Case StudyRonald Bradford
 
Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010Ronald Bradford
 
Drizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and EcosystemDrizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and EcosystemRonald Bradford
 
MySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object ManagementMySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object ManagementRonald Bradford
 
Know Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express EditionKnow Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express EditionRonald Bradford
 
MySQL For Oracle DBA's and Developers
MySQL For Oracle DBA's and DevelopersMySQL For Oracle DBA's and Developers
MySQL For Oracle DBA's and DevelopersRonald Bradford
 
MySQL For Oracle Developers
MySQL For Oracle DevelopersMySQL For Oracle Developers
MySQL For Oracle DevelopersRonald Bradford
 
The Ideal Performance Architecture
The Ideal Performance ArchitectureThe Ideal Performance Architecture
The Ideal Performance ArchitectureRonald Bradford
 

Más de Ronald Bradford (20)

Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1
 
MySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsMySQL Backup and Recovery Essentials
MySQL Backup and Recovery Essentials
 
The History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystemThe History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystem
 
Lessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS EnvironmentsLessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS Environments
 
Monitoring your technology stack with New Relic
Monitoring your technology stack with New RelicMonitoring your technology stack with New Relic
Monitoring your technology stack with New Relic
 
MySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTNMySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTN
 
Successful MySQL Scalability
Successful MySQL ScalabilitySuccessful MySQL Scalability
Successful MySQL Scalability
 
Capturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQLCapturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQL
 
10x Performance Improvements
10x Performance Improvements10x Performance Improvements
10x Performance Improvements
 
LIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBALIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBA
 
IGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBAIGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBA
 
10x Performance Improvements - A Case Study
10x Performance Improvements - A Case Study10x Performance Improvements - A Case Study
10x Performance Improvements - A Case Study
 
Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010
 
Drizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and EcosystemDrizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and Ecosystem
 
SQL v No SQL
SQL v No SQLSQL v No SQL
SQL v No SQL
 
MySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object ManagementMySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object Management
 
Know Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express EditionKnow Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express Edition
 
MySQL For Oracle DBA's and Developers
MySQL For Oracle DBA's and DevelopersMySQL For Oracle DBA's and Developers
MySQL For Oracle DBA's and Developers
 
MySQL For Oracle Developers
MySQL For Oracle DevelopersMySQL For Oracle Developers
MySQL For Oracle Developers
 
The Ideal Performance Architecture
The Ideal Performance ArchitectureThe Ideal Performance Architecture
The Ideal Performance Architecture
 

Último

RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIUdaiappa Ramachandran
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum ComputingGDSC PJATK
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceMartin Humpolec
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncObject Automation
 

Último (20)

RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AI
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum Computing
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your Salesforce
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation Inc
 

MySQL Idiosyncrasies That Bite 2010.07

  • 1. Title MySQL Idiosyncrasies that BITE 2010.07 Ronald Bradford http://ronaldbradford.com2010.07 MySQL Idiosyncrasies That BITE - #mysql @ronaldbradford
  • 2. Definitions idiosyncrasy [id-ee-uh-sing-kruh-see, -sin-] –noun,plural-sies. A characteristic, habit, mannerism, or the like, that is peculiar to ... http;//dictionary.com MySQL Idiosyncrasies That BITE - 2010.07
  • 3. Oracle != MySQL Age Development philosophies Target audience Developer practices Installed versions MySQL Idiosyncrasies That BITE - 2010.07
  • 4. RDBMS Characteristics Data Integrity Transactions ACID Data Security ANSI SQL MySQL Idiosyncrasies That BITE - 2010.07
  • 5. These RDBMS characteristics are NOT enabled by default in MySQL MySQL Idiosyncrasies That BITE - 2010.07
  • 6. MySQL Terminology Storage Engines MyISAM - Default InnoDB Transactions Non Transactional Transactional MySQL Idiosyncrasies That BITE - 2010.07
  • 7. 1. Data Integrity MySQL Idiosyncrasies That BITE - 2010.07
  • 8. Data Integrity - Expected CREATE TABLE sample_data ( i TINYINT UNSIGNED NOT NULL, ✔ c CHAR(2) NULL, t TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET latin1; INSERT INTO sample_data(i) VALUES (0), (100), (255); Query OK, 3 rows affected (0.00 sec) SELECT * FROM sample_data; +-----+------+---------------------+ | i | c | t | +-----+------+---------------------+ | 0 | NULL | 2010-06-06 13:28:44 | | 100 | NULL | 2010-06-06 13:28:44 | | 255 | NULL | 2010-06-06 13:28:44 | +-----+------+---------------------+ 3 rows in set (0.00 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 9. Data Integrity - Unexpected ✘ mysql> INSERT INTO sample_data (i) VALUES (-1), (9000); mysql> SELECT * FROM sample_data; +-----+------+---------------------+ | i | c | t | +-----+------+---------------------+ | 0 | NULL | 2010-06-06 13:28:44 | | 100 | NULL | 2010-06-06 13:28:44 | | 255 | NULL | 2010-06-06 13:28:44 | | 0 | NULL | 2010-06-06 13:32:52 | | 255 | NULL | 2010-06-06 13:32:52 | +-----+------+---------------------+ 5 rows in set (0.01 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 10. Data Integrity - Unexpected mysql> INSERT INTO sample_data (i) VALUES (-1), (9000); ✘ mysql> SELECT * FROM sample_data; +-----+------+---------------------+ | i | c | t | +-----+------+---------------------+ | 0 | NULL | 2010-06-06 13:28:44 | | 100 | NULL | 2010-06-06 13:28:44 | | 255 | NULL | 2010-06-06 13:28:44 | | 0 | NULL | 2010-06-06 13:32:52 | | 255 | NULL | 2010-06-06 13:32:52 | +-----+------+---------------------+ 5 rows in set (0.01 sec) TINYINT is 1 byte. UNSIGNED supports values 0-255 MySQL Idiosyncrasies That BITE - 2010.07
  • 11. Data Integrity - Warnings mysql> INSERT INTO sample_data (i) VALUES (-1), (9000); Query OK, 2 rows affected, 2 warnings (0.00 sec) mysql> SHOW WARNINGS; +---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1264 | Out of range value for column 'i' at row 1 | | Warning | 1264 | Out of range value for column 'i' at row 2 | +---------+------+--------------------------------------------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 12. Data Integrity - Unexpected (2) mysql> INSERT INTO sample_data (c) -> VALUES ('A'),('BB'),('CCC'); ✘ mysql> SELECT * FROM sample_data WHERE c IS NOT NULL; +---+------+---------------------+ | i | c | t | +---+------+---------------------+ | 0 | A | 2010-06-06 13:34:59 | | 0 | BB | 2010-06-06 13:34:59 | | 0 | CC | 2010-06-06 13:34:59 | +---+------+---------------------+ 3 rows in set (0.09 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 13. Data Integrity - Warnings (2) mysql> INSERT INTO sample_data (c) VALUES ('A'),('BB'),('CCC'); Query OK, 3 rows affected, 2 warnings (0.00 sec) Records: 3 Duplicates: 0 Warnings: 1 mysql> SHOW WARNINGS; +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ Only listed | Warning | 1364 | Field 'i' doesn't have a default value | | Warning | 1265 | Data truncated for column 'c' at row 3 | for 1 row +---------+------+----------------------------------------+ 2 rows in set (0.01 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 14. Data Integrity with Dates - Warnings mysql> INSERT INTO sample_date (d) VALUES ('2010-02-31'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> SHOW WARNINGS; ✘ +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1265 | Data truncated for column 'd' at row 1 | +---------+------+----------------------------------------+ mysql> SELECT * FROM sample_date; +------------+ | d | +------------+ | 0000-00-00 | +------------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 15. SHOW WARNINGS http://dev.mysql.com/doc/refman/5.1/en/show-warnings.html MySQL Idiosyncrasies That BITE - 2010.07
  • 16. Using SQL_MODE for Data Integrity Recommended Configuration SQL_MODE = STRICT_ALL_TABLES; http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html MySQL Idiosyncrasies That BITE - 2010.07
  • 17. Data Integrity - Expected mysql> SET SESSION SQL_MODE=STRICT_ALL_TABLES; mysql> TRUNCATE TABLE sample_data; ✔ mysql> INSERT INTO sample_data(i) VALUES (0), (100), (255); mysql> INSERT INTO sample_data (i) VALUES (-1), (9000); ERROR 1264 (22003): Out of range value for column 'i' at row 1 mysql> SELECT * FROM sample_data; +-----+------+---------------------+ | i | c | t | +-----+------+---------------------+ | 0 | NULL | 2010-06-06 14:39:48 | | 100 | NULL | 2010-06-06 14:39:48 | | 255 | NULL | 2010-06-06 14:39:48 | +-----+------+---------------------+ 3 rows in set (0.00 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 18. Data Integrity with Dates - Expected mysql> SET SESSION SQL_MODE=STRICT_ALL_TABLES; mysql> INSERT INTO sample_date (d) VALUES ('2010-02-31'); ERROR 1292 (22007): Incorrect date value: '2010-02-31' for ✔ column 'd' at row 1 MySQL Idiosyncrasies That BITE - 2010.07
  • 19. Data Integrity with Dates - Unexpected mysql> INSERT INTO sample_date (d) VALUES ('2010-00-00'); mysql> INSERT INTO sample_date (d) VALUES ('2010-00-05'); ✘ mysql> INSERT INTO sample_date (d) VALUES ('0000-00-00'); mysql> SELECT * FROM sample_date; +------------+ | d | +------------+ | 2010-00-00 | | 2010-00-05 | | 0000-00-00 | +------------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 20. Using SQL_MODE for Date Integrity Recommended Configuration SQL_MODE = STRICT_ALL_TABLES, NO_ZERO_DATE, NO_ZERO_IN_DATE; http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html MySQL Idiosyncrasies That BITE - 2010.07
  • 21. Data Integrity with Dates - Expected mysql> SET SESSION SQL_MODE='STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE'; ✔ mysql> TRUNCATE TABLE sample_date; mysql> INSERT INTO sample_date (d) VALUES ('2010-00-00'); ERROR 1292 (22007): Incorrect date value: '2010-00-00' for column 'd' at row 1 mysql> INSERT INTO sample_date (d) VALUES ('2010-00-05'); ERROR 1292 (22007): Incorrect date value: '2010-00-05' for column 'd' at row 1 mysql> INSERT INTO sample_date (d) VALUES ('0000-00-00'); ERROR 1292 (22007): Incorrect date value: '0000-00-00' for column 'd' at row 1 mysql> SELECT * FROM sample_date; Empty set (0.00 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 23. Transactions Example - Tables DROP TABLE IF EXISTS parent; CREATE TABLE parent ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, val VARCHAR(10) NOT NULL, PRIMARY KEY (id), UNIQUE KEY (val) ) ENGINE=InnoDB DEFAULT CHARSET latin1; DROP TABLE IF EXISTS child; CREATE TABLE child ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, parent_id INT UNSIGNED NOT NULL, created TIMESTAMP NOT NULL, PRIMARY KEY (id), INDEX (parent_id) ) ENGINE=InnoDB DEFAULT CHARSET latin1; MySQL Idiosyncrasies That BITE - 2010.07
  • 24. Transactions Example - SQL START TRANSACTION; INSERT INTO parent(val) VALUES("a"); INSERT INTO child(parent_id,created) VALUES(LAST_INSERT_ID(),NOW()); # Expecting an error with next SQL INSERT INTO parent(val) VALUES("a"); ROLLBACK; SELECT * FROM parent; SELECT * FROM child; MySQL Idiosyncrasies That BITE - 2010.07
  • 25. Transactions Example - Expected ... mysql> INSERT INTO parent (val) VALUES("a"); ✔ ERROR 1062 (23000): Duplicate entry 'a' for key 'val' mysql> ROLLBACK; mysql> SELECT * FROM parent; Empty set (0.00 sec) mysql> SELECT * FROM child; Empty set (0.00 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 26. Transactions Example - Tables MyISAM is the current DROP TABLE IF EXISTS parent; default if not specified CREATE TABLE parent ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, val VARCHAR(10) NOT NULL, PRIMARY KEY (id), UNIQUE KEY (val) ) ENGINE=MyISAM DEFAULT CHARSET latin1; DROP TABLE IF EXISTS child; CREATE TABLE child ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, parent_id INT UNSIGNED NOT NULL, created TIMESTAMP NOT NULL, PRIMARY KEY (id), INDEX (parent_id) ) ENGINE=MyISAM DEFAULT CHARSET latin1; MySQL Idiosyncrasies That BITE - 2010.07
  • 27. Transactions Example - Unexpected mysql> INSERT INTO parent (val) VALUES("a"); ERROR 1062 (23000): Duplicate entry 'a' for key 'val' ✘ mysql> ROLLBACK; mysql> SELECT * FROM parent; +----+-----+ | id | val | +----+-----+ | 1 | a | +----+-----+ 1 row in set (0.00 sec) mysql> SELECT * FROM child; +----+-----------+---------------------+ | id | parent_id | created | +----+-----------+---------------------+ | 1 | 1 | 2010-06-03 13:53:38 | +----+-----------+---------------------+ 1 row in set (0.00 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 28. Transactions Example - Unexpected (2) mysql> ROLLBACK; Query OK, 0 rows affected, 1 warning (0.00 sec) ✘ mysql> SHOW WARNINGS; +---------+-------+------------------------------------- | Level | Code | Message | +---------+------+-------------------------------------- | Warning | 1196 | Some non-transactional changed tables couldn't be rolled back | +---------+------+-------------------------------------- MySQL Idiosyncrasies That BITE - 2010.07
  • 29. Transactions Solution Recommended mysql> SET GLOBAL storage_engine=InnoDB; Configuration # my.cnf [mysqld] default-storage-engine=InnoDB # NOTE: Requires server restart $ /etc/init.d/mysqld stop $ /etc/init.d/mysqld start http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_default-storage-engine MySQL Idiosyncrasies That BITE - 2010.07
  • 30. Why use Non Transactional Tables? No transaction overhead Much faster Less disk writes Lower disk space requirements Less memory requirements http://dev.mysql.com/doc/refman/5.1/en/storage-engine-compare-transactions.html MySQL Idiosyncrasies That BITE - 2010.07
  • 31. 3. Variable Scope MySQL Idiosyncrasies That BITE - 2010.07
  • 32. Variable Scope Example mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL); mysql> SHOW CREATE TABLE test1G CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL MyISAM is the current ) ENGINE=MyISAM DEFAULT CHARSET=latin1 default if not specified MySQL Idiosyncrasies That BITE - 2010.07
  • 33. Variable Scope Example (2) mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | Changing in +----------------+--------+ MySQL 5.5 | storage_engine | MyISAM | +----------------+--------+ mysql> SET GLOBAL storage_engine='InnoDB'; mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 34. Variable Scope Example (3) mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine'; +----------------+--------+ ✘ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ mysql> DROP TABLE test1; mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL); mysql> SHOW CREATE TABLE test1G CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 MySQL Idiosyncrasies That BITE - 2010.07
  • 35. Variable Scope Example (4) mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 36. Variable Scope Example (4) mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ mysql> SHOW SESSION VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | MyISAM | +----------------+--------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 37. Variable Scope Example (4) mysql> SHOW GLOBAL VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ mysql> SHOW SESSION VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | MyISAM | +----------------+--------+ MySQL Variables have two scopes. SESSION & GLOBAL MySQL Idiosyncrasies That BITE - 2010.07
  • 38. Variable Scope Syntax SHOW [GLOBAL | SESSION] VARIABLES; SET [GLOBAL | SESSION] variable = value; Default is GLOBAL since 5.0.2 http://dev.mysql.com/doc/refman/5.1/en/set-option.html http://dev.mysql.com/doc/refman/5.1/en/user-variables.html MySQL Idiosyncrasies That BITE - 2010.07
  • 39. Variable Scope Precautions Persistent connections (e.g. Java) Replication SQL_THREAD Be careful of existing connections! MySQL Idiosyncrasies That BITE - 2010.07
  • 40. 4. Storage Engines MySQL Idiosyncrasies That BITE - 2010.07
  • 41. Storage Engines Example - Creation CREATE TABLE test1 ( id INT UNSIGNED NOT NULL ✘ ) ENGINE=InnoDB DEFAULT CHARSET latin1; SHOW CREATE TABLE test1G *************************** 1. row ************* Table: test1 Create Table: CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 MySQL Idiosyncrasies That BITE - 2010.07
  • 42. Storage Engines Example - Creation CREATE TABLE test1 ( id INT UNSIGNED NOT NULL ✘ ) ENGINE=InnoDB DEFAULT CHARSET latin1; SHOW CREATE TABLE test1G *************************** 1. row ************* Table: test1 Create Table: CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 Even specified the storage engine reverted to the default MySQL Idiosyncrasies That BITE - 2010.07
  • 43. Storage Engines Example - Unexpected CREATE TABLE test1 ( id INT UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET latin1; Query OK, 0 rows affected, 2 warnings (0.13 sec) SHOW WARNINGS; +---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1286 | Unknown table engine 'InnoDB' | | Warning | 1266 | Using storage engine MyISAM for table 'test1' | +---------+------+-----------------------------------------------+ 2 rows in set (0.00 sec) MySQL Idiosyncrasies That BITE - 2010.07
  • 44. Storage Engines Example - Cause mysql> SHOW ENGINES; +------------+---------+-------------------------+--------------+ | Engine | Support | Comment | Transactions | +------------+---------+-------------------------+--------------+ | InnoDB | NO | Supports transaction... | NULL | | MEMORY | YES | Hash based, stored i... | NO | | MyISAM | DEFAULT | Default engine as ... | NO | MySQL Idiosyncrasies That BITE - 2010.07
  • 45. Storage Engines Example - Unexpected (2) mysql> CREATE TABLE test1 id INT UNSIGNED NOT NULL ) ENGINE=InnDB DEFAULT CHARSET latin1; ✘ Query OK, 0 rows affected, 2 warnings (0.11 sec) mysql> SHOW WARNINGS; +---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1286 | Unknown table engine 'InnDB' | | Warning | 1266 | Using storage engine MyISAM for table 'test1' | +---------+------+-----------------------------------------------+ Be careful of spelling mistakes as well. MySQL Idiosyncrasies That BITE - 2010.07
  • 46. Using SQL_MODE for Storage Engines Recommended Configuration SQL_MODE = STRICT_ALL_TABLES, NO_ZERO_DATE, NO_ZERO_IN_DATE, NO_ENGINE_SUBSTITUTION; http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html MySQL Idiosyncrasies That BITE - 2010.07
  • 47. Storage Engines Example - Solution SET SESSION SQL_MODE=NO_ENGINE_SUBSTITUTION; ✔ DROP TABLE IF EXISTS test3; CREATE TABLE test3 ( id INT UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET latin1; ERROR 1286 (42000): Unknown table engine 'InnoDB' MySQL Idiosyncrasies That BITE - 2010.07
  • 48. 5. ACID MySQL Idiosyncrasies That BITE - 2010.07
  • 49. Atomicity - All or nothing MySQL Idiosyncrasies That BITE - 2010.07
  • 50. Atomicity - Table DROP TABLE IF EXISTS test1; CREATE TABLE test1( id INT UNSIGNED NOT NULL AUTO_INCREMENT, val CHAR(1) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET latin1; MySQL Idiosyncrasies That BITE - 2010.07
  • 51. Atomicity - Data INSERT INTO test1(val) VALUES ('a'),('b'),('c'),('d'),('e'),('f'),('g'); mysql> SELECT * FROM test1; +----+-----+ | id | val | +----+-----+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | | 5 | e | | 6 | f | | 7 | g | +----+-----+ 7 rows in set (0.00 sec) mysql> UPDATE test1 SET id = 10 - id; MySQL Idiosyncrasies That BITE - 2010.07
  • 52. Atomicity - Unexpected mysql> UPDATE test1 SET id = 10 - id; ERROR 1062 (23000): Duplicate entry '7' for key ✘ 'PRIMARY' mysql> SELECT * FROM test1; +----+-----+ | id | val | +----+-----+ | 9 | a | | 8 | b | | 3 | c | | 4 | d | | 5 | e | | 6 | f | | 7 | g | +----+-----+ MySQL Idiosyncrasies That BITE - 2010.07
  • 53. Atomicity - Unexpected (2) mysql> ROLLBACK; Query OK, 0 rows affected (0.00 sec) ✘ mysql> SELECT * FROM test1; +----+-----+ | id | val | +----+-----+ | 9 | a | | 8 | b | ... MySQL Idiosyncrasies That BITE - 2010.07
  • 54. Atomicity - Unexpected (2) mysql> ROLLBACK; Query OK, 0 rows affected (0.00 sec) ✘ mysql> SELECT * FROM test1; +----+-----+ | id | val | +----+-----+ | 9 | a | | 8 | b | ... Rollback has no effect on non transactional tables MySQL Idiosyncrasies That BITE - 2010.07
  • 55. Atomicity - Transactional Table ALTER TABLE test1 ENGINE=InnoDB; DELETE FROM test1 WHERE id > 5; SELECT * FROM test1; ✘ +----+-----+ | id | val | +----+-----+ | 3 | c | | 4 | d | | 5 | e | +----+-----+ ROLLBACK; SELECT * FROM test1; +----+-----+ | id | val | +----+-----+ | 3 | c | | 4 | d | | 5 | e | +----+-----+ MySQL Idiosyncrasies That BITE - 2010.07
  • 56. Atomicity - The culprit mysql> SHOW GLOBAL VARIABLES LIKE 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 57. Atomicity - The culprit mysql> SHOW GLOBAL VARIABLES LIKE 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ The default for autocommit is ON. Great care is needed to change the default. MySQL Idiosyncrasies That BITE - 2010.07
  • 58. Atomicity - Recommendations Recommended Practice Always wrap SQL in transactions START TRANSACTION | BEGIN [WORK] COMMIT MySQL Idiosyncrasies That BITE - 2010.07
  • 59. Isolation - Transactions do not affect other transactions MySQL Idiosyncrasies That BITE - 2010.07
  • 60. Transaction Isolation - Levels MySQL supports 4 isolation levels READ-UNCOMMITTED READ-COMMITTED REPEATABLE-READ SERIALIZABLE http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html http://ronaldbradford.com/blog/understanding-mysql-innodb-transaction-isolation-2009-09-24/ MySQL Idiosyncrasies That BITE - 2010.07
  • 61. Transaction Isolation - Default The default is REPEATABLE-READ SET GLOBAL tx_isolation = 'READ-COMMITTED'; This is a mistake http://ronaldbradford.com/blog/dont-assume-common-terminology-2010-03-03/ MySQL Idiosyncrasies That BITE - 2010.07
  • 62. Transaction Isolation - Default The default is REPEATABLE-READ SET GLOBAL tx_isolation = 'READ-COMMITTED'; This is a mistake Common mistake by Oracle DBA's supporting MySQL http://ronaldbradford.com/blog/dont-assume-common-terminology-2010-03-03/ MySQL Idiosyncrasies That BITE - 2010.07
  • 63. Oracle READ COMMITTED != MySQL READ-COMMITTED MySQL Idiosyncrasies That BITE - 2010.07
  • 64. Transaction Isolation - Binary Logging Errors SET GLOBAL tx_isolation='READ-COMMITTED'; Query OK, 0 rows affected (0.00 sec) ✘ mysql> insert into test1 values (1,'x'); ERROR 1598 (HY000): Binary logging not possible. Message: Transaction level 'READ-COMMITTED' in InnoDB is not safe for binlog mode 'STATEMENT' As of 5.1 this requires further configuration considerations MySQL Idiosyncrasies That BITE - 2010.07
  • 65. Durability - No committed transactions are lost MySQL Idiosyncrasies That BITE - 2010.07
  • 66. Data Safety MyISAM writes/flushes data every statement Does not flush indexes (*) InnoDB can relax durability flush all transactions per second innodb_flush_log_at_trx_commit sync_binlog innodb_support_xa MySQL Idiosyncrasies That BITE - 2010.07
  • 67. Auto Recovery InnoDB has it MyISAM does not - (*) Indexes MYISAM-RECOVER=FORCE,BACKUP REPAIR TABLE myisamchk MySQL Idiosyncrasies That BITE - 2010.07
  • 68. Recovery Time InnoDB is consistent Redo Log file size Slow performance in Undo (*) MyISAM grows with data volume MySQL Idiosyncrasies That BITE - 2010.07
  • 69. InnoDB Auto Recovery Example InnoDB: Log scan progressed past the checkpoint lsn 0 188755039 100624 16:37:44 InnoDB: Database was not shut down normally! InnoDB: Starting crash recovery. ✔ InnoDB: Reading tablespace information from the .ibd files... InnoDB: Restoring possible half-written data pages from the doublewrite InnoDB: buffer... InnoDB: Doing recovery: scanned up to log sequence number 0 193997824 InnoDB: Doing recovery: scanned up to log sequence number 0 195151897 InnoDB: 1 transaction(s) which must be rolled back or cleaned up InnoDB: in total 105565 row operations to undo InnoDB: Trx id counter is 0 18688 100624 16:37:45 InnoDB: Starting an apply batch of log records to the database... InnoDB: Progress in percents: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 99 InnoDB: Apply batch completed InnoDB: Last MySQL binlog file position 0 12051, file name ./binary-log. 000003 InnoDB: Starting in background the rollback of uncommitted transactions ... MySQL Idiosyncrasies That BITE - 2010.07
  • 70. MyISAM Repair needed Example 100126 22:44:35 [ERROR] /var/lib/mysql5/bin/mysqld: Table './XXX/ descriptions' is marked as crashed and should be repaired 100126 22:44:35 [Warning] Checking table: './XXX/descriptions' ✘ 100126 22:44:35 [ERROR] /var/lib/mysql5/bin/mysqld: Table './XXX/taggings' is marked as crashed and should be repaired 100126 22:44:35 [Warning] Checking table: './XXX/taggings' 100126 22:44:35 [ERROR] /var/lib/mysql5/bin/mysqld: Table './XXX/vehicle' is marked as crashed and should be repaired MySQL Idiosyncrasies That BITE - 2010.07
  • 71. 6. Data Security MySQL Idiosyncrasies That BITE - 2010.07
  • 72. User Privileges - Practices Best Practice CREATE USER goodguy@localhost IDENTIFIED BY 'sakila'; GRANT CREATE,SELECT,INSERT,UPDATE,DELETE ON odtug.* TO ✔ goodguy@localhost; Normal Practice CREATE USER superman@'%'; GRANT ALL ON *.* TO superman@'%'; ✘ http://dev.mysql.com/doc/refman/5.1/en/create-user.html http://dev.mysql.com/doc/refman/5.1/en/grant.html MySQL Idiosyncrasies That BITE - 2010.07
  • 73. User Privileges - Normal Bad Practice GRANT ALL ON *.* TO user@’%’ *.* gives you access to all tables in all schemas @’%’ give you access from any external location ALL gives you ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, FILE, INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHOW VIEW, SHUTDOWN, SUPER, TRIGGER, UPDATE, USAGE MySQL Idiosyncrasies That BITE - 2010.07
  • 74. User Privileges - Why SUPER is bad SUPER Bypasses read_only Bypasses init_connect Can Disable binary logging Change configuration dynamically No reserved connection MySQL Idiosyncrasies That BITE - 2010.07
  • 75. SUPER and Read Only $ mysql -ugoodguy -psakila odtug mysql> insert into test1(id) values(1); ✔ ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement $ mysql -usuperman odtug mysql> insert into test1(id) values(1); Query OK, 1 row affected (0.01 sec) ✘ MySQL Idiosyncrasies That BITE - 2010.07
  • 76. SUPER and Read Only $ mysql -ugoodguy -psakila odtug mysql> insert into test1(id) values(1); ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement ✔ $ mysql -usuperman odtug mysql> insert into test1(id) values(1); Query OK, 1 row affected (0.01 sec) ✘ Data inconsistency now exists MySQL Idiosyncrasies That BITE - 2010.07
  • 77. SUPER and Init Connect Common configuration #my.cnf practice to support [client] UTF8 init_connect=SET NAMES utf8 This specifies to use UTF8 for communication with client and data MySQL Idiosyncrasies That BITE - 2010.07
  • 78. SUPER and Init Connect (2) MySQL Idiosyncrasies That BITE - 2010.07
  • 79. SUPER and Init Connect (2) ✔ $ mysql -ugoodguy -psakila odtug mysql> SHOW SESSION VARIABLES LIKE 'ch%'; +--------------------------+----------+ | Variable_name | Value | +--------------------------+----------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | +--------------------------+----------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 80. SUPER and Init Connect (2) ✔ $ mysql -usuperman odtug $ mysql -ugoodguy -psakila odtug ✘ mysql> SHOW SESSION VARIABLES LIKE mysql> SHOW SESSION VARIABLES LIKE 'ch%'; 'character%'; +--------------------------+----------+ +--------------------------+----------+ | Variable_name | Value | Variable_name| | Value | +--------------------------+----------+ +--------------------------+----------+ | character_set_client | character_set_client | utf8 | | latin1 | | character_set_connection | utf8 | | character_set_connection | latin1 | | character_set_database character_set_database | | latin1 | | latin1 | | character_set_filesystem | binary | | character_set_filesystem | binary | | character_set_results | character_set_results | utf8 | | latin1 | | character_set_server | character_set_server | latin1 | | latin1 | | character_set_system | character_set_system | utf8 | | utf8 | +--------------------------+----------+ +--------------------------+----------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 81. SUPER and Init Connect (2) ✔ $ mysql -usuperman odtug $ mysql -ugoodguy -psakila odtug ✘ mysql> SHOW SESSION VARIABLES LIKE mysql> SHOW SESSION VARIABLES LIKE 'ch%'; 'character%'; +--------------------------+----------+ +--------------------------+----------+ | Variable_name | Value | Variable_name| | Value | +--------------------------+----------+ +--------------------------+----------+ | character_set_client | character_set_client | utf8 | | latin1 | | character_set_connection | utf8 | | character_set_connection | latin1 | | character_set_database character_set_database | | latin1 | | latin1 | | character_set_filesystem | binary | | character_set_filesystem | binary | | character_set_results | character_set_results | utf8 | | latin1 | | character_set_server | character_set_server | latin1 | | latin1 | | character_set_system | character_set_system | utf8 | | utf8 | +--------------------------+----------+ +--------------------------+----------+ Data integrity can be compromised MySQL Idiosyncrasies That BITE - 2010.07
  • 82. SUPER and Binary Log mysql> SHOW MASTER STATUS; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | binary-log.000001 | 354 | | | +-------------------+----------+--------------+------------------+ mysql> DROP TABLE time_zone_leap_second; mysql> SET SQL_LOG_BIN=0; mysql> DROP TABLE time_zone_name; mysql> SET SQL_LOG_BIN=1; mysql> DROP TABLE time_zone_transition; mysql> SHOW MASTER STATUS; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | binary-log.000001 | 674 | | | +-------------------+----------+--------------+------------------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 83. SUPER and Binary Log (2) $ mysqlbinlog binary-log.000001 --start-position=354 --stop-position=674 # at 354 #100604 18:00:08 server id 1 end_log_pos 450 Query thread_id=1 exec_time=0 error_code=0 use mysql/*!*/; SET TIMESTAMP=1275688808/*!*/; ✘ DROP TABLE time_zone_leap_second /*!*/; # at 579 #100604 18:04:31 server id 1 end_log_pos 674 Query thread_id=2 exec_time=0 error_code=0 use mysql/*!*/; SET TIMESTAMP=1275689071/*!*/; DROP TABLE time_zone_transition /*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; Data auditability is now compromised MySQL Idiosyncrasies That BITE - 2010.07
  • 84. SUPER and reserved connection $ mysql -uroot ✔ mysql> show global variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 3 | +-----------------+-------+ 1 row in set (0.07 sec) mysql> show global status like 'threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 4 | +-------------------+-------+ When connected correctly, 1 connection is reserved for SUPER MySQL Idiosyncrasies That BITE - 2010.07
  • 85. SUPER and reserved connection - Unexpected $ mysql -uroot ERROR 1040 (HY000): Too many connections ✘ mysql> SHOW PROCESSLIST; +----+------+-----------+-------+---------+------+------------+--------------- | Id | User | Host | db | Command | Time | State | Info +----+------+-----------+-------+---------+------+------------+--------------- | 13 | root | localhost | odtug | Query | 144 | User sleep | UPDATE test1 ... | 14 | root | localhost | odtug | Query | 116 | Locked | select * from test1 | 15 | root | localhost | odtug | Query | 89 | Locked | select * from test1 When application users all use SUPER, administrator can't diagnose problem MySQL Idiosyncrasies That BITE - 2010.07
  • 86. 7. ANSI SQL MySQL Idiosyncrasies That BITE - 2010.07
  • 87. Group By Example SELECT country, COUNT(*) AS color_count FROM flags GROUP BY country; ✔ +-----------+-------------+ | country | color_count | +-----------+-------------+ | Australia | 3 | | Canada | 2 | | Japan | 2 | | Sweden | 2 | | USA | 3 | +-----------+-------------+ SELECT country, COUNT(*) ✘ FROM flags; +-----------+----------+ | country | COUNT(*) | +-----------+----------+ | Australia | 12 | +-----------+----------+ MySQL Idiosyncrasies That BITE - 2010.07
  • 88. Group By Example (2) SET SESSION sql_mode=ONLY_FULL_GROUP_BY; ✔ SELECT country, COUNT(*) FROM flags; ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause http://ExpertPHPandMySQL.com Chapter 1 - Pg 31 MySQL Idiosyncrasies That BITE - 2010.07
  • 89. Using SQL_MODE for ANSI SQL Recommended Configuration SQL_MODE = STRICT_ALL_TABLES, NO_ZERO_DATE, NO_ZERO_IN_DATE, NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY; MySQL Idiosyncrasies That BITE - 2010.07
  • 90. 8. Case Sensitivity MySQL Idiosyncrasies That BITE - 2010.07
  • 91. Case Sensitivity String Comparison SELECT 'USA' = UPPER('usa'); +----------------------+ | 'USA' = UPPER('usa') | +----------------------+ | 1 | +----------------------+ SELECT 'USA' = 'USA', 'USA' = 'Usa', 'USA' = 'usa', 'USA' = 'usa' COLLATE latin1_general_cs AS different; +---------------+---------------+---------------+-----------+ | 'USA' = 'USA' | 'USA' = 'Usa' | 'USA' = 'usa' | different | +---------------+---------------+---------------+-----------+ | 1 | 1 | 1 | 0 | +---------------+---------------+---------------+-----------+ SELECT name, address, email FROM customer ✘ This practice is WHERE name = UPPER('bradford') unnecessary as does not utilize index if exists MySQL Idiosyncrasies That BITE - 2010.07
  • 92. Case Sensitivity Tables # Server 1 mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL); mysql> INSERT INTO test1 VALUES(1); mysql> INSERT INTO TEST1 VALUES(2); # Server 2 mysql> CREATE TABLE test1(id INT UNSIGNED NOT NULL); mysql> INSERT INTO test1 VALUES(1); mysql> INSERT INTO TEST1 VALUES(2); ERROR 1146 (42S02): Table 'test.TEST1' doesn't exist MySQL Idiosyncrasies That BITE - 2010.07
  • 93. Case Sensitivity Tables (2) - Operating Specific Settings # Server 1 - Mac OS X / Windows Default mysql> SHOW GLOBAL VARIABLES LIKE 'lower%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | ON | | lower_case_table_names | 2 | +------------------------+-------+ # Server 2 - Linux Default mysql> SHOW GLOBAL VARIABLES LIKE 'lower%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 0 | +------------------------+-------+ Be careful. This default varies depending on Operating System MySQL Idiosyncrasies That BITE - 2010.07
  • 94. Other Gotchas MySQL Idiosyncrasies That BITE - 2010.07
  • 95. Other features the BITE Character Sets Data/Client/Application/Web Sub Queries Rewrite as JOIN when possible Views No always efficient Cascading Configuration Files SQL_MODE's not to use MySQL Idiosyncrasies That BITE - 2010.07
  • 97. DON'T ASSUME MySQL Idiosyncrasies That BITE - 2010.07
  • 98. Conclusion - The story so far MySQL Idiosyncrasies that BITE Definitions, Relational Database [Structure/Requirements], Oracle != MySQL, RDBMS Characteristics, Data Integrity [Expected | Unexpected | Warnings | Unexpected (2) | Warnings (2) ], Using SQL_MODE for Data Integrity, Data Integrity [ Expected ], Data Integrity with Dates [Expected | Unexpected ], Using SQL_MODE for Date Integrity, Data Integrity with Dates [Expected ], Transactions Example [ Tables | SQL | Expected | Using MyISAM | Unexpected [ (2)], Transactions Solution, Why use Non Transactional Tables? Variable Scope Example [ | (2)| (3)| [4])| Syntax Storage Engines Example [Creation | Unexpected | Cause | Unexpected (2) ] Using SQL_MODE for Storage Engines, Storage Engines Example [Solution] Atomicity [ Table | Data | Unexpected | Unexpected (2) | Transactional Table | The culprit | Recommendations ] Transaction Isolation [ Levels | Default | Binary Logging ] Durablilty [ Auto Recovery] User Privileges [Practices | Normal Bad Practice | Why SUPER is bad ] SUPER and [ Read Only | Init Connect [(2)] | Binary Log [2] | Reserved Connection [2] ] Group by Example [2], Using SQL_MODE for ANSI SQL Case Sensitivity [ String Comparison | Tables [2] ] More Gotchas, Character Sets, Sub Queries, Views Conclusion [ DON'T ASSUME | The Story so far | SQL_MODE ] RonaldBradford.com MySQL Idiosyncrasies That BITE - 2010.07
  • 99. Conclusion - SQL_MODE SQL_MODE = ✔ ALLOW_INVALID_DATES, ANSI_QUOTES, ERROR_FOR_DIVISION_ZERO, HIGH_NOT_PRECEDENCE,IGNORE_SPACE,NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES, NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION, NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_UNSIGNED_SUBTRACTION,NO_ZERO_DATE, NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY (5.1.11), PAD_CHAR_TO_FULL_LENGTH (5.1.20), PIPES_AS_CONCAT, REAL_AS_FLOAT,STRICT_ALL_TABLES, STRICT_TRANS_TABLES ANSI, DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL,TRADITIONAL http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html MySQL Idiosyncrasies That BITE - 2010.07
  • 100. Conclusion - SQL_MODE SQL_MODE = ✔ ALLOW_INVALID_DATES, ANSI_QUOTES, ERROR_FOR_DIVISION_ZERO, HIGH_NOT_PRECEDENCE,IGNORE_SPACE,NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES, NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION, NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_UNSIGNED_SUBTRACTION,NO_ZERO_DATE, NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY (5.1.11), PAD_CHAR_TO_FULL_LENGTH (5.1.20), PIPES_AS_CONCAT, REAL_AS_FLOAT,STRICT_ALL_TABLES, STRICT_TRANS_TABLES ✘ ANSI, DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL,TRADITIONAL http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html ? MySQL Idiosyncrasies That BITE - 2010.07
  • 101. RonaldBradford.com MySQL4OracleDBA.com MySQL Idiosyncrasies That BITE - 2010.07