mariadb/mysql-test/main/function_defaults.result

3148 lines
111 KiB
Text
Raw Normal View History

#
# Test of function defaults for any server, including embedded.
#
#
# Function defaults run 1. No microsecond precision.
#
SET TIME_ZONE = "+00:00";
#
# Test of errors for column data types that don't support function
# defaults.
#
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a BIT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a TINYINT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a SMALLINT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a MEDIUMINT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a INT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a BIGINT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a FLOAT DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a DECIMAL DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a DATE DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a TIME DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a YEAR DEFAULT CURRENT_TIMESTAMP );
CREATE OR REPLACE TABLE t1( a BIT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a TINYINT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a SMALLINT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a MEDIUMINT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a INT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a BIGINT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a FLOAT ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a DECIMAL ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a DATE ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a TIME ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a YEAR ON UPDATE CURRENT_TIMESTAMP );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
drop table if exists t1;
#
# Test that the default clause behaves like NOW() regarding time zones.
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
d TIMESTAMP NULL,
e DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
f DATETIME DEFAULT CURRENT_TIMESTAMP,
g DATETIME ON UPDATE CURRENT_TIMESTAMP,
h DATETIME
);
# 2011-09-27 14:11:08 UTC
SET TIMESTAMP = 1317132668.654321;
SET @old_time_zone = @@TIME_ZONE;
SET TIME_ZONE = "+05:00";
INSERT INTO t1( d, h ) VALUES ( NOW(), NOW() );
SELECT * FROM t1;
a b c d e f g h
2011-09-27 19:11:08 2011-09-27 19:11:08 0000-00-00 00:00:00 2011-09-27 19:11:08 2011-09-27 19:11:08 2011-09-27 19:11:08 NULL 2011-09-27 19:11:08
# 1989-05-13 01:02:03
SET TIMESTAMP = 611017323.543212;
UPDATE t1 SET d = NOW(), h = NOW();
SELECT * FROM t1;
a b c d e f g h
1989-05-13 04:02:03 2011-09-27 19:11:08 1989-05-13 04:02:03 1989-05-13 04:02:03 1989-05-13 04:02:03 2011-09-27 19:11:08 1989-05-13 04:02:03 1989-05-13 04:02:03
SET TIME_ZONE = @old_time_zone;
DROP TABLE t1;
#
# Test of several TIMESTAMP columns with different function defaults.
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
f INT
);
# 2011-04-19 07:22:02 UTC
SET TIMESTAMP = 1303197722.534231;
INSERT INTO t1 ( f ) VALUES (1);
SELECT * FROM t1;
a b c d e f
2011-04-19 07:22:02 2011-04-19 07:22:02 2011-04-19 07:22:02 0000-00-00 00:00:00 0000-00-00 00:00:00 1
# 2011-04-19 07:23:18 UTC
SET TIMESTAMP = 1303197798.132435;
UPDATE t1 SET f = 2;
SELECT * FROM t1;
a b c d e f
2011-04-19 07:23:18 2011-04-19 07:23:18 2011-04-19 07:22:02 2011-04-19 07:23:18 2011-04-19 07:23:18 2
DROP TABLE t1;
#
# Test of inserted values out of order.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NULL,
f DATETIME,
g DATETIME DEFAULT CURRENT_TIMESTAMP,
h DATETIME ON UPDATE CURRENT_TIMESTAMP,
i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
j INT
);
# 2011-04-19 07:22:02 UTC
SET TIMESTAMP = 1303197722.534231;
INSERT INTO t1 ( j, a ) VALUES ( 1, 1 );
SELECT * FROM t1;
a b c d e f g h i j
1 2011-04-19 07:22:02 2011-04-19 07:22:02 0000-00-00 00:00:00 NULL NULL 2011-04-19 07:22:02 NULL 2011-04-19 07:22:02 1
DROP TABLE t1;
#
# Test of ON DUPLICATE KEY UPDATE
#
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
e TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
f TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
g TIMESTAMP NULL,
h DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
i DATETIME DEFAULT CURRENT_TIMESTAMP,
j DATETIME ON UPDATE CURRENT_TIMESTAMP,
k DATETIME NULL,
l DATETIME DEFAULT '1986-09-27 03:00:00.098765'
);
# 1977-12-21 23:00:00 UTC
SET TIMESTAMP = 251593200.192837;
INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
SELECT * FROM t1;
a b c d e f g h i j k l
1 NULL 1977-12-21 23:00:00 1977-12-21 23:00:00 0000-00-00 00:00:00 1986-09-27 03:00:00 NULL 1977-12-21 23:00:00 1977-12-21 23:00:00 NULL NULL 1986-09-27 03:00:00
# 1975-05-21 23:00:00 UTC
SET TIMESTAMP = 169945200.918273;
INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
SELECT * FROM t1;
a b c d e f g h i j k l
1 2 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 1986-09-27 03:00:00 NULL 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 NULL 1986-09-27 03:00:00
# 1973-08-14 09:11:22 UTC
SET TIMESTAMP = 114167482.534231;
INSERT INTO t1(a) VALUES (2) ON DUPLICATE KEY UPDATE b = 2;
SELECT * FROM t1;
a b c d e f g h i j k l
1 2 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 1986-09-27 03:00:00 NULL 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 NULL 1986-09-27 03:00:00
2 NULL 1973-08-14 09:11:22 1973-08-14 09:11:22 0000-00-00 00:00:00 1986-09-27 03:00:00 NULL 1973-08-14 09:11:22 1973-08-14 09:11:22 NULL NULL 1986-09-27 03:00:00
DROP TABLE t1;
CREATE TABLE t1 ( a INT PRIMARY KEY, b INT, c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
# 2011-04-19 07:23:18 UTC
SET TIMESTAMP = 1303197798.945156;
INSERT INTO t1 VALUES
(1, 0, '2001-01-01 01:01:01.111111'),
(2, 0, '2002-02-02 02:02:02.222222'),
(3, 0, '2003-03-03 03:03:03.333333');
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01
2 0 2002-02-02 02:02:02
3 0 2003-03-03 03:03:03
UPDATE t1 SET b = 2, c = c WHERE a = 2;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01
2 2 2002-02-02 02:02:02
3 0 2003-03-03 03:03:03
INSERT INTO t1 (a) VALUES (4);
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01
2 2 2002-02-02 02:02:02
3 0 2003-03-03 03:03:03
4 NULL 2011-04-19 07:23:18
UPDATE t1 SET c = '2004-04-04 04:04:04.444444' WHERE a = 4;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01
2 2 2002-02-02 02:02:02
3 0 2003-03-03 03:03:03
4 NULL 2004-04-04 04:04:04
INSERT INTO t1 ( a ) VALUES ( 3 ), ( 5 ) ON DUPLICATE KEY UPDATE b = 3, c = c;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01
2 2 2002-02-02 02:02:02
3 3 2003-03-03 03:03:03
4 NULL 2004-04-04 04:04:04
5 NULL 2011-04-19 07:23:18
INSERT INTO t1 (a, c) VALUES
(4, '2004-04-04 00:00:00.444444'),
(6, '2006-06-06 06:06:06.666666')
ON DUPLICATE KEY UPDATE b = 4;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01
2 2 2002-02-02 02:02:02
3 3 2003-03-03 03:03:03
4 4 2011-04-19 07:23:18
5 NULL 2011-04-19 07:23:18
6 NULL 2006-06-06 06:06:06
DROP TABLE t1;
#
# Test of REPLACE INTO executed as UPDATE.
#
CREATE TABLE t1 (
a INT PRIMARY KEY,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
e DATETIME DEFAULT CURRENT_TIMESTAMP,
f TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
g DATETIME ON UPDATE CURRENT_TIMESTAMP,
h TIMESTAMP NULL,
i DATETIME
);
# 1970-09-21 09:11:12 UTC
SET TIMESTAMP = 22756272.163584;
REPLACE INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
1 1970-09-21 09:11:12 1970-09-21 09:11:12 1970-09-21 09:11:12 1970-09-21 09:11:12 0000-00-00 00:00:00 NULL NULL NULL
# 1970-11-10 14:16:17 UTC
SET TIMESTAMP = 27094577.852954;
REPLACE INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
1 1970-11-10 14:16:17 1970-11-10 14:16:17 1970-11-10 14:16:17 1970-11-10 14:16:17 0000-00-00 00:00:00 NULL NULL NULL
DROP TABLE t1;
#
# Test of insertion of NULL, DEFAULT and an empty row for DEFAULT
# CURRENT_TIMESTAMP.
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b DATETIME DEFAULT CURRENT_TIMESTAMP,
c INT
);
# 2011-04-20 09:53:41 UTC
SET TIMESTAMP = 1303293221.163578;
INSERT INTO t1 VALUES (NULL, NULL, 1), (DEFAULT, DEFAULT, 2);
INSERT INTO t1 ( a, b, c ) VALUES (NULL, NULL, 3), (DEFAULT, DEFAULT, 4);
SELECT * FROM t1;
a b c
2011-04-20 09:53:41 NULL 1
2011-04-20 09:53:41 2011-04-20 09:53:41 2
2011-04-20 09:53:41 NULL 3
2011-04-20 09:53:41 2011-04-20 09:53:41 4
SET TIME_ZONE = "+03:00";
SELECT * FROM t1;
a b c
2011-04-20 12:53:41 NULL 1
2011-04-20 12:53:41 2011-04-20 09:53:41 2
2011-04-20 12:53:41 NULL 3
2011-04-20 12:53:41 2011-04-20 09:53:41 4
SET TIME_ZONE = "+00:00";
DROP TABLE t1;
# 2011-04-20 07:05:39 UTC
SET TIMESTAMP = 1303283139.195624;
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT '2010-10-11 12:34:56' ON UPDATE CURRENT_TIMESTAMP,
b DATETIME DEFAULT '2010-10-11 12:34:56'
);
INSERT INTO t1 VALUES (NULL, NULL), (DEFAULT, DEFAULT);
INSERT INTO t1 ( a, b ) VALUES (NULL, NULL), (DEFAULT, DEFAULT);
SELECT * FROM t1;
a b
2011-04-20 07:05:39 NULL
2010-10-11 12:34:56 2010-10-11 12:34:56
2011-04-20 07:05:39 NULL
2010-10-11 12:34:56 2010-10-11 12:34:56
DROP TABLE t1;
# 2011-04-20 09:53:41 UTC
SET TIMESTAMP = 1303293221.136952;
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
e TIMESTAMP NULL,
f DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
g DATETIME DEFAULT CURRENT_TIMESTAMP,
h DATETIME ON UPDATE CURRENT_TIMESTAMP,
i DATETIME NULL,
j DATETIME DEFAULT '1986-09-27 03:00:00.098765'
);
INSERT INTO t1 VALUES ();
INSERT INTO t1 SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL;
SELECT * FROM t1;
a b c d e f g h i j
2011-04-20 09:53:41 2011-04-20 09:53:41 0000-00-00 00:00:00 1986-09-27 03:00:00 NULL 2011-04-20 09:53:41 2011-04-20 09:53:41 NULL NULL 1986-09-27 03:00:00
2011-04-20 09:53:41 2011-04-20 09:53:41 2011-04-20 09:53:41 2011-04-20 09:53:41 NULL NULL NULL NULL NULL NULL
DROP TABLE t1;
#
# Test of multiple-table UPDATE for DEFAULT CURRENT_TIMESTAMP
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b DATETIME DEFAULT CURRENT_TIMESTAMP,
c INT
);
INSERT INTO t1 ( c ) VALUES (1);
SELECT * FROM t1;
a b c
2011-04-20 09:53:41 2011-04-20 09:53:41 1
# 2011-04-20 17:06:13 UTC
SET TIMESTAMP = 1303311973.163587;
UPDATE t1 t11, t1 t12 SET t11.c = 1;
SELECT * FROM t1;
a b c
2011-04-20 09:53:41 2011-04-20 09:53:41 1
UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
a b c
2011-04-20 15:06:13 2011-04-20 09:53:41 2
DROP TABLE t1;
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
c DATETIME DEFAULT CURRENT_TIMESTAMP,
d DATETIME ON UPDATE CURRENT_TIMESTAMP,
e INT
);
CREATE TABLE t2 (
f INT,
g DATETIME ON UPDATE CURRENT_TIMESTAMP,
h DATETIME DEFAULT CURRENT_TIMESTAMP,
i TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
j TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
# 1995-03-11 00:02:03 UTC
SET TIMESTAMP = 794880123.195676;
INSERT INTO t1 ( e ) VALUES ( 1 ), ( 2 );
INSERT INTO t2 ( f ) VALUES ( 1 ), ( 2 );
SELECT * FROM t1;
a b c d e
1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03 NULL 1
1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03 NULL 2
SELECT * FROM t2;
f g h i j
1 NULL 1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03
2 NULL 1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03
# 1980-12-13 02:02:01 UTC
SET TIMESTAMP = 345520921.196755;
UPDATE t1, t2 SET t1.e = 3, t2.f = 4;
SELECT * FROM t1;
a b c d e
1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 3
1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 3
SELECT * FROM t2;
f g h i j
4 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03
4 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03
DROP TABLE t1, t2;
#
# Test of multiple table update with temporary table and on the fly.
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
b DATETIME ON UPDATE CURRENT_TIMESTAMP,
c INT,
d INT
);
CREATE TABLE t2 (
a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
b DATETIME ON UPDATE CURRENT_TIMESTAMP,
c INT KEY,
d INT
);
INSERT INTO t1 ( c ) VALUES (1), (2);
INSERT INTO t2 ( c ) VALUES (1), (2);
# Test of multiple table update done on the fly
# 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.194685;
UPDATE t1 JOIN t2 USING ( c ) SET t2.d = 1;
SELECT * FROM t1;
a b c d
0000-00-00 00:00:00 NULL 1 NULL
0000-00-00 00:00:00 NULL 2 NULL
SELECT * FROM t2;
a b c d
2011-04-20 15:06:13 2011-04-20 15:06:13 1 1
2011-04-20 15:06:13 2011-04-20 15:06:13 2 1
# Test of multiple table update done with temporary table.
# 1979-01-15 03:02:01
SET TIMESTAMP = 285213721.134679;
UPDATE t1 JOIN t2 USING ( c ) SET t1.d = 1;
SELECT * FROM t1;
a b c d
1979-01-15 02:02:01 1979-01-15 02:02:01 1 1
1979-01-15 02:02:01 1979-01-15 02:02:01 2 1
SELECT * FROM t2;
a b c d
2011-04-20 15:06:13 2011-04-20 15:06:13 1 1
2011-04-20 15:06:13 2011-04-20 15:06:13 2 1
DROP TABLE t1, t2;
#
# Test of ON UPDATE CURRENT_TIMESTAMP.
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
b DATETIME ON UPDATE CURRENT_TIMESTAMP,
c INT
);
# 2011-04-20 09:53:41 UTC
SET TIMESTAMP = 1303293221.794613;
INSERT INTO t1 ( c ) VALUES ( 1 );
SELECT * FROM t1;
a b c
0000-00-00 00:00:00 NULL 1
UPDATE t1 SET c = 1;
SELECT * FROM t1;
a b c
0000-00-00 00:00:00 NULL 1
UPDATE t1 SET c = 2;
SELECT * FROM t1;
a b c
2011-04-20 09:53:41 2011-04-20 09:53:41 2
#
# Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
#
# 2011-04-20 09:54:13 UTC
SET TIMESTAMP = 1303293253.794613;
UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
SELECT * FROM t1;
a b c
2011-04-20 09:53:41 2011-04-20 09:53:41 2
UPDATE t1 SET c = 3;
SELECT * FROM t1;
a b c
2011-04-20 09:54:13 2011-04-20 09:54:13 3
#
# Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
#
# 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.534231;
UPDATE t1 t11, t1 t12 SET t11.c = 3;
SELECT * FROM t1;
a b c
2011-04-20 09:54:13 2011-04-20 09:54:13 3
UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
a b c
2011-04-20 15:06:13 2011-04-20 15:06:13 2
DROP TABLE t1;
#
# Test of a multiple-table update where only one table is updated and
# the updated table has a primary key.
#
CREATE TABLE t1 ( a INT, b INT, PRIMARY KEY (a) );
INSERT INTO t1 VALUES (1, 1),(2, 2),(3, 3),(4, 4);
CREATE TABLE t2 ( a INT, b INT );
INSERT INTO t2 VALUES (1, 1),(2, 2),(3, 3),(4, 4),(5, 5);
UPDATE t1, t2 SET t1.b = 100 WHERE t1.a = t2.a;
SELECT * FROM t1;
a b
1 100
2 100
3 100
4 100
SELECT * FROM t2;
a b
1 1
2 2
3 3
4 4
5 5
DROP TABLE t1, t2;
#
# Test of ALTER TABLE, reordering columns.
#
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b INT );
ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c TIMESTAMP NULL );
ALTER TABLE t1 MODIFY b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`a` int(11) DEFAULT NULL,
`c` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a INT, b TIMESTAMP NULL );
ALTER TABLE t1 MODIFY b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP NULL );
ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp NULL DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP NULL );
ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp NULL DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(), b INT, c TIMESTAMP NULL );
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`b` int(11) DEFAULT NULL,
`c` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`c` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(), b INT, c TIMESTAMP NULL );
ALTER TABLE t1 MODIFY c TIMESTAMP NULL FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` timestamp NULL DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b INT, c TIMESTAMP NULL );
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`b` int(11) DEFAULT NULL,
`c` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`c` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b INT, c TIMESTAMP NULL );
ALTER TABLE t1 MODIFY c TIMESTAMP NULL FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` timestamp NULL DEFAULT NULL,
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
#
# Test of ALTER TABLE, adding columns.
#
CREATE TABLE t1 ( a INT );
ALTER TABLE t1 ADD COLUMN b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
#
# Test of INSERT SELECT.
#
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
d DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE t2 (
placeholder1 INT,
placeholder2 INT,
placeholder3 INT,
placeholder4 INT,
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
c DATETIME,
d DATETIME
);
# 1977-08-16 15:30:01 UTC
SET TIMESTAMP = 240589801.654312;
INSERT INTO t2 (a, b, c, d) VALUES (
'1977-08-16 15:30:01.123456',
'1977-08-16 15:30:01.234567',
'1977-08-16 15:30:01.345678',
'1977-08-16 15:30:01.456789'
);
# 1986-09-27 01:00:00 UTC
SET TIMESTAMP = 528166800.132435;
INSERT INTO t1 ( a, c ) SELECT a, c FROM t2;
SELECT * FROM t1;
a b c d
1977-08-16 15:30:01 1986-09-27 01:00:00 1977-08-16 15:30:01 1986-09-27 01:00:00
DROP TABLE t1, t2;
#
# Test of CREATE TABLE SELECT.
#
# We test that the columns of the source table are not used to determine
# function defaults for the receiving table.
#
# 1970-04-11 20:13:57 UTC
SET TIMESTAMP = 8712837.657898;
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
e TIMESTAMP NULL,
f DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
g DATETIME DEFAULT CURRENT_TIMESTAMP,
h DATETIME ON UPDATE CURRENT_TIMESTAMP,
i DATETIME NULL,
j DATETIME DEFAULT '1986-09-27 03:00:00.098765'
);
INSERT INTO t1 VALUES ();
# 1971-01-31 21:13:57 UTC
SET TIMESTAMP = 34200837.164937;
CREATE TABLE t2 SELECT a FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t2;
a
1970-04-11 20:13:57
CREATE TABLE t3 SELECT b FROM t1;
SHOW CREATE TABLE t3;
Table Create Table
t3 CREATE TABLE `t3` (
`b` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t3;
b
1970-04-11 20:13:57
CREATE TABLE t4 SELECT c FROM t1;
SHOW CREATE TABLE t4;
Table Create Table
t4 CREATE TABLE `t4` (
`c` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t4;
c
0000-00-00 00:00:00
CREATE TABLE t5 SELECT d FROM t1;
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`d` timestamp NOT NULL DEFAULT '1986-09-27 03:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t5;
d
1986-09-27 03:00:00
CREATE TABLE t6 SELECT e FROM t1;
SHOW CREATE TABLE t6;
Table Create Table
t6 CREATE TABLE `t6` (
`e` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t6;
e
NULL
CREATE TABLE t7 SELECT f FROM t1;
SHOW CREATE TABLE t7;
Table Create Table
t7 CREATE TABLE `t7` (
`f` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t7;
f
1970-04-11 20:13:57
CREATE TABLE t8 SELECT g FROM t1;
SHOW CREATE TABLE t8;
Table Create Table
t8 CREATE TABLE `t8` (
`g` datetime DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t8;
g
1970-04-11 20:13:57
CREATE TABLE t9 SELECT h FROM t1;
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
`h` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t9;
h
NULL
CREATE TABLE t10 SELECT i FROM t1;
SHOW CREATE TABLE t10;
Table Create Table
t10 CREATE TABLE `t10` (
`i` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t10;
i
NULL
CREATE TABLE t11 SELECT j FROM t1;
SHOW CREATE TABLE t11;
Table Create Table
t11 CREATE TABLE `t11` (
`j` datetime DEFAULT '1986-09-27 03:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t11;
j
1986-09-27 03:00:00
CREATE TABLE t12 (
k TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
l TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
m TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
n TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
o TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
p TIMESTAMP NULL,
q DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
r DATETIME DEFAULT CURRENT_TIMESTAMP,
s DATETIME ON UPDATE CURRENT_TIMESTAMP,
t DATETIME NULL,
u DATETIME DEFAULT '1986-09-27 03:00:00.098765'
)
SELECT * FROM t1;
SHOW CREATE TABLE t12;
Table Create Table
t12 CREATE TABLE `t12` (
`k` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`l` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`m` timestamp NOT NULL DEFAULT current_timestamp(),
`n` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`o` timestamp NOT NULL DEFAULT '1986-09-27 03:00:00',
`p` timestamp NULL DEFAULT NULL,
`q` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`r` datetime DEFAULT current_timestamp(),
`s` datetime DEFAULT NULL ON UPDATE current_timestamp(),
`t` datetime DEFAULT NULL,
`u` datetime DEFAULT '1986-09-27 03:00:00',
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`b` timestamp NOT NULL DEFAULT current_timestamp(),
`c` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`d` timestamp NOT NULL DEFAULT '1986-09-27 03:00:00',
`e` timestamp NULL DEFAULT NULL,
`f` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`g` datetime DEFAULT current_timestamp(),
`h` datetime DEFAULT NULL ON UPDATE current_timestamp(),
`i` datetime DEFAULT NULL,
`j` datetime DEFAULT '1986-09-27 03:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12;
# 1970-04-11 20:13:57 UTC
SET TIMESTAMP = 8712837.164953;
CREATE TABLE t1 (
a DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b DATETIME DEFAULT CURRENT_TIMESTAMP,
c DATETIME ON UPDATE CURRENT_TIMESTAMP,
d DATETIME NULL,
e DATETIME DEFAULT '1986-09-27 03:00:00.098765'
);
INSERT INTO t1 VALUES ();
# 1971-01-31 20:13:57 UTC
SET TIMESTAMP = 34200837.915736;
CREATE TABLE t2 SELECT a FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t2;
a
1970-04-11 20:13:57
CREATE TABLE t3 SELECT b FROM t1;
SHOW CREATE TABLE t3;
Table Create Table
t3 CREATE TABLE `t3` (
`b` datetime DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t3;
b
1970-04-11 20:13:57
CREATE TABLE t4 SELECT c FROM t1;
SHOW CREATE TABLE t4;
Table Create Table
t4 CREATE TABLE `t4` (
`c` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t4;
c
NULL
CREATE TABLE t5 SELECT d FROM t1;
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`d` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t5;
d
NULL
CREATE TABLE t6 SELECT e FROM t1;
SHOW CREATE TABLE t6;
Table Create Table
t6 CREATE TABLE `t6` (
`e` datetime DEFAULT '1986-09-27 03:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t6;
e
1986-09-27 03:00:00
DROP TABLE t1, t2, t3, t4, t5, t6;
#
# Test of a CREATE TABLE SELECT that also declared columns. In this case
# the function default should be de-activated during the execution of the
# CREATE TABLE statement.
#
# 1970-01-01 03:16:40
SET TIMESTAMP = 1000.987654;
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES ( 1 ), ( 2 );
CREATE TABLE t2 ( b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) SELECT a FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`b` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SET TIMESTAMP = 2000.876543;
INSERT INTO t2( a ) VALUES ( 3 );
SELECT * FROM t2;
b a
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
1970-01-01 00:16:40 1
1970-01-01 00:16:40 2
1970-01-01 00:33:20 3
DROP TABLE t1, t2;
#
# Test of updating a view.
#
CREATE TABLE t1 ( a INT, b DATETIME DEFAULT CURRENT_TIMESTAMP );
CREATE TABLE t2 ( a INT, b DATETIME ON UPDATE CURRENT_TIMESTAMP );
CREATE VIEW v1 AS SELECT * FROM t1;
SHOW CREATE VIEW v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` latin1 latin1_swedish_ci
CREATE VIEW v2 AS SELECT * FROM t2;
SHOW CREATE VIEW v2;
View Create View character_set_client collation_connection
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a`,`t2`.`b` AS `b` from `t2` latin1 latin1_swedish_ci
# 1971-01-31 21:13:57 UTC
SET TIMESTAMP = 34200837.348564;
INSERT INTO v1 ( a ) VALUES ( 1 );
INSERT INTO v2 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b
1 1971-01-31 20:13:57
SELECT * FROM v1;
a b
1 1971-01-31 20:13:57
SELECT * FROM t2;
a b
1 NULL
SELECT * FROM v2;
a b
1 NULL
# 1970-04-11 20:13:57 UTC
SET TIMESTAMP = 8712837.567332;
UPDATE v1 SET a = 2;
UPDATE v2 SET a = 2;
SELECT * FROM t1;
a b
2 1971-01-31 20:13:57
SELECT * FROM v1;
a b
2 1971-01-31 20:13:57
SELECT * FROM t2;
a b
2 1970-04-11 20:13:57
SELECT * FROM v2;
a b
2 1970-04-11 20:13:57
DROP VIEW v1, v2;
DROP TABLE t1, t2;
#
# Test with stored procedures.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NULL,
f DATETIME DEFAULT CURRENT_TIMESTAMP,
g DATETIME ON UPDATE CURRENT_TIMESTAMP
);
CREATE PROCEDURE p1() INSERT INTO test.t1( a ) VALUES ( 1 );
CREATE PROCEDURE p2() UPDATE t1 SET a = 2 WHERE a = 1;
# 1971-01-31 20:13:57 UTC
SET TIMESTAMP = 34200837.876544;
CALL p1();
SELECT * FROM t1;
a b c d e f g
1 1971-01-31 20:13:57 1971-01-31 20:13:57 0000-00-00 00:00:00 NULL 1971-01-31 20:13:57 NULL
# 1970-04-11 21:13:57 UTC
SET TIMESTAMP = 8712837.143546;
CALL p2();
SELECT * FROM t1;
a b c d e f g
2 1970-04-11 20:13:57 1971-01-31 20:13:57 1970-04-11 20:13:57 NULL 1971-01-31 20:13:57 1970-04-11 20:13:57
DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP TABLE t1;
#
# Test with triggers.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NULL,
f DATETIME,
g DATETIME DEFAULT CURRENT_TIMESTAMP,
h DATETIME ON UPDATE CURRENT_TIMESTAMP,
i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE t2 ( a INT );
CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
BEGIN
INSERT INTO t1 ( a ) VALUES ( 1 );
END|
# 1971-01-31 21:13:57 UTC
SET TIMESTAMP = 34200837.978675;
INSERT INTO t2 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
1 1971-01-31 20:13:57 1971-01-31 20:13:57 0000-00-00 00:00:00 NULL NULL 1971-01-31 20:13:57 NULL 1971-01-31 20:13:57
DROP TRIGGER t2_trg;
CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
BEGIN
UPDATE t1 SET a = 2;
END|
# 1970-04-11 21:13:57 UTC
SET TIMESTAMP = 8712837.456789;
INSERT INTO t2 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
2 1970-04-11 20:13:57 1971-01-31 20:13:57 1970-04-11 20:13:57 NULL NULL 1971-01-31 20:13:57 1970-04-11 20:13:57 1970-04-11 20:13:57
DROP TABLE t1, t2;
#
# Test where the assignment target is not a column.
#
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
CREATE TABLE t2 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
CREATE TABLE t3 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP );
CREATE TABLE t4 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP );
CREATE VIEW v1 AS SELECT a COLLATE latin1_german1_ci AS b FROM t1;
CREATE VIEW v2 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t2;
CREATE VIEW v3 AS SELECT a COLLATE latin1_german1_ci AS b FROM t3;
CREATE VIEW v4 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t4;
INSERT INTO v1 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
SELECT a FROM t1;
a
2007-10-24 00:03:34
INSERT INTO v2 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
SELECT a FROM t2;
a
2007-10-24 00:03:34
INSERT INTO t3 VALUES ();
UPDATE v3 SET b = '2007-10-24 00:03:34.010203';
SELECT a FROM t3;
a
2007-10-24 00:03:34
INSERT INTO t4 VALUES ();
UPDATE v4 SET b = '2007-10-24 00:03:34.010203';
SELECT a FROM t4;
a
2007-10-24 00:03:34
DROP VIEW v1, v2, v3, v4;
DROP TABLE t1, t2, t3, t4;
#
# Test of LOAD DATA/XML INFILE
# This tests behavior of function defaults for TIMESTAMP and DATETIME
# columns. during LOAD ... INFILE.
# As can be seen here, a TIMESTAMP column with only ON UPDATE
# CURRENT_TIMESTAMP will still have CURRENT_TIMESTAMP inserted on LOAD
# ... INFILE if the value is missing. For DATETIME columns a NULL value
# is inserted instead.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
f DATETIME,
g DATETIME DEFAULT CURRENT_TIMESTAMP,
h DATETIME ON UPDATE CURRENT_TIMESTAMP,
i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE t2 (
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
e DATETIME NOT NULL,
f DATETIME NOT NULL DEFAULT '1977-01-02 12:13:14',
g DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
h DATETIME ON UPDATE CURRENT_TIMESTAMP NOT NULL,
i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
);
SELECT 1 INTO OUTFILE 't3.dat' FROM dual;
SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
INTO OUTFILE 't4.dat'
FROM dual;
SELECT 1, 2 INTO OUTFILE 't5.dat' FROM dual;
# Mon Aug 1 15:11:19 2011 UTC
SET TIMESTAMP = 1312211479.918273;
LOAD DATA INFILE 't3.dat' IGNORE INTO TABLE t1;
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
SELECT * FROM t1;
a 1
b 2011-08-01 15:11:19
c 2011-08-01 15:11:19
d 2011-08-01 15:11:19
e 2011-08-01 15:11:19
f NULL
g NULL
h NULL
i NULL
LOAD DATA INFILE 't4.dat' IGNORE INTO TABLE t2;
Warnings:
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'e' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'f' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'g' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'h' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
SELECT a FROM t2;
a
2011-08-01 15:11:19
SELECT b FROM t2;
b
2011-08-01 15:11:19
SELECT c FROM t2;
c
2011-08-01 15:11:19
SELECT d FROM t2;
d
2011-08-01 15:11:19
# As shown here, supplying a NULL value to a non-nullable
# column with no default value results in the zero date.
SELECT e FROM t2;
e
0000-00-00 00:00:00
# As shown here, supplying a NULL value to a non-nullable column with a
# default value results in the zero date.
SELECT f FROM t2;
f
0000-00-00 00:00:00
# As shown here, supplying a NULL value to a non-nullable column with a
# default function results in the zero date.
SELECT g FROM t2;
g
0000-00-00 00:00:00
# As shown here, supplying a NULL value to a non-nullable DATETIME ON
# UPDATE CURRENT_TIMESTAMP column with no default value results in the
# zero date.
SELECT h FROM t2;
h
0000-00-00 00:00:00
SELECT i FROM t2;
i
0000-00-00 00:00:00
DELETE FROM t1;
DELETE FROM t2;
# Read t3 file into t1
# The syntax will cause a different code path to be taken
# (read_fixed_length()) than under the LOAD ... INTO TABLE t1 command
# above. The code in this path is copy-pasted code from the path taken
# under the syntax used in the previous LOAD command.
LOAD DATA INFILE 't3.dat' IGNORE INTO TABLE t1
FIELDS TERMINATED BY '' ENCLOSED BY '';
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
SELECT b FROM t1;
b
2011-08-01 15:11:19
SELECT c FROM t1;
c
2011-08-01 15:11:19
SELECT d FROM t1;
d
2011-08-01 15:11:19
SELECT e FROM t1;
e
2011-08-01 15:11:19
# Yes, a missing field cannot be NULL using this syntax, so it will
# zero date instead. Says a comment in read_fixed_length() : "No fields
# specified in fields_vars list can be NULL in this format."
# It appears to be by design. This is inconsistent with LOAD DATA INFILE
# syntax in previous test.
SELECT f FROM t1;
f
0000-00-00 00:00:00
SELECT g FROM t1;
g
0000-00-00 00:00:00
# See comment above "SELECT f FROM f1".
SELECT h FROM t1;
h
0000-00-00 00:00:00
SELECT i FROM t1;
i
0000-00-00 00:00:00
DELETE FROM t1;
LOAD DATA INFILE 't5.dat' INTO TABLE t1 ( a, @dummy );
SELECT * FROM t1;
a b c d e f g h i
1 2011-08-01 15:11:19 2011-08-01 15:11:19 0000-00-00 00:00:00 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19
SELECT @dummy;
@dummy
2
DELETE FROM t1;
LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET c = '2005-06-06 08:09:10';
SELECT * FROM t1;
a b c d e f g h i
1 2011-08-01 15:11:19 2005-06-06 08:09:10 0000-00-00 00:00:00 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19
DELETE FROM t1;
LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET g = '2005-06-06 08:09:10';
SELECT * FROM t1;
a b c d e f g h i
1 2011-08-01 15:11:19 2011-08-01 15:11:19 0000-00-00 00:00:00 2011-08-01 15:11:19 NULL 2005-06-06 08:09:10 NULL 2011-08-01 15:11:19
DELETE FROM t1;
# Load a static XML file
LOAD XML INFILE '../../std_data/onerow.xml' INTO TABLE t1
ROWS IDENTIFIED BY '<row>';
Missing tags are treated as NULL
SELECT * FROM t1;
a 1
b 2011-08-01 15:11:19
c 2011-08-01 15:11:19
d 2011-08-01 15:11:19
e 2011-08-01 15:11:19
f NULL
g NULL
h NULL
i NULL
DROP TABLE t1, t2;
#
# Similar LOAD DATA tests in another form
#
# All of this test portion has been run on a pre-WL5874 trunk
# (except that like_b and like_c didn't exist) and all result
# differences are a bug.
# Regarding like_b its definition is the same as b's except
# that the constant default is replaced with a function
# default. Our expectation is that like_b would behave
# like b: if b is set to NULL, or set to 0000-00-00, or set to
# its default, then the same should apply to like_b. Same for
# like_c vs c.
# Mon Aug 1 15:11:19 2011 UTC
SET TIMESTAMP = 1312211479.089786;
SELECT 1 INTO OUTFILE "file1.dat" FROM dual;
SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
INTO OUTFILE "file2.dat" FROM dual;
# Too short row
CREATE TABLE t1 (
dummy INT,
a DATETIME NULL DEFAULT NULL,
b DATETIME NULL DEFAULT "2011-11-18",
like_b DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
c DATETIME NOT NULL DEFAULT "2011-11-18",
like_c DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NOT NULL DEFAULT "2011-05-03",
f TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
g TIMESTAMP NULL DEFAULT NULL,
h INT NULL,
i INT NOT NULL DEFAULT 42
);
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime DEFAULT NULL,
`b` datetime DEFAULT '2011-11-18 00:00:00',
`like_b` datetime DEFAULT current_timestamp(),
`c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
`like_c` datetime NOT NULL DEFAULT current_timestamp(),
`d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE current_timestamp(),
`e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
`f` timestamp NOT NULL DEFAULT current_timestamp(),
`g` timestamp NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file1.dat" IGNORE INTO table t1;
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
# It is strange that "like_b" gets NULL when "b" gets 0. But
# this is consistent with how "a" gets NULL when "b" gets 0,
# with how "g" gets NULL when "d" gets 0, and with how "h" gets
# NULL when "i" gets 0. Looks like "DEFAULT
# <non-NULL-constant>" is changed to 0, whereas DEFAULT NULL
# and DEFAULT NOW are changed to NULL.
SELECT * FROM t1;
dummy 1
a NULL
b 0000-00-00 00:00:00
like_b NULL
c 0000-00-00 00:00:00
like_c 0000-00-00 00:00:00
d 0000-00-00 00:00:00
e 2011-08-01 15:11:19
f 2011-08-01 15:11:19
g NULL
h NULL
i 0
delete from t1;
alter table t1
modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime DEFAULT NULL,
`b` datetime DEFAULT '2011-11-18 00:00:00',
`like_b` datetime DEFAULT current_timestamp(),
`c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
`like_c` datetime NOT NULL DEFAULT current_timestamp(),
`d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE current_timestamp(),
`e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
`f` timestamp NULL DEFAULT current_timestamp(),
`g` timestamp NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file1.dat" IGNORE INTO table t1;
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
SELECT * FROM t1;
dummy 1
a NULL
b 0000-00-00 00:00:00
like_b NULL
c 0000-00-00 00:00:00
like_c 0000-00-00 00:00:00
d 0000-00-00 00:00:00
e 2011-08-01 15:11:19
f NULL
g NULL
h NULL
i 0
delete from t1;
drop table t1;
# Conclusion derived from trunk's results:
# DATETIME DEFAULT <non-NULL-constant> (b,c) gets 0000-00-00,
# DATETIME DEFAULT NULL (a) gets NULL,
# TIMESTAMP NULL DEFAULT <non-NULL-constant> (d) gets 0000-00-00,
# TIMESTAMP NULL DEFAULT NULL (g) gets NULL,
# TIMESTAMP NULL DEFAULT NOW (f after ALTER) gets NULL,
# TIMESTAMP NOT NULL (f before ALTER, e) gets NOW.
### Loading NULL ###
CREATE TABLE t1 (
dummy INT,
a DATETIME NULL DEFAULT NULL,
b DATETIME NULL DEFAULT "2011-11-18",
like_b DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
c DATETIME NOT NULL DEFAULT "2011-11-18",
like_c DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
d TIMESTAMP NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP,
e TIMESTAMP NOT NULL DEFAULT "2011-05-03",
f TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
g TIMESTAMP NULL DEFAULT NULL,
h INT NULL,
i INT NOT NULL DEFAULT 42
);
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime DEFAULT NULL,
`b` datetime DEFAULT '2011-11-18 00:00:00',
`like_b` datetime DEFAULT current_timestamp(),
`c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
`like_c` datetime NOT NULL DEFAULT current_timestamp(),
`d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE current_timestamp(),
`e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
`f` timestamp NOT NULL DEFAULT current_timestamp(),
`g` timestamp NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file2.dat" IGNORE INTO table t1;
Warnings:
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
SELECT * FROM t1;
dummy NULL
a NULL
b NULL
like_b NULL
c 0000-00-00 00:00:00
like_c 0000-00-00 00:00:00
d NULL
e 2011-08-01 15:11:19
f 2011-08-01 15:11:19
g NULL
h NULL
i 0
delete from t1;
alter table t1
modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime DEFAULT NULL,
`b` datetime DEFAULT '2011-11-18 00:00:00',
`like_b` datetime DEFAULT current_timestamp(),
`c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
`like_c` datetime NOT NULL DEFAULT current_timestamp(),
`d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE current_timestamp(),
`e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
`f` timestamp NULL DEFAULT current_timestamp(),
`g` timestamp NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file2.dat" IGNORE INTO table t1;
Warnings:
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
SELECT * FROM t1;
dummy NULL
a NULL
b NULL
like_b NULL
c 0000-00-00 00:00:00
like_c 0000-00-00 00:00:00
d NULL
e 2011-08-01 15:11:19
f NULL
g NULL
h NULL
i 0
delete from t1;
# Conclusion derived from trunk's results:
# DATETIME NULL (a,b) gets NULL,
# DATETIME NOT NULL (c) gets 0000-00-00,
# TIMESTAMP NULL (d,f,g) gets NULL,
# TIMESTAMP NOT NULL (e) gets NOW.
drop table t1;
#
# Test of updatable views with check options. The option can be violated
# using ON UPDATE updates which is very strange as this offers a loophole
# in this integrity check.
#
SET TIME_ZONE = "+03:00";
# 1970-01-01 03:16:40
SET TIMESTAMP = 1000.123456;
CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b
1 1970-01-01 03:16:40
CREATE VIEW v1 AS SELECT * FROM t1 WHERE b <= '1970-01-01 03:16:40.123456'
WITH CHECK OPTION;
SELECT * FROM v1;
a b
1 1970-01-01 03:16:40
# 1970-01-01 03:33:20
SET TIMESTAMP = 2000.000234;
UPDATE v1 SET a = 2;
ERROR 44000: CHECK OPTION failed `test`.`v1`
SELECT * FROM t1;
a b
1 1970-01-01 03:16:40
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT '1973-08-14 09:11:22.089786' ON UPDATE CURRENT_TIMESTAMP,
c INT KEY
);
# 1973-08-14 09:11:22 UTC
SET TIMESTAMP = 114167482.534231;
INSERT INTO t1 ( c ) VALUES ( 1 );
CREATE VIEW v1 AS
SELECT *
FROM t1
WHERE a >= '1973-08-14 09:11:22'
WITH LOCAL CHECK OPTION;
SELECT * FROM v1;
a c
1973-08-14 09:11:22 1
SET TIMESTAMP = 1.126789;
INSERT INTO v1 ( c ) VALUES ( 1 ) ON DUPLICATE KEY UPDATE c = 2;
ERROR 44000: CHECK OPTION failed `test`.`v1`
SELECT * FROM v1;
a c
1973-08-14 09:11:22 1
DROP VIEW v1;
DROP TABLE t1;
#
# Bug 13095459 - MULTI-TABLE UPDATE MODIFIES A ROW TWICE
#
CREATE TABLE t1 (
a INT,
b INT,
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ( a, ts )
);
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
CREATE TABLE t2 ( a INT );
INSERT INTO t2 VALUES ( 1 );
UPDATE t1 STRAIGHT_JOIN t2
SET t1.b = t1.b + 1
WHERE t1.a = 1 AND t1.ts >= '2000-09-28 00:00:00';
SELECT b FROM t1;
b
1
DROP TABLE t1, t2;
#
# Bug#11745578: 17392: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT
# CURRENT_TIMESTAMP INSERTS ZERO
#
SET timestamp = 1000;
CREATE TABLE t1 ( b INT );
INSERT INTO t1 VALUES (1);
ALTER TABLE t1 ADD COLUMN a6 DATETIME DEFAULT NOW() ON UPDATE NOW() FIRST;
ALTER TABLE t1 ADD COLUMN a5 DATETIME DEFAULT NOW() FIRST;
ALTER TABLE t1 ADD COLUMN a4 DATETIME ON UPDATE NOW() FIRST;
ALTER TABLE t1 ADD COLUMN a3 TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() FIRST;
ALTER TABLE t1 ADD COLUMN a2 TIMESTAMP NOT NULL DEFAULT NOW() FIRST;
ALTER TABLE t1 ADD COLUMN a1 TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW() FIRST;
ALTER TABLE t1 ADD COLUMN c1 TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW() AFTER b;
ALTER TABLE t1 ADD COLUMN c2 TIMESTAMP NOT NULL DEFAULT NOW() AFTER c1;
ALTER TABLE t1 ADD COLUMN c3 TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() AFTER c2;
ALTER TABLE t1 ADD COLUMN c4 DATETIME ON UPDATE NOW() AFTER c3;
ALTER TABLE t1 ADD COLUMN c5 DATETIME DEFAULT NOW() AFTER c4;
ALTER TABLE t1 ADD COLUMN c6 DATETIME DEFAULT NOW() ON UPDATE NOW() AFTER c5;
SELECT * FROM t1;
a1 0000-00-00 00:00:00
a2 1970-01-01 03:16:40
a3 1970-01-01 03:16:40
a4 NULL
a5 1970-01-01 03:16:40
a6 1970-01-01 03:16:40
b 1
c1 0000-00-00 00:00:00
c2 1970-01-01 03:16:40
c3 1970-01-01 03:16:40
c4 NULL
c5 1970-01-01 03:16:40
c6 1970-01-01 03:16:40
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b DATETIME DEFAULT NOW() );
INSERT INTO t1 VALUES ();
SET timestamp = 1000000000;
ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3);
ALTER TABLE t1 MODIFY COLUMN b DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3);
SELECT * FROM t1;
a b
1970-01-01 03:16:40.000 1970-01-01 03:16:40.000
DROP TABLE t1;
CREATE TABLE t1 (
a TIMESTAMP NOT NULL DEFAULT '1999-12-01 11:22:33' ON UPDATE CURRENT_TIMESTAMP,
b DATETIME DEFAULT '1999-12-01 11:22:33'
);
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP DEFAULT NOW();
ALTER TABLE t1 MODIFY COLUMN b DATETIME DEFAULT NOW();
INSERT INTO t1 VALUES ();
SELECT * FROM t1;
a b
1999-12-01 11:22:33 1999-12-01 11:22:33
2001-09-09 04:46:40 2001-09-09 04:46:40
DROP TABLE t1;
#
# Function defaults run 2. Six digits scale on seconds precision.
#
SET TIME_ZONE = "+00:00";
#
# Test of errors for column data types that don't support function
# defaults.
#
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a BIT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a TINYINT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a SMALLINT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a MEDIUMINT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a INT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a BIGINT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a FLOAT DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a DECIMAL DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a DATE DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a TIME DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a YEAR DEFAULT CURRENT_TIMESTAMP(6) );
CREATE OR REPLACE TABLE t1( a BIT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a TINYINT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a SMALLINT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a MEDIUMINT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a INT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a BIGINT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a FLOAT ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a DECIMAL ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a DATE ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a TIME ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
CREATE OR REPLACE TABLE t1( a YEAR ON UPDATE CURRENT_TIMESTAMP(6) );
ERROR HY000: Invalid ON UPDATE clause for 'a' column
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
drop table if exists t1;
#
# Test that the default clause behaves like NOW() regarding time zones.
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NULL,
e DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
h DATETIME(6)
);
# 2011-09-27 14:11:08 UTC
SET TIMESTAMP = 1317132668.654321;
SET @old_time_zone = @@TIME_ZONE;
SET TIME_ZONE = "+05:00";
INSERT INTO t1( d, h ) VALUES ( NOW(6), NOW(6) );
SELECT * FROM t1;
a b c d e f g h
2011-09-27 19:11:08.654321 2011-09-27 19:11:08.654321 0000-00-00 00:00:00.000000 2011-09-27 19:11:08.654321 2011-09-27 19:11:08.654321 2011-09-27 19:11:08.654321 NULL 2011-09-27 19:11:08.654321
# 1989-05-13 01:02:03
SET TIMESTAMP = 611017323.543212;
UPDATE t1 SET d = NOW(6), h = NOW(6);
SELECT * FROM t1;
a b c d e f g h
1989-05-13 04:02:03.543212 2011-09-27 19:11:08.654321 1989-05-13 04:02:03.543212 1989-05-13 04:02:03.543212 1989-05-13 04:02:03.543212 2011-09-27 19:11:08.654321 1989-05-13 04:02:03.543212 1989-05-13 04:02:03.543212
SET TIME_ZONE = @old_time_zone;
DROP TABLE t1;
#
# Test of several TIMESTAMP columns with different function defaults.
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
f INT
);
# 2011-04-19 07:22:02 UTC
SET TIMESTAMP = 1303197722.534231;
INSERT INTO t1 ( f ) VALUES (1);
SELECT * FROM t1;
a b c d e f
2011-04-19 07:22:02.534231 2011-04-19 07:22:02.534231 2011-04-19 07:22:02.534231 0000-00-00 00:00:00.000000 0000-00-00 00:00:00.000000 1
# 2011-04-19 07:23:18 UTC
SET TIMESTAMP = 1303197798.132435;
UPDATE t1 SET f = 2;
SELECT * FROM t1;
a b c d e f
2011-04-19 07:23:18.132435 2011-04-19 07:23:18.132435 2011-04-19 07:22:02.534231 2011-04-19 07:23:18.132435 2011-04-19 07:23:18.132435 2
DROP TABLE t1;
#
# Test of inserted values out of order.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NULL,
f DATETIME(6),
g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
j INT
);
# 2011-04-19 07:22:02 UTC
SET TIMESTAMP = 1303197722.534231;
INSERT INTO t1 ( j, a ) VALUES ( 1, 1 );
SELECT * FROM t1;
a b c d e f g h i j
1 2011-04-19 07:22:02.534231 2011-04-19 07:22:02.534231 0000-00-00 00:00:00.000000 NULL NULL 2011-04-19 07:22:02.534231 NULL 2011-04-19 07:22:02.534231 1
DROP TABLE t1;
#
# Test of ON DUPLICATE KEY UPDATE
#
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
f TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
g TIMESTAMP(6) NULL,
h DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
j DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
k DATETIME(6) NULL,
l DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
);
# 1977-12-21 23:00:00 UTC
SET TIMESTAMP = 251593200.192837;
INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
SELECT * FROM t1;
a b c d e f g h i j k l
1 NULL 1977-12-21 23:00:00.192837 1977-12-21 23:00:00.192837 0000-00-00 00:00:00.000000 1986-09-27 03:00:00.098765 NULL 1977-12-21 23:00:00.192837 1977-12-21 23:00:00.192837 NULL NULL 1986-09-27 03:00:00.098765
# 1975-05-21 23:00:00 UTC
SET TIMESTAMP = 169945200.918273;
INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
SELECT * FROM t1;
a b c d e f g h i j k l
1 2 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 1986-09-27 03:00:00.098765 NULL 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 NULL 1986-09-27 03:00:00.098765
# 1973-08-14 09:11:22 UTC
SET TIMESTAMP = 114167482.534231;
INSERT INTO t1(a) VALUES (2) ON DUPLICATE KEY UPDATE b = 2;
SELECT * FROM t1;
a b c d e f g h i j k l
1 2 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 1986-09-27 03:00:00.098765 NULL 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 NULL 1986-09-27 03:00:00.098765
2 NULL 1973-08-14 09:11:22.534231 1973-08-14 09:11:22.534231 0000-00-00 00:00:00.000000 1986-09-27 03:00:00.098765 NULL 1973-08-14 09:11:22.534231 1973-08-14 09:11:22.534231 NULL NULL 1986-09-27 03:00:00.098765
DROP TABLE t1;
CREATE TABLE t1 ( a INT PRIMARY KEY, b INT, c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
# 2011-04-19 07:23:18 UTC
SET TIMESTAMP = 1303197798.945156;
INSERT INTO t1 VALUES
(1, 0, '2001-01-01 01:01:01.111111'),
(2, 0, '2002-02-02 02:02:02.222222'),
(3, 0, '2003-03-03 03:03:03.333333');
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01.111111
2 0 2002-02-02 02:02:02.222222
3 0 2003-03-03 03:03:03.333333
UPDATE t1 SET b = 2, c = c WHERE a = 2;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01.111111
2 2 2002-02-02 02:02:02.222222
3 0 2003-03-03 03:03:03.333333
INSERT INTO t1 (a) VALUES (4);
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01.111111
2 2 2002-02-02 02:02:02.222222
3 0 2003-03-03 03:03:03.333333
4 NULL 2011-04-19 07:23:18.945156
UPDATE t1 SET c = '2004-04-04 04:04:04.444444' WHERE a = 4;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01.111111
2 2 2002-02-02 02:02:02.222222
3 0 2003-03-03 03:03:03.333333
4 NULL 2004-04-04 04:04:04.444444
INSERT INTO t1 ( a ) VALUES ( 3 ), ( 5 ) ON DUPLICATE KEY UPDATE b = 3, c = c;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01.111111
2 2 2002-02-02 02:02:02.222222
3 3 2003-03-03 03:03:03.333333
4 NULL 2004-04-04 04:04:04.444444
5 NULL 2011-04-19 07:23:18.945156
INSERT INTO t1 (a, c) VALUES
(4, '2004-04-04 00:00:00.444444'),
(6, '2006-06-06 06:06:06.666666')
ON DUPLICATE KEY UPDATE b = 4;
SELECT * FROM t1;
a b c
1 0 2001-01-01 01:01:01.111111
2 2 2002-02-02 02:02:02.222222
3 3 2003-03-03 03:03:03.333333
4 4 2011-04-19 07:23:18.945156
5 NULL 2011-04-19 07:23:18.945156
6 NULL 2006-06-06 06:06:06.666666
DROP TABLE t1;
#
# Test of REPLACE INTO executed as UPDATE.
#
CREATE TABLE t1 (
a INT PRIMARY KEY,
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
e DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
f TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
h TIMESTAMP(6) NULL,
i DATETIME(6)
);
# 1970-09-21 09:11:12 UTC
SET TIMESTAMP = 22756272.163584;
REPLACE INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
1 1970-09-21 09:11:12.163584 1970-09-21 09:11:12.163584 1970-09-21 09:11:12.163584 1970-09-21 09:11:12.163584 0000-00-00 00:00:00.000000 NULL NULL NULL
# 1970-11-10 14:16:17 UTC
SET TIMESTAMP = 27094577.852954;
REPLACE INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
1 1970-11-10 14:16:17.852954 1970-11-10 14:16:17.852954 1970-11-10 14:16:17.852954 1970-11-10 14:16:17.852954 0000-00-00 00:00:00.000000 NULL NULL NULL
DROP TABLE t1;
#
# Test of insertion of NULL, DEFAULT and an empty row for DEFAULT
# CURRENT_TIMESTAMP.
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
c INT
);
# 2011-04-20 09:53:41 UTC
SET TIMESTAMP = 1303293221.163578;
INSERT INTO t1 VALUES (NULL, NULL, 1), (DEFAULT, DEFAULT, 2);
INSERT INTO t1 ( a, b, c ) VALUES (NULL, NULL, 3), (DEFAULT, DEFAULT, 4);
SELECT * FROM t1;
a b c
2011-04-20 09:53:41.163578 NULL 1
2011-04-20 09:53:41.163578 2011-04-20 09:53:41.163578 2
2011-04-20 09:53:41.163578 NULL 3
2011-04-20 09:53:41.163578 2011-04-20 09:53:41.163578 4
SET TIME_ZONE = "+03:00";
SELECT * FROM t1;
a b c
2011-04-20 12:53:41.163578 NULL 1
2011-04-20 12:53:41.163578 2011-04-20 09:53:41.163578 2
2011-04-20 12:53:41.163578 NULL 3
2011-04-20 12:53:41.163578 2011-04-20 09:53:41.163578 4
SET TIME_ZONE = "+00:00";
DROP TABLE t1;
# 2011-04-20 07:05:39 UTC
SET TIMESTAMP = 1303283139.195624;
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT '2010-10-11 12:34:56' ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) DEFAULT '2010-10-11 12:34:56'
);
INSERT INTO t1 VALUES (NULL, NULL), (DEFAULT, DEFAULT);
INSERT INTO t1 ( a, b ) VALUES (NULL, NULL), (DEFAULT, DEFAULT);
SELECT * FROM t1;
a b
2011-04-20 07:05:39.195624 NULL
2010-10-11 12:34:56.000000 2010-10-11 12:34:56.000000
2011-04-20 07:05:39.195624 NULL
2010-10-11 12:34:56.000000 2010-10-11 12:34:56.000000
DROP TABLE t1;
# 2011-04-20 09:53:41 UTC
SET TIMESTAMP = 1303293221.136952;
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
e TIMESTAMP(6) NULL,
f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
i DATETIME(6) NULL,
j DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
);
INSERT INTO t1 VALUES ();
INSERT INTO t1 SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL;
SELECT * FROM t1;
a b c d e f g h i j
2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 0000-00-00 00:00:00.000000 1986-09-27 03:00:00.098765 NULL 2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 NULL NULL 1986-09-27 03:00:00.098765
2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 NULL NULL NULL NULL NULL NULL
DROP TABLE t1;
#
# Test of multiple-table UPDATE for DEFAULT CURRENT_TIMESTAMP
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
c INT
);
INSERT INTO t1 ( c ) VALUES (1);
SELECT * FROM t1;
a b c
2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 1
# 2011-04-20 17:06:13 UTC
SET TIMESTAMP = 1303311973.163587;
UPDATE t1 t11, t1 t12 SET t11.c = 1;
SELECT * FROM t1;
a b c
2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 1
UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
a b c
2011-04-20 15:06:13.163587 2011-04-20 09:53:41.136952 2
DROP TABLE t1;
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
c DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
d DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
e INT
);
CREATE TABLE t2 (
f INT,
g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
h DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
i TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
j TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
);
# 1995-03-11 00:02:03 UTC
SET TIMESTAMP = 794880123.195676;
INSERT INTO t1 ( e ) VALUES ( 1 ), ( 2 );
INSERT INTO t2 ( f ) VALUES ( 1 ), ( 2 );
SELECT * FROM t1;
a b c d e
1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676 NULL 1
1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676 NULL 2
SELECT * FROM t2;
f g h i j
1 NULL 1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676
2 NULL 1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676
# 1980-12-13 02:02:01 UTC
SET TIMESTAMP = 345520921.196755;
UPDATE t1, t2 SET t1.e = 3, t2.f = 4;
SELECT * FROM t1;
a b c d e
1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 3
1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 3
SELECT * FROM t2;
f g h i j
4 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676
4 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676
DROP TABLE t1, t2;
#
# Test of multiple table update with temporary table and on the fly.
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
c INT,
d INT
);
CREATE TABLE t2 (
a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
c INT KEY,
d INT
);
INSERT INTO t1 ( c ) VALUES (1), (2);
INSERT INTO t2 ( c ) VALUES (1), (2);
# Test of multiple table update done on the fly
# 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.194685;
UPDATE t1 JOIN t2 USING ( c ) SET t2.d = 1;
SELECT * FROM t1;
a b c d
0000-00-00 00:00:00.000000 NULL 1 NULL
0000-00-00 00:00:00.000000 NULL 2 NULL
SELECT * FROM t2;
a b c d
2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 1 1
2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 2 1
# Test of multiple table update done with temporary table.
# 1979-01-15 03:02:01
SET TIMESTAMP = 285213721.134679;
UPDATE t1 JOIN t2 USING ( c ) SET t1.d = 1;
SELECT * FROM t1;
a b c d
1979-01-15 02:02:01.134679 1979-01-15 02:02:01.134679 1 1
1979-01-15 02:02:01.134679 1979-01-15 02:02:01.134679 2 1
SELECT * FROM t2;
a b c d
2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 1 1
2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 2 1
DROP TABLE t1, t2;
#
# Test of ON UPDATE CURRENT_TIMESTAMP.
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
c INT
);
# 2011-04-20 09:53:41 UTC
SET TIMESTAMP = 1303293221.794613;
INSERT INTO t1 ( c ) VALUES ( 1 );
SELECT * FROM t1;
a b c
0000-00-00 00:00:00.000000 NULL 1
UPDATE t1 SET c = 1;
SELECT * FROM t1;
a b c
0000-00-00 00:00:00.000000 NULL 1
UPDATE t1 SET c = 2;
SELECT * FROM t1;
a b c
2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
#
# Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
#
# 2011-04-20 09:54:13 UTC
SET TIMESTAMP = 1303293253.794613;
UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
SELECT * FROM t1;
a b c
2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
UPDATE t1 SET c = 3;
SELECT * FROM t1;
a b c
2011-04-20 09:54:13.794613 2011-04-20 09:54:13.794613 3
#
# Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
#
# 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.534231;
UPDATE t1 t11, t1 t12 SET t11.c = 3;
SELECT * FROM t1;
a b c
2011-04-20 09:54:13.794613 2011-04-20 09:54:13.794613 3
UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
a b c
2011-04-20 15:06:13.534231 2011-04-20 15:06:13.534231 2
DROP TABLE t1;
#
# Test of a multiple-table update where only one table is updated and
# the updated table has a primary key.
#
CREATE TABLE t1 ( a INT, b INT, PRIMARY KEY (a) );
INSERT INTO t1 VALUES (1, 1),(2, 2),(3, 3),(4, 4);
CREATE TABLE t2 ( a INT, b INT );
INSERT INTO t2 VALUES (1, 1),(2, 2),(3, 3),(4, 4),(5, 5);
UPDATE t1, t2 SET t1.b = 100 WHERE t1.a = t2.a;
SELECT * FROM t1;
a b
1 100
2 100
3 100
4 100
SELECT * FROM t2;
a b
1 1
2 2
3 3
4 4
5 5
DROP TABLE t1, t2;
#
# Test of ALTER TABLE, reordering columns.
#
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b INT );
ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), c TIMESTAMP(6) NULL );
ALTER TABLE t1 MODIFY b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`a` int(11) DEFAULT NULL,
`c` timestamp(6) NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NULL );
ALTER TABLE t1 MODIFY b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b TIMESTAMP(6) NULL );
ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp(6) NULL DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b TIMESTAMP(6) NULL );
ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` timestamp(6) NULL DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6), b INT, c TIMESTAMP(6) NULL );
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE current_timestamp(6),
`b` int(11) DEFAULT NULL,
`c` timestamp(6) NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`c` timestamp(6) NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6), b INT, c TIMESTAMP(6) NULL );
ALTER TABLE t1 MODIFY c TIMESTAMP(6) NULL FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` timestamp(6) NULL DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE current_timestamp(6),
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b INT, c TIMESTAMP(6) NULL );
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`b` int(11) DEFAULT NULL,
`c` timestamp(6) NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6) AFTER b;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`c` timestamp(6) NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b INT, c TIMESTAMP(6) NULL );
ALTER TABLE t1 MODIFY c TIMESTAMP(6) NULL FIRST;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` timestamp(6) NULL DEFAULT NULL,
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
#
# Test of ALTER TABLE, adding columns.
#
CREATE TABLE t1 ( a INT );
ALTER TABLE t1 ADD COLUMN b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
#
# Test of INSERT SELECT.
#
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
d DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
CREATE TABLE t2 (
placeholder1 INT,
placeholder2 INT,
placeholder3 INT,
placeholder4 INT,
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00',
c DATETIME(6),
d DATETIME(6)
);
# 1977-08-16 15:30:01 UTC
SET TIMESTAMP = 240589801.654312;
INSERT INTO t2 (a, b, c, d) VALUES (
'1977-08-16 15:30:01.123456',
'1977-08-16 15:30:01.234567',
'1977-08-16 15:30:01.345678',
'1977-08-16 15:30:01.456789'
);
# 1986-09-27 01:00:00 UTC
SET TIMESTAMP = 528166800.132435;
INSERT INTO t1 ( a, c ) SELECT a, c FROM t2;
SELECT * FROM t1;
a b c d
1977-08-16 15:30:01.123456 1986-09-27 01:00:00.132435 1977-08-16 15:30:01.345678 1986-09-27 01:00:00.132435
DROP TABLE t1, t2;
#
# Test of CREATE TABLE SELECT.
#
# We test that the columns of the source table are not used to determine
# function defaults for the receiving table.
#
# 1970-04-11 20:13:57 UTC
SET TIMESTAMP = 8712837.657898;
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
e TIMESTAMP(6) NULL,
f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
i DATETIME(6) NULL,
j DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
);
INSERT INTO t1 VALUES ();
# 1971-01-31 21:13:57 UTC
SET TIMESTAMP = 34200837.164937;
CREATE TABLE t2 SELECT a FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t2;
a
1970-04-11 20:13:57.657897
CREATE TABLE t3 SELECT b FROM t1;
SHOW CREATE TABLE t3;
Table Create Table
t3 CREATE TABLE `t3` (
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t3;
b
1970-04-11 20:13:57.657897
CREATE TABLE t4 SELECT c FROM t1;
SHOW CREATE TABLE t4;
Table Create Table
t4 CREATE TABLE `t4` (
`c` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t4;
c
0000-00-00 00:00:00.000000
CREATE TABLE t5 SELECT d FROM t1;
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`d` timestamp(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t5;
d
1986-09-27 03:00:00.098765
CREATE TABLE t6 SELECT e FROM t1;
SHOW CREATE TABLE t6;
Table Create Table
t6 CREATE TABLE `t6` (
`e` timestamp(6) NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t6;
e
NULL
CREATE TABLE t7 SELECT f FROM t1;
SHOW CREATE TABLE t7;
Table Create Table
t7 CREATE TABLE `t7` (
`f` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t7;
f
1970-04-11 20:13:57.657897
CREATE TABLE t8 SELECT g FROM t1;
SHOW CREATE TABLE t8;
Table Create Table
t8 CREATE TABLE `t8` (
`g` datetime(6) DEFAULT current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t8;
g
1970-04-11 20:13:57.657897
CREATE TABLE t9 SELECT h FROM t1;
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
`h` datetime(6) DEFAULT NULL ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t9;
h
NULL
CREATE TABLE t10 SELECT i FROM t1;
SHOW CREATE TABLE t10;
Table Create Table
t10 CREATE TABLE `t10` (
`i` datetime(6) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t10;
i
NULL
CREATE TABLE t11 SELECT j FROM t1;
SHOW CREATE TABLE t11;
Table Create Table
t11 CREATE TABLE `t11` (
`j` datetime(6) DEFAULT '1986-09-27 03:00:00.098765'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t11;
j
1986-09-27 03:00:00.098765
CREATE TABLE t12 (
k TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
l TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
m TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
n TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
o TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
p TIMESTAMP(6) NULL,
q DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
r DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
s DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
t DATETIME(6) NULL,
u DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
)
SELECT * FROM t1;
SHOW CREATE TABLE t12;
Table Create Table
t12 CREATE TABLE `t12` (
`k` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`l` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`m` timestamp(6) NOT NULL DEFAULT current_timestamp(6),
`n` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE current_timestamp(6),
`o` timestamp(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
`p` timestamp(6) NULL DEFAULT NULL,
`q` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`r` datetime(6) DEFAULT current_timestamp(6),
`s` datetime(6) DEFAULT NULL ON UPDATE current_timestamp(6),
`t` datetime(6) DEFAULT NULL,
`u` datetime(6) DEFAULT '1986-09-27 03:00:00.098765',
`a` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6),
`c` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE current_timestamp(6),
`d` timestamp(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
`e` timestamp(6) NULL DEFAULT NULL,
`f` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`g` datetime(6) DEFAULT current_timestamp(6),
`h` datetime(6) DEFAULT NULL ON UPDATE current_timestamp(6),
`i` datetime(6) DEFAULT NULL,
`j` datetime(6) DEFAULT '1986-09-27 03:00:00.098765'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12;
# 1970-04-11 20:13:57 UTC
SET TIMESTAMP = 8712837.164953;
CREATE TABLE t1 (
a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
c DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
d DATETIME(6) NULL,
e DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
);
INSERT INTO t1 VALUES ();
# 1971-01-31 20:13:57 UTC
SET TIMESTAMP = 34200837.915736;
CREATE TABLE t2 SELECT a FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t2;
a
1970-04-11 20:13:57.164953
CREATE TABLE t3 SELECT b FROM t1;
SHOW CREATE TABLE t3;
Table Create Table
t3 CREATE TABLE `t3` (
`b` datetime(6) DEFAULT current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t3;
b
1970-04-11 20:13:57.164953
CREATE TABLE t4 SELECT c FROM t1;
SHOW CREATE TABLE t4;
Table Create Table
t4 CREATE TABLE `t4` (
`c` datetime(6) DEFAULT NULL ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t4;
c
NULL
CREATE TABLE t5 SELECT d FROM t1;
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`d` datetime(6) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t5;
d
NULL
CREATE TABLE t6 SELECT e FROM t1;
SHOW CREATE TABLE t6;
Table Create Table
t6 CREATE TABLE `t6` (
`e` datetime(6) DEFAULT '1986-09-27 03:00:00.098765'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT * FROM t6;
e
1986-09-27 03:00:00.098765
DROP TABLE t1, t2, t3, t4, t5, t6;
#
# Test of a CREATE TABLE SELECT that also declared columns. In this case
# the function default should be de-activated during the execution of the
# CREATE TABLE statement.
#
# 1970-01-01 03:16:40
SET TIMESTAMP = 1000.987654;
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES ( 1 ), ( 2 );
CREATE TABLE t2 ( b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)) SELECT a FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SET TIMESTAMP = 2000.876543;
INSERT INTO t2( a ) VALUES ( 3 );
SELECT * FROM t2;
b a
MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard MDEV-10134 Add full support for DEFAULT - Added support for using tables with MySQL 5.7 virtual fields, including MySQL 5.7 syntax - Better error messages also for old cases - CREATE ... SELECT now also updates timestamp columns - Blob can now have default values - Added new system variable "check_constraint_checks", to turn of CHECK constraint checking if needed. - Removed some engine independent tests in suite vcol to only test myisam - Moved some tests from 'include' to 't'. Should some day be done for all tests. - FRM version increased to 11 if one uses virtual fields or constraints - Changed to use a bitmap to check if a field has got a value, instead of setting HAS_EXPLICIT_VALUE bit in field flags - Expressions can now be up to 65K in total - Ensure we are not refering to uninitialized fields when handling virtual fields or defaults - Changed check_vcol_func_processor() to return a bitmap of used types - Had to change some functions that calculated cached value in fix_fields to do this in val() or getdate() instead. - store_now_in_TIME() now takes a THD argument - fill_record() now updates default values - Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL - Automatically generate a name for constraints that doesn't have a name - Added support for ALTER TABLE DROP CONSTRAINT - Ensure that partition functions register virtual fields used. This fixes some bugs when using virtual fields in a partitioning function
2016-06-29 09:14:22 +02:00
1970-01-01 00:16:40.987654 1
1970-01-01 00:16:40.987654 2
1970-01-01 00:33:20.876543 3
DROP TABLE t1, t2;
#
# Test of updating a view.
#
CREATE TABLE t1 ( a INT, b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) );
CREATE TABLE t2 ( a INT, b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6) );
CREATE VIEW v1 AS SELECT * FROM t1;
SHOW CREATE VIEW v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` latin1 latin1_swedish_ci
CREATE VIEW v2 AS SELECT * FROM t2;
SHOW CREATE VIEW v2;
View Create View character_set_client collation_connection
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a`,`t2`.`b` AS `b` from `t2` latin1 latin1_swedish_ci
# 1971-01-31 21:13:57 UTC
SET TIMESTAMP = 34200837.348564;
INSERT INTO v1 ( a ) VALUES ( 1 );
INSERT INTO v2 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b
1 1971-01-31 20:13:57.348564
SELECT * FROM v1;
a b
1 1971-01-31 20:13:57.348564
SELECT * FROM t2;
a b
1 NULL
SELECT * FROM v2;
a b
1 NULL
# 1970-04-11 20:13:57 UTC
SET TIMESTAMP = 8712837.567332;
UPDATE v1 SET a = 2;
UPDATE v2 SET a = 2;
SELECT * FROM t1;
a b
2 1971-01-31 20:13:57.348564
SELECT * FROM v1;
a b
2 1971-01-31 20:13:57.348564
SELECT * FROM t2;
a b
2 1970-04-11 20:13:57.567332
SELECT * FROM v2;
a b
2 1970-04-11 20:13:57.567332
DROP VIEW v1, v2;
DROP TABLE t1, t2;
#
# Test with stored procedures.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NULL,
f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
CREATE PROCEDURE p1() INSERT INTO test.t1( a ) VALUES ( 1 );
CREATE PROCEDURE p2() UPDATE t1 SET a = 2 WHERE a = 1;
# 1971-01-31 20:13:57 UTC
SET TIMESTAMP = 34200837.876544;
CALL p1();
SELECT * FROM t1;
a b c d e f g
1 1971-01-31 20:13:57.876544 1971-01-31 20:13:57.876544 0000-00-00 00:00:00.000000 NULL 1971-01-31 20:13:57.876544 NULL
# 1970-04-11 21:13:57 UTC
SET TIMESTAMP = 8712837.143546;
CALL p2();
SELECT * FROM t1;
a b c d e f g
2 1970-04-11 20:13:57.143546 1971-01-31 20:13:57.876544 1970-04-11 20:13:57.143546 NULL 1971-01-31 20:13:57.876544 1970-04-11 20:13:57.143546
DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP TABLE t1;
#
# Test with triggers.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NULL,
f DATETIME(6),
g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
CREATE TABLE t2 ( a INT );
CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
BEGIN
INSERT INTO t1 ( a ) VALUES ( 1 );
END|
# 1971-01-31 21:13:57 UTC
SET TIMESTAMP = 34200837.978675;
INSERT INTO t2 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
1 1971-01-31 20:13:57.978675 1971-01-31 20:13:57.978675 0000-00-00 00:00:00.000000 NULL NULL 1971-01-31 20:13:57.978675 NULL 1971-01-31 20:13:57.978675
DROP TRIGGER t2_trg;
CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
BEGIN
UPDATE t1 SET a = 2;
END|
# 1970-04-11 21:13:57 UTC
SET TIMESTAMP = 8712837.456789;
INSERT INTO t2 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b c d e f g h i
2 1970-04-11 20:13:57.456789 1971-01-31 20:13:57.978675 1970-04-11 20:13:57.456789 NULL NULL 1971-01-31 20:13:57.978675 1970-04-11 20:13:57.456789 1970-04-11 20:13:57.456789
DROP TABLE t1, t2;
#
# Test where the assignment target is not a column.
#
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
CREATE TABLE t2 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
CREATE TABLE t3 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6) );
CREATE TABLE t4 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6) );
CREATE VIEW v1 AS SELECT a COLLATE latin1_german1_ci AS b FROM t1;
CREATE VIEW v2 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t2;
CREATE VIEW v3 AS SELECT a COLLATE latin1_german1_ci AS b FROM t3;
CREATE VIEW v4 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t4;
INSERT INTO v1 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
SELECT a FROM t1;
a
2007-10-24 00:03:34.010203
INSERT INTO v2 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
SELECT a FROM t2;
a
2007-10-24 00:03:34.010203
INSERT INTO t3 VALUES ();
UPDATE v3 SET b = '2007-10-24 00:03:34.010203';
SELECT a FROM t3;
a
2007-10-24 00:03:34.010203
INSERT INTO t4 VALUES ();
UPDATE v4 SET b = '2007-10-24 00:03:34.010203';
SELECT a FROM t4;
a
2007-10-24 00:03:34.010203
DROP VIEW v1, v2, v3, v4;
DROP TABLE t1, t2, t3, t4;
#
# Test of LOAD DATA/XML INFILE
# This tests behavior of function defaults for TIMESTAMP and DATETIME
# columns. during LOAD ... INFILE.
# As can be seen here, a TIMESTAMP column with only ON UPDATE
# CURRENT_TIMESTAMP will still have CURRENT_TIMESTAMP inserted on LOAD
# ... INFILE if the value is missing. For DATETIME columns a NULL value
# is inserted instead.
#
CREATE TABLE t1 (
a INT,
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
f DATETIME(6),
g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
CREATE TABLE t2 (
a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
e DATETIME(6) NOT NULL,
f DATETIME(6) NOT NULL DEFAULT '1977-01-02 12:13:14',
g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,
h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6) NOT NULL,
i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) NOT NULL
);
SELECT 1 INTO OUTFILE 't3.dat' FROM dual;
SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
INTO OUTFILE 't4.dat'
FROM dual;
SELECT 1, 2 INTO OUTFILE 't5.dat' FROM dual;
# Mon Aug 1 15:11:19 2011 UTC
SET TIMESTAMP = 1312211479.918273;
LOAD DATA INFILE 't3.dat' IGNORE INTO TABLE t1;
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
SELECT * FROM t1;
a 1
b 2011-08-01 15:11:19.918273
c 2011-08-01 15:11:19.918273
d 2011-08-01 15:11:19.918273
e 2011-08-01 15:11:19.918273
f NULL
g NULL
h NULL
i NULL
LOAD DATA INFILE 't4.dat' IGNORE INTO TABLE t2;
Warnings:
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'e' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'f' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'g' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'h' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
SELECT a FROM t2;
a
2011-08-01 15:11:19.918273
SELECT b FROM t2;
b
2011-08-01 15:11:19.918273
SELECT c FROM t2;
c
2011-08-01 15:11:19.918273
SELECT d FROM t2;
d
2011-08-01 15:11:19.918273
# As shown here, supplying a NULL value to a non-nullable
# column with no default value results in the zero date.
SELECT e FROM t2;
e
0000-00-00 00:00:00.000000
# As shown here, supplying a NULL value to a non-nullable column with a
# default value results in the zero date.
SELECT f FROM t2;
f
0000-00-00 00:00:00.000000
# As shown here, supplying a NULL value to a non-nullable column with a
# default function results in the zero date.
SELECT g FROM t2;
g
0000-00-00 00:00:00.000000
# As shown here, supplying a NULL value to a non-nullable DATETIME ON
# UPDATE CURRENT_TIMESTAMP column with no default value results in the
# zero date.
SELECT h FROM t2;
h
0000-00-00 00:00:00.000000
SELECT i FROM t2;
i
0000-00-00 00:00:00.000000
DELETE FROM t1;
DELETE FROM t2;
# Read t3 file into t1
# The syntax will cause a different code path to be taken
# (read_fixed_length()) than under the LOAD ... INTO TABLE t1 command
# above. The code in this path is copy-pasted code from the path taken
# under the syntax used in the previous LOAD command.
LOAD DATA INFILE 't3.dat' IGNORE INTO TABLE t1
FIELDS TERMINATED BY '' ENCLOSED BY '';
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
SELECT b FROM t1;
b
2011-08-01 15:11:19.918273
SELECT c FROM t1;
c
2011-08-01 15:11:19.918273
SELECT d FROM t1;
d
2011-08-01 15:11:19.918273
SELECT e FROM t1;
e
2011-08-01 15:11:19.918273
# Yes, a missing field cannot be NULL using this syntax, so it will
# zero date instead. Says a comment in read_fixed_length() : "No fields
# specified in fields_vars list can be NULL in this format."
# It appears to be by design. This is inconsistent with LOAD DATA INFILE
# syntax in previous test.
SELECT f FROM t1;
f
0000-00-00 00:00:00.000000
SELECT g FROM t1;
g
0000-00-00 00:00:00.000000
# See comment above "SELECT f FROM f1".
SELECT h FROM t1;
h
0000-00-00 00:00:00.000000
SELECT i FROM t1;
i
0000-00-00 00:00:00.000000
DELETE FROM t1;
LOAD DATA INFILE 't5.dat' INTO TABLE t1 ( a, @dummy );
SELECT * FROM t1;
a b c d e f g h i
1 2011-08-01 15:11:19.918273 2011-08-01 15:11:19.918273 0000-00-00 00:00:00.000000 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273
SELECT @dummy;
@dummy
2
DELETE FROM t1;
LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET c = '2005-06-06 08:09:10';
SELECT * FROM t1;
a b c d e f g h i
1 2011-08-01 15:11:19.918273 2005-06-06 08:09:10.000000 0000-00-00 00:00:00.000000 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273
DELETE FROM t1;
LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET g = '2005-06-06 08:09:10';
SELECT * FROM t1;
a b c d e f g h i
1 2011-08-01 15:11:19.918273 2011-08-01 15:11:19.918273 0000-00-00 00:00:00.000000 2011-08-01 15:11:19.918273 NULL 2005-06-06 08:09:10.000000 NULL 2011-08-01 15:11:19.918273
DELETE FROM t1;
# Load a static XML file
LOAD XML INFILE '../../std_data/onerow.xml' INTO TABLE t1
ROWS IDENTIFIED BY '<row>';
Missing tags are treated as NULL
SELECT * FROM t1;
a 1
b 2011-08-01 15:11:19.918273
c 2011-08-01 15:11:19.918273
d 2011-08-01 15:11:19.918273
e 2011-08-01 15:11:19.918273
f NULL
g NULL
h NULL
i NULL
DROP TABLE t1, t2;
#
# Similar LOAD DATA tests in another form
#
# All of this test portion has been run on a pre-WL5874 trunk
# (except that like_b and like_c didn't exist) and all result
# differences are a bug.
# Regarding like_b its definition is the same as b's except
# that the constant default is replaced with a function
# default. Our expectation is that like_b would behave
# like b: if b is set to NULL, or set to 0000-00-00, or set to
# its default, then the same should apply to like_b. Same for
# like_c vs c.
# Mon Aug 1 15:11:19 2011 UTC
SET TIMESTAMP = 1312211479.089786;
SELECT 1 INTO OUTFILE "file1.dat" FROM dual;
SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
INTO OUTFILE "file2.dat" FROM dual;
# Too short row
CREATE TABLE t1 (
dummy INT,
a DATETIME(6) NULL DEFAULT NULL,
b DATETIME(6) NULL DEFAULT "2011-11-18",
like_b DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
c DATETIME(6) NOT NULL DEFAULT "2011-11-18",
like_c DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NOT NULL DEFAULT "2011-05-03",
f TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
g TIMESTAMP(6) NULL DEFAULT NULL,
h INT NULL,
i INT NOT NULL DEFAULT 42
);
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime(6) DEFAULT NULL,
`b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
`like_b` datetime(6) DEFAULT current_timestamp(6),
`c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
`like_c` datetime(6) NOT NULL DEFAULT current_timestamp(6),
`d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE current_timestamp(6),
`e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
`f` timestamp(6) NOT NULL DEFAULT current_timestamp(6),
`g` timestamp(6) NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file1.dat" IGNORE INTO table t1;
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
# It is strange that "like_b" gets NULL when "b" gets 0. But
# this is consistent with how "a" gets NULL when "b" gets 0,
# with how "g" gets NULL when "d" gets 0, and with how "h" gets
# NULL when "i" gets 0. Looks like "DEFAULT
# <non-NULL-constant>" is changed to 0, whereas DEFAULT NULL
# and DEFAULT NOW are changed to NULL.
SELECT * FROM t1;
dummy 1
a NULL
b 0000-00-00 00:00:00.000000
like_b NULL
c 0000-00-00 00:00:00.000000
like_c 0000-00-00 00:00:00.000000
d 0000-00-00 00:00:00.000000
e 2011-08-01 15:11:19.089786
f 2011-08-01 15:11:19.089786
g NULL
h NULL
i 0
delete from t1;
alter table t1
modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime(6) DEFAULT NULL,
`b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
`like_b` datetime(6) DEFAULT current_timestamp(6),
`c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
`like_c` datetime(6) NOT NULL DEFAULT current_timestamp(6),
`d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE current_timestamp(6),
`e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
`f` timestamp NULL DEFAULT current_timestamp(),
`g` timestamp(6) NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file1.dat" IGNORE INTO table t1;
Warnings:
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
SELECT * FROM t1;
dummy 1
a NULL
b 0000-00-00 00:00:00.000000
like_b NULL
c 0000-00-00 00:00:00.000000
like_c 0000-00-00 00:00:00.000000
d 0000-00-00 00:00:00.000000
e 2011-08-01 15:11:19.089786
f NULL
g NULL
h NULL
i 0
delete from t1;
drop table t1;
# Conclusion derived from trunk's results:
# DATETIME DEFAULT <non-NULL-constant> (b,c) gets 0000-00-00,
# DATETIME DEFAULT NULL (a) gets NULL,
# TIMESTAMP NULL DEFAULT <non-NULL-constant> (d) gets 0000-00-00,
# TIMESTAMP NULL DEFAULT NULL (g) gets NULL,
# TIMESTAMP NULL DEFAULT NOW (f after ALTER) gets NULL,
# TIMESTAMP NOT NULL (f before ALTER, e) gets NOW.
### Loading NULL ###
CREATE TABLE t1 (
dummy INT,
a DATETIME(6) NULL DEFAULT NULL,
b DATETIME(6) NULL DEFAULT "2011-11-18",
like_b DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
c DATETIME(6) NOT NULL DEFAULT "2011-11-18",
like_c DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
d TIMESTAMP(6) NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP(6),
e TIMESTAMP(6) NOT NULL DEFAULT "2011-05-03",
f TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
g TIMESTAMP(6) NULL DEFAULT NULL,
h INT NULL,
i INT NOT NULL DEFAULT 42
);
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime(6) DEFAULT NULL,
`b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
`like_b` datetime(6) DEFAULT current_timestamp(6),
`c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
`like_c` datetime(6) NOT NULL DEFAULT current_timestamp(6),
`d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE current_timestamp(6),
`e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
`f` timestamp(6) NOT NULL DEFAULT current_timestamp(6),
`g` timestamp(6) NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file2.dat" IGNORE INTO table t1;
Warnings:
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
SELECT * FROM t1;
dummy NULL
a NULL
b NULL
like_b NULL
c 0000-00-00 00:00:00.000000
like_c 0000-00-00 00:00:00.000000
d NULL
e 2011-08-01 15:11:19.089786
f 2011-08-01 15:11:19.089786
g NULL
h NULL
i 0
delete from t1;
alter table t1
modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
# There is no promotion
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dummy` int(11) DEFAULT NULL,
`a` datetime(6) DEFAULT NULL,
`b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
`like_b` datetime(6) DEFAULT current_timestamp(6),
`c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
`like_c` datetime(6) NOT NULL DEFAULT current_timestamp(6),
`d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE current_timestamp(6),
`e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
`f` timestamp NULL DEFAULT current_timestamp(),
`g` timestamp(6) NULL DEFAULT NULL,
`h` int(11) DEFAULT NULL,
`i` int(11) NOT NULL DEFAULT 42
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
LOAD DATA INFILE "file2.dat" IGNORE INTO table t1;
Warnings:
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
SELECT * FROM t1;
dummy NULL
a NULL
b NULL
like_b NULL
c 0000-00-00 00:00:00.000000
like_c 0000-00-00 00:00:00.000000
d NULL
e 2011-08-01 15:11:19.089786
f NULL
g NULL
h NULL
i 0
delete from t1;
# Conclusion derived from trunk's results:
# DATETIME NULL (a,b) gets NULL,
# DATETIME NOT NULL (c) gets 0000-00-00,
# TIMESTAMP NULL (d,f,g) gets NULL,
# TIMESTAMP NOT NULL (e) gets NOW.
drop table t1;
#
# Test of updatable views with check options. The option can be violated
# using ON UPDATE updates which is very strange as this offers a loophole
# in this integrity check.
#
SET TIME_ZONE = "+03:00";
# 1970-01-01 03:16:40
SET TIMESTAMP = 1000.123456;
CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6));
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b
1 1970-01-01 03:16:40.123456
CREATE VIEW v1 AS SELECT * FROM t1 WHERE b <= '1970-01-01 03:16:40.123456'
WITH CHECK OPTION;
SELECT * FROM v1;
a b
1 1970-01-01 03:16:40.123456
# 1970-01-01 03:33:20
SET TIMESTAMP = 2000.000234;
UPDATE v1 SET a = 2;
ERROR 44000: CHECK OPTION failed `test`.`v1`
SELECT * FROM t1;
a b
1 1970-01-01 03:16:40.123456
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT '1973-08-14 09:11:22.089786' ON UPDATE CURRENT_TIMESTAMP(6),
c INT KEY
);
# 1973-08-14 09:11:22 UTC
SET TIMESTAMP = 114167482.534231;
INSERT INTO t1 ( c ) VALUES ( 1 );
CREATE VIEW v1 AS
SELECT *
FROM t1
WHERE a >= '1973-08-14 09:11:22'
WITH LOCAL CHECK OPTION;
SELECT * FROM v1;
a c
1973-08-14 09:11:22.089786 1
SET TIMESTAMP = 1.126789;
INSERT INTO v1 ( c ) VALUES ( 1 ) ON DUPLICATE KEY UPDATE c = 2;
ERROR 44000: CHECK OPTION failed `test`.`v1`
SELECT * FROM v1;
a c
1973-08-14 09:11:22.089786 1
DROP VIEW v1;
DROP TABLE t1;
#
# Bug 13095459 - MULTI-TABLE UPDATE MODIFIES A ROW TWICE
#
CREATE TABLE t1 (
a INT,
b INT,
ts TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY ( a, ts )
);
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
CREATE TABLE t2 ( a INT );
INSERT INTO t2 VALUES ( 1 );
UPDATE t1 STRAIGHT_JOIN t2
SET t1.b = t1.b + 1
WHERE t1.a = 1 AND t1.ts >= '2000-09-28 00:00:00';
SELECT b FROM t1;
b
1
DROP TABLE t1, t2;
#
# Bug#11745578: 17392: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT
# CURRENT_TIMESTAMP INSERTS ZERO
#
SET timestamp = 1000;
CREATE TABLE t1 ( b INT );
INSERT INTO t1 VALUES (1);
ALTER TABLE t1 ADD COLUMN a6 DATETIME(6) DEFAULT NOW(6) ON UPDATE NOW(6) FIRST;
ALTER TABLE t1 ADD COLUMN a5 DATETIME(6) DEFAULT NOW(6) FIRST;
ALTER TABLE t1 ADD COLUMN a4 DATETIME(6) ON UPDATE NOW(6) FIRST;
ALTER TABLE t1 ADD COLUMN a3 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE NOW(6) FIRST;
ALTER TABLE t1 ADD COLUMN a2 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) FIRST;
ALTER TABLE t1 ADD COLUMN a1 TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6) FIRST;
ALTER TABLE t1 ADD COLUMN c1 TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6) AFTER b;
ALTER TABLE t1 ADD COLUMN c2 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) AFTER c1;
ALTER TABLE t1 ADD COLUMN c3 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE NOW(6) AFTER c2;
ALTER TABLE t1 ADD COLUMN c4 DATETIME(6) ON UPDATE NOW(6) AFTER c3;
ALTER TABLE t1 ADD COLUMN c5 DATETIME(6) DEFAULT NOW(6) AFTER c4;
ALTER TABLE t1 ADD COLUMN c6 DATETIME(6) DEFAULT NOW(6) ON UPDATE NOW(6) AFTER c5;
SELECT * FROM t1;
a1 0000-00-00 00:00:00.000000
a2 1970-01-01 03:16:40.000000
a3 1970-01-01 03:16:40.000000
a4 NULL
a5 1970-01-01 03:16:40.000000
a6 1970-01-01 03:16:40.000000
b 1
c1 0000-00-00 00:00:00.000000
c2 1970-01-01 03:16:40.000000
c3 1970-01-01 03:16:40.000000
c4 NULL
c5 1970-01-01 03:16:40.000000
c6 1970-01-01 03:16:40.000000
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b DATETIME(6) DEFAULT NOW(6) );
INSERT INTO t1 VALUES ();
SET timestamp = 1000000000;
ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3);
ALTER TABLE t1 MODIFY COLUMN b DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3);
SELECT * FROM t1;
a b
1970-01-01 03:16:40.000 1970-01-01 03:16:40.000
DROP TABLE t1;
CREATE TABLE t1 (
a TIMESTAMP(6) NOT NULL DEFAULT '1999-12-01 11:22:33' ON UPDATE CURRENT_TIMESTAMP(6),
b DATETIME(6) DEFAULT '1999-12-01 11:22:33'
);
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP(6) DEFAULT NOW(6);
ALTER TABLE t1 MODIFY COLUMN b DATETIME(6) DEFAULT NOW(6);
INSERT INTO t1 VALUES ();
SELECT * FROM t1;
a b
1999-12-01 11:22:33.000000 1999-12-01 11:22:33.000000
2001-09-09 04:46:40.000000 2001-09-09 04:46:40.000000
DROP TABLE t1;
create table t1 (t timestamp, i int, v timestamp as (t) virtual, key(v));
insert t1 (t,i) values ('2006-03-01 23:59:59',1);
update t1 set i = 2;
check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
create table t1 (t timestamp, i int);
create trigger tr1 before update on t1 for each row set @new:=new.t;
insert t1 (t,i) values ('2006-03-01 23:59:59', 1);
update t1 set i = 2;
select if(@new = t, 'correct', 'wrong') from t1;
if(@new = t, 'correct', 'wrong')
correct
drop table t1;
create table t1 (i int, j int as (i));
create trigger tr1 before update on t1 for each row set @new:=new.j;
insert t1 (i) values (1);
update t1, t1 as t2 set t1.i = 2;
select if(@new = j, 'correct', 'wrong') from t1;
if(@new = j, 'correct', 'wrong')
correct
drop table t1;
create table t1 (a int, b varchar(20) default 'foo');
insert t1 values (1,'bla'),(2, 'bar');
select * from t1;
a b
1 bla
2 bar
update t1 set b=default where a=1;
select * from t1;
a b
1 foo
2 bar
drop table t1;
create table t1 (
a int,
b timestamp default '2010-10-10 10:10:10' on update now(),
c varchar(100) default 'x');
insert t1 (a) values (1),(2);
select * from t1;
a b c
1 2010-10-10 10:10:10 x
2 2010-10-10 10:10:10 x
set timestamp=unix_timestamp('2011-11-11 11-11-11');
update t1 set b=default, c=default(b) where a=1;
select * from t1;
a b c
1 2010-10-10 10:10:10 2010-10-10 10:10:10
2 2010-10-10 10:10:10 x
drop table t1;
set timestamp=default;