You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The existing syntax for renaming a column uses "ALTER TABLE ... CHANGE"
command. This requires full column specification to rename the column.
This patch adds new syntax "ALTER TABLE ... RENAME COLUMN", which do not
expect users to provide full column specification. It means that the new
syntax would pick in-place or copy algorithm in the same way as that of
existing "ALTER TABLE ... CHANGE" command. The existing syntax
"ALTER TABLE ... CHANGE" will continue to work.
Syntax changes
==============
ALTER TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
Following is a new <alter_specification> added:
| RENAME COLUMN <oldname> TO <newname>
Where <oldname> and <newname> are identifiers for old name and new
name of the column.
Related to: WL#10761
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t2`.`d` AS `d`,`test`.`t2`.`e` AS `e`,`test`.`t2`.`f` AS `f` from `t2` koi8r koi8r_general_ci
2767
+
Warnings:
2768
+
Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
2769
+
SELECT * FROM v1;
2770
+
ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
2771
+
UPDATE t2 SET f = f + 10;
2772
+
ERROR 42S22: Unknown column 'd' in 'OLD'
2773
+
CALL sp1();
2774
+
ERROR 42S22: Unknown column 'd' in 'field list'
2775
+
DROP TRIGGER trg1;
2776
+
DROP PROCEDURE sp1;
2777
+
CREATE TABLE t_gen(a INT, b DOUBLE GENERATED ALWAYS AS (SQRT(a)));
2778
+
INSERT INTO t_gen(a) VALUES(4);
2779
+
SELECT * FROM t_gen;
2780
+
a b
2781
+
4 2
2782
+
SHOW CREATE TABLE t_gen;
2783
+
Table Create Table
2784
+
t_gen CREATE TABLE `t_gen` (
2785
+
`a` int(11) DEFAULT NULL,
2786
+
`b` double GENERATED ALWAYS AS (sqrt(`a`)) VIRTUAL
2787
+
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
2788
+
ALTER TABLE t_gen RENAME COLUMN a TO c, CHANGE COLUMN b b DOUBLE GENERATED ALWAYS AS (SQRT(c));
2789
+
SELECT * FROM t_gen;
2790
+
c b
2791
+
4 2
2792
+
SHOW CREATE TABLE t_gen;
2793
+
Table Create Table
2794
+
t_gen CREATE TABLE `t_gen` (
2795
+
`c` int(11) DEFAULT NULL,
2796
+
`b` double GENERATED ALWAYS AS (sqrt(`c`)) VIRTUAL
2797
+
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
2798
+
ALTER TABLE t_gen CHANGE COLUMN c x INT;
2799
+
show create table t_gen;
2800
+
Table Create Table
2801
+
t_gen CREATE TABLE `t_gen` (
2802
+
`x` int(11) DEFAULT NULL,
2803
+
`b` double GENERATED ALWAYS AS (sqrt(`x`)) VIRTUAL
2804
+
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
2805
+
ALTER TABLE t_gen RENAME COLUMN x TO a;
2806
+
DROP TABLE t_gen;
2807
+
SHOW CREATE TABLE t1;
2808
+
Table Create Table
2809
+
t1 CREATE TABLE `t1` (
2810
+
`d` varchar(30) DEFAULT NULL,
2811
+
`b` int(11) DEFAULT 5,
2812
+
KEY `b` (`b`)
2813
+
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
2814
+
ALTER TABLE t1 RENAME COLUMN b z;
2815
+
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'z' at line 1
2816
+
ALTER TABLE t1 RENAME COLUMN FROM b TO z;
2817
+
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM b TO z' at line 1
2818
+
ALTER TABLE t1 RENAME COLUMN b TO 1;
2819
+
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1
2820
+
ALTER TABLE t1 RENAME COLUMN b TO e, RENAME COLUMN c TO e;
2821
+
ERROR 42S22: Unknown column 'c' in 't1'
2822
+
ALTER TABLE t1 ADD COLUMN z INT, RENAME COLUMN b TO z;
2823
+
ERROR 42S21: Duplicate column name 'z'
2824
+
ALTER TABLE t1 DROP COLUMN b, RENAME COLUMN b TO z;
2825
+
ERROR 42S22: Unknown column 'b' in 't1'
2826
+
ALTER TABLE t1 RENAME COLUMN b TO b, RENAME COLUMN b TO b;
2827
+
ERROR 42S22: Unknown column 'b' in 't1'
2828
+
ALTER TABLE t1 RENAME COLUMN b TO c3, DROP COLUMN c3;
2829
+
ERROR 42000: Can't DROP COLUMN `c3`; check that it exists
2830
+
ALTER TABLE t1 ADD COLUMN z INT, CHANGE COLUMN z y INT, DROP COLUMN y;
2831
+
ERROR 42S22: Unknown column 'z' in 't1'
2832
+
ALTER TABLE t1 ADD COLUMN z INT, RENAME COLUMN z TO y, DROP COLUMN y;
2833
+
ERROR 42S22: Unknown column 'z' in 't1'
2834
+
ALTER TABLE t1 RENAME COLUMN b TO `nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn`;
2835
+
ERROR 42000: Incorrect column name 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn'
2836
+
ALTER TABLE t1 CHANGE b `nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn` int;
2837
+
ERROR 42000: Identifier name 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn' is too long
0 commit comments