199 lines
5.3 KiB
Plaintext
199 lines
5.3 KiB
Plaintext
SET sql_mode = 'traditional';
|
|
|
|
#------------------------------------------------------------------
|
|
# Checking INSERT INTO ... SELECT ...
|
|
#------------------------------------------------------------------
|
|
|
|
# - No column list (all columns) + NULL-value for NOT NULL column.
|
|
CREATE TABLE t1(a INT, b INT NOT NULL) ENGINE=MyISAM;
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
CREATE TABLE t2(a INT, b INT NOT NULL, c INT NOT NULL, d INT NOT NULL) ENGINE=MyISAM;
|
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
|
CREATE TABLE t1_data(a INT, b INT) ENGINE=MyISAM;
|
|
INSERT INTO t1_data VALUES
|
|
(11, 12),
|
|
(NULL, 22),
|
|
(31, NULL),
|
|
(NULL, NULL);
|
|
CREATE TABLE t2_data(a INT, b INT, c INT, d INT) ENGINE=MyISAM;
|
|
INSERT INTO t2_data VALUES
|
|
(11, 12, 13, 14),
|
|
(NULL, 22, 23, 24),
|
|
(31, NULL, 33, 34),
|
|
(41, 42, NULL, 44),
|
|
(51, 52, 53, NULL),
|
|
(NULL, NULL, NULL, NULL);
|
|
|
|
INSERT INTO t1 SELECT * FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
INSERT INTO v1 SELECT a * 10, b * 10 FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t1;
|
|
a b
|
|
11 12
|
|
110 120
|
|
NULL 22
|
|
NULL 220
|
|
DELETE FROM t1;
|
|
|
|
REPLACE INTO t1 SELECT * FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
REPLACE INTO v1 SELECT a * 10, b * 10 FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t1;
|
|
a b
|
|
11 12
|
|
110 120
|
|
NULL 22
|
|
NULL 220
|
|
DELETE FROM t1;
|
|
|
|
# - No column list (all columns) + NULL-value for NOT NULL column.
|
|
INSERT INTO t2 SELECT * FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
INSERT INTO v2 SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t2;
|
|
a b c d
|
|
11 12 13 14
|
|
110 120 130 140
|
|
NULL 22 23 24
|
|
NULL 220 230 240
|
|
DELETE FROM t2;
|
|
|
|
# - No column list (all columns) + NULL-value for NOT NULL column.
|
|
REPLACE INTO t2 SELECT * FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
REPLACE INTO v2 SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t2;
|
|
a b c d
|
|
11 12 13 14
|
|
110 120 130 140
|
|
NULL 22 23 24
|
|
NULL 220 230 240
|
|
DELETE FROM t2;
|
|
|
|
# - All columns + NULL-value for NOT NULL column.
|
|
|
|
INSERT INTO t1(a, b) SELECT * FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
INSERT INTO v1(a, b) SELECT a * 10, b * 10 FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t1;
|
|
a b
|
|
11 12
|
|
110 120
|
|
NULL 22
|
|
NULL 220
|
|
DELETE FROM t1;
|
|
|
|
REPLACE INTO t1(a, b) SELECT * FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
REPLACE INTO v1(a, b) SELECT a * 10, b * 10 FROM t1_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t1;
|
|
a b
|
|
11 12
|
|
110 120
|
|
NULL 22
|
|
NULL 220
|
|
DELETE FROM t1;
|
|
|
|
INSERT INTO t2(a, b, c, d) SELECT * FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
INSERT INTO v2(a, b, c, d) SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t2;
|
|
a b c d
|
|
11 12 13 14
|
|
110 120 130 140
|
|
NULL 22 23 24
|
|
NULL 220 230 240
|
|
DELETE FROM t2;
|
|
|
|
REPLACE INTO t2(a, b, c, d) SELECT * FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
REPLACE INTO v2(a, b, c, d) SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
ERROR 23000: Column 'b' cannot be null
|
|
|
|
# The following SELECT output should have 4 rows.
|
|
# t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
SELECT * FROM t2;
|
|
a b c d
|
|
11 12 13 14
|
|
110 120 130 140
|
|
NULL 22 23 24
|
|
NULL 220 230 240
|
|
DELETE FROM t2;
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t1_data;
|
|
DROP TABLE t2_data;
|
|
DROP VIEW v1;
|
|
DROP VIEW v2;
|
|
"Test for multi table update (across engines)"
|
|
CREATE TABLE t1(a1 INT NOT NULL, a2 INT) ENGINE = INNODB;
|
|
CREATE TABLE t2(a1 INT NOT NULL, a2 INT) ENGINE = MyISAM;
|
|
INSERT INTO t1 VALUES (1, NULL),(2, 2);
|
|
INSERT INTO t2 VALUES (1, NULL),(2876543, 2098);
|
|
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1
|
|
FOR EACH ROW
|
|
SET NEW.a1 = 10;
|
|
CREATE TRIGGER t2_bu BEFORE UPDATE ON t2
|
|
FOR EACH ROW
|
|
SET NEW.a1 = 20;
|
|
UPDATE t1, t2 SET t1.a1 = NULL , t2.a1 = NULL;
|
|
SELECT * FROM t1;
|
|
a1 a2
|
|
10 NULL
|
|
10 2
|
|
SELECT * FROM t2;
|
|
a1 a2
|
|
20 NULL
|
|
20 2098
|
|
DROP TRIGGER t1_bu;
|
|
DROP TRIGGER t2_bu;
|
|
DROP TABLE t1, t2;
|
|
"Test for multi table update (across engines)"
|
|
CREATE TABLE t1(a1 INT NOT NULL, a2 INT) ENGINE = INNODB;
|
|
CREATE TABLE t2(a1 INT NOT NULL, a2 INT) ENGINE = MyISAM;
|
|
INSERT INTO t1 VALUES (1, NULL),(2, 2);
|
|
INSERT INTO t2 VALUES (1, NULL),(2876543, 20111098);
|
|
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1
|
|
FOR EACH ROW
|
|
SET NEW.a1 = NULL;
|
|
UPDATE t1, t2 SET t1.a1 = 1 , t2.a1 = 2;
|
|
ERROR 23000: Column 'a1' cannot be null
|
|
SELECT * FROM t1;
|
|
a1 a2
|
|
1 NULL
|
|
2 2
|
|
SELECT * FROM t2;
|
|
a1 a2
|
|
1 NULL
|
|
2876543 20111098
|
|
DROP TRIGGER t1_bu;
|
|
DROP TABLE t1, t2;
|