mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
8dca4cf53f
remove a special treatment of a bare DEFAULT keyword that made it
behave inconsistently and differently from DEFAULT(column).
Now all forms of the explicit assignment of a default column value
behave identically, and all count as an explicitly assigned value
(for the purpose of ON UPDATE NOW).
followup for c7c481f4d9
3147 lines
109 KiB
Text
3147 lines
109 KiB
Text
#
|
|
# 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 dont support function
|
|
# defaults.
|
|
#
|
|
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
|
|
CREATE OR REPLACE TABLE t1( a TINYINT ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a SMALLINT ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a MEDIUMINT ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a INT ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a BIGINT ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a FLOAT ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a DECIMAL ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a DATE ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a TIME ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a YEAR ON UPDATE CURRENT_TIMESTAMP );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
SET TIMESTAMP = 2000.876543;
|
|
INSERT INTO t2( a ) VALUES ( 3 );
|
|
SELECT * FROM t2;
|
|
b a
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 dont support function
|
|
# defaults.
|
|
#
|
|
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
|
|
CREATE OR REPLACE TABLE t1( a TINYINT ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a SMALLINT ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a MEDIUMINT ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a INT ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a BIGINT ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a FLOAT ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a DECIMAL ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a DATE ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a TIME ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
CREATE OR REPLACE TABLE t1( a YEAR ON UPDATE CURRENT_TIMESTAMP(6) );
|
|
ERROR HY000: Invalid ON UPDATE clause for 'a' column
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
SET TIMESTAMP = 2000.876543;
|
|
INSERT INTO t2( a ) VALUES ( 3 );
|
|
SELECT * FROM t2;
|
|
b a
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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;
|