alter_table.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:10k
- #
- # Test of alter table
- #
- --disable_warnings
- drop table if exists t1,t2;
- drop database if exists mysqltest;
- --enable_warnings
- create table t1 (
- col1 int not null auto_increment primary key,
- col2 varchar(30) not null,
- col3 varchar (20) not null,
- col4 varchar(4) not null,
- col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
- col6 int not null, to_be_deleted int);
- insert into t1 values (2,4,3,5,"PENDING",1,7);
- alter table t1
- add column col4_5 varchar(20) not null after col4,
- add column col7 varchar(30) not null after col5,
- add column col8 datetime not null, drop column to_be_deleted,
- change column col2 fourth varchar(30) not null after col3,
- modify column col6 int not null first;
- select * from t1;
- drop table t1;
- create table t1 (bandID MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY, payoutID SMALLINT UNSIGNED NOT NULL);
- insert into t1 (bandID,payoutID) VALUES (1,6),(2,6),(3,4),(4,9),(5,10),(6,1),(7,12),(8,12);
- alter table t1 add column new_col int, order by payoutid,bandid;
- select * from t1;
- alter table t1 order by bandid,payoutid;
- select * from t1;
- drop table t1;
- # Check that pack_keys and dynamic length rows are not forced.
- CREATE TABLE t1 (
- GROUP_ID int(10) unsigned DEFAULT '0' NOT NULL,
- LANG_ID smallint(5) unsigned DEFAULT '0' NOT NULL,
- NAME varchar(80) DEFAULT '' NOT NULL,
- PRIMARY KEY (GROUP_ID,LANG_ID),
- KEY NAME (NAME));
- #show table status like "t1";
- ALTER TABLE t1 CHANGE NAME NAME CHAR(80) not null;
- --replace_column 8 #
- SHOW FULL COLUMNS FROM t1;
- DROP TABLE t1;
- #
- # Test of ALTER TABLE ... ORDER BY
- #
- create table t1 (n int);
- insert into t1 values(9),(3),(12),(10);
- alter table t1 order by n;
- select * from t1;
- drop table t1;
- CREATE TABLE t1 (
- id int(11) unsigned NOT NULL default '0',
- category_id tinyint(4) unsigned NOT NULL default '0',
- type_id tinyint(4) unsigned NOT NULL default '0',
- body text NOT NULL,
- user_id int(11) unsigned NOT NULL default '0',
- status enum('new','old') NOT NULL default 'new',
- PRIMARY KEY (id)
- ) ENGINE=MyISAM;
- ALTER TABLE t1 ORDER BY t1.id, t1.status, t1.type_id, t1.user_id, t1.body;
- DROP TABLE t1;
- #
- # The following combination found a hang-bug in MyISAM
- #
- CREATE TABLE t1 (AnamneseId int(10) unsigned NOT NULL auto_increment,B BLOB,PRIMARY KEY (AnamneseId)) engine=myisam;
- insert into t1 values (null,"hello");
- LOCK TABLES t1 WRITE;
- ALTER TABLE t1 ADD Column new_col int not null;
- UNLOCK TABLES;
- OPTIMIZE TABLE t1;
- DROP TABLE t1;
- #
- # Drop and add an auto_increment column
- #
- create table t1 (i int unsigned not null auto_increment primary key);
- insert into t1 values (null),(null),(null),(null);
- alter table t1 drop i,add i int unsigned not null auto_increment, drop primary key, add primary key (i);
- select * from t1;
- drop table t1;
- #
- # Bug #2628: 'alter table t1 rename mysqltest.t1' silently drops mysqltest.t1
- # if it exists
- #
- create table t1 (name char(15));
- insert into t1 (name) values ("current");
- create database mysqltest;
- create table mysqltest.t1 (name char(15));
- insert into mysqltest.t1 (name) values ("mysqltest");
- select * from t1;
- select * from mysqltest.t1;
- --error 1050
- alter table t1 rename mysqltest.t1;
- select * from t1;
- select * from mysqltest.t1;
- drop table t1;
- drop database mysqltest;
- #
- # ALTER TABLE ... ENABLE/DISABLE KEYS
- create table t1 (n1 int not null, n2 int, n3 int, n4 float,
- unique(n1),
- key (n1, n2, n3, n4),
- key (n2, n3, n4, n1),
- key (n3, n4, n1, n2),
- key (n4, n1, n2, n3) );
- alter table t1 disable keys;
- show keys from t1;
- #let $1=10000;
- let $1=10;
- while ($1)
- {
- eval insert into t1 values($1,RAND()*1000,RAND()*1000,RAND());
- dec $1;
- }
- alter table t1 enable keys;
- show keys from t1;
- drop table t1;
- #
- # Alter table and rename
- #
- create table t1 (i int unsigned not null auto_increment primary key);
- alter table t1 rename t2;
- alter table t2 rename t1, add c char(10) comment "no comment";
- show columns from t1;
- drop table t1;
- # implicit analyze
- create table t1 (a int, b int);
- let $1=100;
- while ($1)
- {
- eval insert into t1 values(1,$1), (2,$1), (3, $1);
- dec $1;
- }
- alter table t1 add unique (a,b), add key (b);
- show keys from t1;
- analyze table t1;
- show keys from t1;
- drop table t1;
- #
- # Test of ALTER TABLE DELAYED
- #
- CREATE TABLE t1 (i int(10), index(i) );
- ALTER TABLE t1 DISABLE KEYS;
- INSERT DELAYED INTO t1 VALUES(1),(2),(3);
- ALTER TABLE t1 ENABLE KEYS;
- drop table t1;
- #
- # Test ALTER TABLE ENABLE/DISABLE keys when things are locked
- #
- CREATE TABLE t1 (
- Host varchar(16) binary NOT NULL default '',
- User varchar(16) binary NOT NULL default '',
- PRIMARY KEY (Host,User)
- ) ENGINE=MyISAM;
- ALTER TABLE t1 DISABLE KEYS;
- LOCK TABLES t1 WRITE;
- INSERT INTO t1 VALUES ('localhost','root'),('localhost',''),('games','monty');
- SHOW INDEX FROM t1;
- ALTER TABLE t1 ENABLE KEYS;
- UNLOCK TABLES;
- CHECK TABLES t1;
- DROP TABLE t1;
- #
- # Test with two keys
- #
- CREATE TABLE t1 (
- Host varchar(16) binary NOT NULL default '',
- User varchar(16) binary NOT NULL default '',
- PRIMARY KEY (Host,User),
- KEY (Host)
- ) ENGINE=MyISAM;
- ALTER TABLE t1 DISABLE KEYS;
- SHOW INDEX FROM t1;
- LOCK TABLES t1 WRITE;
- INSERT INTO t1 VALUES ('localhost','root'),('localhost','');
- SHOW INDEX FROM t1;
- ALTER TABLE t1 ENABLE KEYS;
- SHOW INDEX FROM t1;
- UNLOCK TABLES;
- CHECK TABLES t1;
- # Test RENAME with LOCK TABLES
- LOCK TABLES t1 WRITE;
- ALTER TABLE t1 RENAME t2;
- UNLOCK TABLES;
- select * from t2;
- DROP TABLE t2;
- #
- # Test disable keys with locking
- #
- CREATE TABLE t1 (
- Host varchar(16) binary NOT NULL default '',
- User varchar(16) binary NOT NULL default '',
- PRIMARY KEY (Host,User),
- KEY (Host)
- ) ENGINE=MyISAM;
- LOCK TABLES t1 WRITE;
- ALTER TABLE t1 DISABLE KEYS;
- SHOW INDEX FROM t1;
- DROP TABLE t1;
- #
- # BUG#4717 - check for valid table names
- #
- create table t1 (a int);
- --error 1103
- alter table t1 rename to `t1\`;
- --error 1103
- rename table t1 to `t1\`;
- drop table t1;
- #
- # BUG#6236 - ALTER TABLE MODIFY should set implicit NOT NULL on PK columns
- #
- drop table if exists t1, t2;
- create table t1 ( a varchar(10) not null primary key ) engine=myisam;
- create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1);
- flush tables;
- alter table t1 modify a varchar(10);
- show create table t2;
- flush tables;
- alter table t1 modify a varchar(10) not null;
- show create table t2;
- drop table if exists t1, t2;
- # The following is also part of bug #6236 (CREATE TABLE didn't properly count
- # not null columns for primary keys)
- create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM;
- insert into t1 (a) values(1);
- --replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X
- show table status like 't1';
- alter table t1 modify a int;
- --replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X
- show table status like 't1';
- drop table t1;
- create table t1 (a int not null, b int not null, c int not null, d int not null, e int not null, f int not null, g int not null, h int not null,i int not null, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM;
- insert into t1 (a) values(1);
- --replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X
- show table status like 't1';
- drop table t1;
- #
- # Test that data get converted when character set is changed
- # Test that data doesn't get converted when src or dst is BINARY/BLOB
- #
- set names koi8r;
- create table t1 (a char(10) character set koi8r);
- insert into t1 values ('耘釉');
- select a,hex(a) from t1;
- alter table t1 change a a char(10) character set cp1251;
- select a,hex(a) from t1;
- alter table t1 change a a binary(10);
- select a,hex(a) from t1;
- alter table t1 change a a char(10) character set cp1251;
- select a,hex(a) from t1;
- alter table t1 change a a char(10) character set koi8r;
- select a,hex(a) from t1;
- alter table t1 change a a varchar(10) character set cp1251;
- select a,hex(a) from t1;
- alter table t1 change a a char(10) character set koi8r;
- select a,hex(a) from t1;
- alter table t1 change a a text character set cp1251;
- select a,hex(a) from t1;
- alter table t1 change a a char(10) character set koi8r;
- select a,hex(a) from t1;
- delete from t1;
- #
- # Test ALTER TABLE .. CHARACTER SET ..
- #
- show create table t1;
- alter table t1 DEFAULT CHARACTER SET latin1;
- show create table t1;
- alter table t1 CONVERT TO CHARACTER SET latin1;
- show create table t1;
- alter table t1 DEFAULT CHARACTER SET cp1251;
- show create table t1;
- drop table t1;
- #
- # Bug#2821
- # Test that table CHARACTER SET does not affect blobs
- #
- create table t1 (myblob longblob,mytext longtext)
- default charset latin1 collate latin1_general_cs;
- show create table t1;
- alter table t1 character set latin2;
- show create table t1;
- drop table t1;
- #
- # Bug 2361 (Don't drop UNIQUE with DROP PRIMARY KEY)
- #
- CREATE TABLE t1 (a int PRIMARY KEY, b INT UNIQUE);
- ALTER TABLE t1 DROP PRIMARY KEY;
- SHOW CREATE TABLE t1;
- --error 1091
- ALTER TABLE t1 DROP PRIMARY KEY;
- DROP TABLE t1;
- # BUG#3899
- create table t1 (a int, b int, key(a));
- insert into t1 values (1,1), (2,2);
- --error 1091
- alter table t1 drop key no_such_key;
- alter table t1 drop key a;
- drop table t1;
- #
- # Bug #6479 ALTER TABLE ... changing charset fails for TEXT columns
- #
- # The column's character set was changed but the actual data was not
- # modified. In other words, the values were reinterpreted
- # as UTF8 instead of being converted.
- create table t1 (a text) character set koi8r;
- insert into t1 values (_koi8r'耘釉');
- select hex(a) from t1;
- alter table t1 convert to character set cp1251;
- select hex(a) from t1;
- drop table t1;
- #
- # Test for bug #7884 "Able to add invalid unique index on TIMESTAMP prefix"
- # MySQL should not think that packed field with non-zero decimals is
- # geometry field and allow to create prefix index which is
- # shorter than packed field length.
- #
- create table t1 ( a timestamp );
- --error 1089
- alter table t1 add unique ( a(1) );
- drop table t1;
- #
- # Bug#11493 - Alter table rename to default database does not work without
- # db name qualifying
- #
- create database mysqltest1;
- create table t1 (c1 int);
- # Move table to other database.
- alter table t1 rename mysqltest1.t1;
- # Assure that it has moved.
- --error 1051
- drop table t1;
- # Move table back.
- alter table mysqltest1.t1 rename t1;
- # Assure that it is back.
- drop table t1;
- # Now test for correct message if no database is selected.
- # Create t1 in 'test'.
- create table t1 (c1 int);
- # Change to other db.
- use mysqltest1;
- # Drop the current db. This de-selects any db.
- drop database mysqltest1;
- # Now test for correct message.
- --error 1046
- alter table test.t1 rename t1;
- # Check that explicit qualifying works even with no selected db.
- alter table test.t1 rename test.t1;
- # Go back to standard 'test' db.
- use test;
- drop table t1;
- # End of 4.1 tests