set @old_debug= @@debug_dbug; create table t_tmp(a int, b int); set debug_dbug= "+d,test_pseudo_invisible"; create table t1(a int); set debug_dbug=@old_debug; insert into t1 values(1); desc t1; Field Type Null Key Default Extra a int(11) YES NULL show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 select a , invisible from t1; a invisible 1 9 insert into t1(a, invisible) values(99,99); ERROR 42S22: Unknown column 'invisible' in 'field list' select default(invisible) from t1; ERROR 42S22: Unknown column 'invisible' in 'field list' insert into t1(invisible) values(99); ERROR 42S22: Unknown column 'invisible' in 'field list' insert into t_tmp select a, invisible from t1; insert into t1 select * from t_tmp; ERROR 21S01: Column count doesn't match value count at row 1 insert into t1(a,invisible) select * from t_tmp; ERROR 42S22: Unknown column 'invisible' in 'field list' select a , invisible from t1; a invisible 1 9 insert into t1 values (5), (invisible+1); select a , invisible from t1; a invisible 1 9 5 9 10 9 delete from t1 where a > 1; update t1 set a = invisible where a=1; select a , invisible from t1; a invisible 9 9 update t1 set a = (select invisible+100 from t1 limit 1) where a=(select a from t1 limit 1); select a , invisible from t1; a invisible 109 9 update t1 set invisible = 23 where a=(select a from t1 limit 1); ERROR 42S22: Unknown column 'invisible' in 'field list' update t1 set invisible = 101 where a=(select a from t1 limit 1); ERROR 42S22: Unknown column 'invisible' in 'field list' update t1 set invisible = (select invisible+100 from t1 limit 1) where a=(select invisible from t1 limit 1); ERROR 42S22: Unknown column 'invisible' in 'field list' select a , invisible from t1; a invisible 109 9 set @a=12; update t1 set invisible = (select @a from dual) where a=(select a from t1 limit 1); ERROR 42S22: Unknown column 'invisible' in 'field list' select a , invisible from t1; a invisible 109 9 update t1 set invisible = (select invisible+100 from t1 limit 1) where a=(select a from t1 limit 1); ERROR 42S22: Unknown column 'invisible' in 'field list' select a , invisible from t1; a invisible 109 9 set @a=(select invisible from t1 limit 1); select @a from dual; @a 9 alter table t1 add constraint a check (invisible > 2); ERROR 42S22: Unknown column 'invisible' in 'CHECK' set debug_dbug= "+d,test_pseudo_invisible"; create table t2(a int, b int as (invisible +2) virtual); ERROR 42S22: Unknown column 'invisible' in 'GENERATED ALWAYS AS' create table t2(a int , b int); insert into t2 values(2,2); insert into t2 select a, invisible from t1; set debug_dbug=@old_debug; select * from t1; a 109 select invisible ,a from t1; invisible a 9 109 drop table t1,t2,t_tmp; set debug_dbug= "+d,test_completely_invisible"; create table t1(a int); set debug_dbug=@old_debug; desc t1; Field Type Null Key Default Extra a int(11) YES NULL show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 insert into t1 values(1); select * from t1; a 1 select invisible ,a from t1; ERROR 42S22: Unknown column 'invisible' in 'field list' set debug_dbug= "+d,test_completely_invisible"; select invisible ,a from t1; invisible a 9 1 set debug_dbug=@old_debug; create table t2 (invisible int); select * from t1 join t2 using (invisible); ERROR 42S22: Unknown column 'invisible' in 'from clause' select * from t2 join t1 using (invisible); ERROR 42S22: Unknown column 'invisible' in 'from clause' insert t2 values (8),(9); select * from t1 natural join t2; a invisible 1 8 1 9 select * from t2 natural join t1; invisible a 8 1 9 1 drop table t1, t2; set debug_dbug= "+d,test_pseudo_invisible"; create table t1(a int); set debug_dbug=@old_debug; desc t1; Field Type Null Key Default Extra a int(11) YES NULL insert into t1 values(1); select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 change invisible b int; ERROR 42S22: Unknown column 'invisible' in 't1' select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 modify invisible char; ERROR 42S22: Unknown column 'invisible' in 't1' select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 drop invisible; ERROR 42000: Can't DROP COLUMN `invisible`; check that it exists select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 add invisible int; ERROR 42S21: Duplicate column name 'invisible' select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 add invisible2 int default 2; select * from t1; a invisible2 1 2 select invisible ,a from t1; invisible a 9 1 create trigger trg before insert on t1 for each row set new.invisible=1; ERROR 42S22: Unknown column 'invisible' in 'NEW' create trigger trg before insert on t1 for each row set @a:=new.invisible; drop table t1; set debug_dbug= "+d,test_completely_invisible"; create table t1(a int); set debug_dbug=@old_debug; create trigger trg before insert on t1 for each row set new.invisible=1; ERROR 42S22: Unknown column 'invisible' in 'NEW' create trigger trg before insert on t1 for each row set @a:=new.invisible; ERROR 42S22: Unknown column 'invisible' in 'NEW' set debug_dbug= "+d,test_completely_invisible"; desc t1; Field Type Null Key Default Extra a int(11) YES NULL insert into t1 values(1); select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 change invisible b int; ERROR 42S22: Unknown column 'invisible' in 't1' select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 modify invisible char; ERROR 42S22: Unknown column 'invisible' in 't1' select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 drop invisible; ERROR 42000: Can't DROP COLUMN `invisible`; check that it exists select * from t1; a 1 select invisible ,a from t1; invisible a 9 1 ALTER table t1 add invisible int; select * from t1; a invisible 1 NULL select invisible1, invisible ,a from t1; invisible1 invisible a 9 NULL 1 ALTER table t1 add hid int default 2; select * from t1; a invisible hid 1 NULL 2 select invisible ,a from t1; invisible a NULL 1 drop table t1; set debug_dbug=@old_debug; Create table t1( a int default(99) invisible, b int); insert into t1 values(1); insert into t1 values(2); insert into t1 values(3); insert into t1 values(4); select * from t1 order by b; b 1 2 3 4 alter table t1 add index(a); alter table t1 add index(a,b); show index from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment t1 1 a 1 a A NULL NULL NULL YES BTREE t1 1 a_2 1 a A NULL NULL NULL YES BTREE t1 1 a_2 2 b A NULL NULL NULL YES BTREE drop table t1; set debug_dbug= "+d,test_pseudo_invisible"; Create table t1( a int default(99) invisible, b int); Create table t2( a int default(99) invisible, b int, unique(invisible)); ERROR 42000: Key column 'invisible' doesn't exist in table set debug_dbug=@old_debug; insert into t1 values(1); insert into t1 values(2); insert into t1 values(3); insert into t1 values(4); select * from t1 order by b; b 1 2 3 4 select invisible, a, b from t1 order by b; invisible a b 9 99 1 9 99 2 9 99 3 9 99 4 alter table t1 add index(invisible); ERROR 42000: Key column 'invisible' doesn't exist in table alter table t1 add index(b,invisible); ERROR 42000: Key column 'invisible' doesn't exist in table show index from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment drop table t1; set debug_dbug= "+d,test_completely_invisible"; Create table t1( a int default(99) invisible, b int); Create table t2( a int default(99) invisible, b int, unique(invisible)); ERROR 42000: Key column 'invisible' doesn't exist in table insert into t1 values(1); insert into t1 values(2); insert into t1 values(3); insert into t1 values(4); select * from t1 order by b; b 1 2 3 4 select invisible, a, b from t1 order by b; invisible a b 9 99 1 9 99 2 9 99 3 9 99 4 set debug_dbug=@old_debug; alter table t1 add index(invisible); ERROR 42000: Key column 'invisible' doesn't exist in table alter table t1 add index(b,invisible); ERROR 42000: Key column 'invisible' doesn't exist in table show index from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment drop table t1; set debug_dbug= "+d,test_completely_invisible,test_invisible_index"; Create table t1( a int default(99) , b int,c int, index(b)); set debug_dbug=@old_debug; Show index from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment t1 1 b 1 b A NULL NULL NULL YES BTREE select * from INFORMATION_SCHEMA.STATISTICS where TABLE_SCHEMA ='test' and table_name='t1'; TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT INDEX_COMMENT def test t1 1 test b 1 b A NULL NULL NULL YES BTREE show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT 99, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, KEY `b` (`b`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 insert into t1 values(1,1,1); insert into t1 values(2,2,2); insert into t1 values(3,3,3); insert into t1 values(4,4,4); insert into t1 values(5,5,5); insert into t1 values(6,6,6); insert into t1 values(7,7,7); set debug_dbug= "+d,test_completely_invisible,test_invisible_index"; select invisible, a ,b from t1 order by b; invisible a b 9 1 1 9 2 2 9 3 3 9 4 4 9 5 5 9 6 6 9 7 7 explain select * from t1 where invisible =9; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL invisible NULL NULL NULL 7 Using where alter table t1 add x int default 3; select invisible, a ,b from t1; invisible a b 9 1 1 9 2 2 9 3 3 9 4 4 9 5 5 9 6 6 9 7 7 set debug_dbug=@old_debug; Show index from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment t1 1 b 1 b A NULL NULL NULL YES BTREE create index a1 on t1(invisible); ERROR 42000: Key column 'invisible' doesn't exist in table set debug_dbug= "+d,test_completely_invisible,test_invisible_index"; drop index invisible on t1; ERROR 42000: Can't DROP INDEX `invisible`; check that it exists explain select * from t1 where invisible =9; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL invisible NULL NULL NULL 7 Using where create index invisible on t1(c); explain select * from t1 where invisible =9; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL invisible_2 NULL NULL NULL 7 Using where show indexes in t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment t1 1 b 1 b A NULL NULL NULL YES BTREE t1 1 invisible 1 c A NULL NULL NULL YES BTREE t1 1 invisible_2 1 invisible A NULL NULL NULL YES BTREE drop table t1; set @old_debug= @@debug_dbug; CREATE TABLE t1 (i INT ); SET debug_dbug="+d,test_completely_invisible,test_invisible_index"; CREATE TABLE t2 LIKE t1; SET debug_dbug= DEFAULT; DROP TABLE t1, t2; # # MDEV-20210 # If you have an INVISIBLE VIRTUAL column, SHOW CREATE TABLE doesn't list it as INVISIBLE # CREATE TABLE t1 (i INT, v int GENERATED ALWAYS AS (1) VIRTUAL INVISIBLE); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `i` int(11) DEFAULT NULL, `v` int(11) GENERATED ALWAYS AS (1) VIRTUAL INVISIBLE ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1;