Experienced an error #1060 - Duplicate of Column 'forum_enabled' - mysql

What is wrong with this?
ALTER TABLE `groups`
ADD COLUMN `forum_enabled` enum('0','1') CHARACTER SET latin1 COLLATE
latin1_swedish_ci NOT NULL DEFAULT '0' AFTER `admindeco`;
ALTER TABLE `user_badges`
ADD UNIQUE INDEX `user_id, badge_id`;
ALTER TABLE `furniture`
ADD COLUMN`behaviour_data` int(11) NOT NULL DEFAULT 0 AFTER
`interaction_type`;
ALTER TABLE `users`
MODIFY COLUMN `rank_vip` int(1) NULL DEFAULT 1 AFTER `rank`;
ALTER TABLE `server_settings`
CHANGE COLUMN `variable` `key` varchar(255) CHARACTER SET latin1 COLLATE
latin1_swedish_ci NOT NULL DEFAULT 'server.variable' FIRST ;
ALTER TABLE `catalog_deals`
DROP COLUMN `page_id`,
DROP COLUMN `cost_credits`,
DROP COLUMN `cost_pixels`,
MODIFY COLUMN `items` text CHARACTER SET latin1 COLLATE
latin1_swedish_ci
NOT NULL AFTER `id`,
ADD COLUMN `room_id` int(11) NOT NULL AFTER `name`;
SET FOREIGN_KEY_CHECKS=0;
I am getting following error:
SQL query: ALTER TABLE groups ADD COLUMN forum_enabled ENUM( '0', '1' ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '0' AFTER admindeco ; MySQL said: Documentation #1060 - Duplicate column name 'forum_enabled'

From the error message, it seems like the column you are trying to add in the first statement already exists in the table.
A simple solution is to DROP the column before you add it, like :
ALTER TABLE `groups`
DROP COLUMN `forum_enabled`;
This can be combined with the ADD command in a single statement, like :
ALTER TABLE `groups`
DROP COLUMN `forum_enabled`,
ADD COLUMN `forum_enabled` enum('0','1') ...
;
It is also possible to dynamically check if a column exists, then drop it if neede, like :
IF EXISTS (
SELECT 1
FROM information_schema.columns
WHERE
table_name = 'groups'
AND column_name = 'forum_enabled'
AND table_schema = DATABASE()
) THEN
ALTER TABLE `groups`
DROP COLUMN `forum_enabled`;
END IF;

Related

alter a table column to nullable

I want to alter a field to nullable and add the default value null.table name 'other_details' column name used_asset which is varchar(100)
ALTER TABLE `other_details` ALTER COLUMN `used_asset` varchar(100) DEFAULT NULL
above query shows error 'syntax error near varchar(100) DEFAULT NULL'
This came from phpmyadmin as preview SQL and it seems to work:
ALTER TABLE `other_details` CHANGE `used_asset` `used_asset` VARCHAR(100) NULL DEFAULT NULL;
Try this
1) Using MODIFY
ALTER TABLE `other_details` MODIFY `used_asset` varchar(100) null;
2) Using CHANGE
Syntax
ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL
Example
ALTER TABLE `other_details` CHANGE `used_asset` `used_asset` varchar(100) DEFAULT NULL;
ALTER TABLE Table_Name MODIFY Column_Name DataType DEFAULT NULL;

MySQL set type on the column

I was trying to get my column to be in set type on MySQL, but I got an error:
Syntax error near 'COLLATE 'latin1_swedish_ci' NOT NULL FIRST, COMMENT='' REMOVE PARTITIONING' at line 2
ALTER TABLE `Recipe`
CHANGE `Ingredients` `Ingredients` set COLLATE 'latin1_swedish_ci' NOT NULL FIRST,
COMMENT=''
REMOVE PARTITIONING;
Please help and appreciated.
COLLATE should be after CHARACTER SET, which is table level, not column level.
ALTER TABLE `Recipe`
CHANGE `Ingredients` `Ingredients` INT NOT NULL FIRST,
COMMENT=''
CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci'
REMOVE PARTITIONING;
SQLFidele demo:
http://sqlfiddle.com/#!9/d2f62a

Alter mysql table default value and NULLvalue?

How can i make a table field with default value "none" and null value "no"?
When i create a table with following code it always add default value NULL and null to yes
ALTER TABLE `table_name` ADD `test` INT(11) AFTER `test1`
ALTER TABLE `table_name` ADD `test` INT NOT NULL AFTER `test1`;
ALTER TABLE myTable
ALTER column SET DEFAULT 'none'.
For replacing NULL with NO you don't have to alter the table just do it in your query :
SELECT COALESCE(columnWhichisNull,'no'))
FROM myTable ;
COALESCE checks if a value from a column is null and replaces it with your desired character

I can't modify a table's column in MySQL [duplicate]

I got the following error while trying to alter a column's data type and setting a new default value:
ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near 'VARCHAR(255) NOT NULL SET DEFAULT '{}'' at line 1
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
A second possibility which does the same (thanks to juergen_d):
ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';
As a follow up, if you just want to set a default, pretty sure you can use the ALTER .. SET syntax. Just don't put all the other stuff in there. If you're gonna put the rest of the column definition in, use the MODIFY or CHANGE syntax as per the accepted answer.
Anyway, the ALTER syntax for setting a column default, (since that's what I was looking for when I came here):
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';
For which 'literal' could also be a number (e.g. ...SET DEFAULT 0). I haven't tried it with ...SET DEFAULT CURRENT_TIMESTAMP but why not eh?
If you want to add a default value for the already created column,
this works for me:
ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0;
For DEFAULT CURRENT_TIMESTAMP:
ALTER TABLE tablename
CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
Please note double columnname declaration
Removing DEFAULT CURRENT_TIMESTAMP:
ALTER TABLE tablename
ALTER COLUMN columnname1 DROP DEFAULT,
ALTER COLUMN columnname2 DROPT DEFAULT;
In case the above does not work for you (i.e.: you are working with new SQL or Azure) try the following:
1) drop existing column constraint (if any):
ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint
2) create a new one:
ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint DEFAULT getdate() FOR column_name;
Accepted Answer works good.
In case of Invalid use of NULL value error, on NULL values, update all null values to default value in that column and then try to do the alter.
UPDATE foobar_data SET col = '{}' WHERE col IS NULL;
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
Try this
ALTER TABLE `table_name` CHANGE `column_name` `column_name` data_type NULL DEFAULT '';
like this
ALTER TABLE `drivers_meta` CHANGE `driving_license` `driving_license` VARCHAR(30) NULL DEFAULT '';
Use this approach:-
ALTER TABLE foobar_data
CHANGE COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';

Alter SQL table - allow NULL column value

Initially, the table "MyTable" has been defined in the following way:
CREATE TABLE IF NOT EXISTS `MyTable` (
`Col1` smallint(6) NOT NULL AUTO_INCREMENT,
`Col2` smallint(6) DEFAULT NULL,
`Col3` varchar(20) NOT NULL,
);
How to update it in such a way that the column "Col 3" would be allowed to be NULL?
The following MySQL statement should modify your column to accept NULLs.
ALTER TABLE `MyTable`
ALTER COLUMN `Col3` varchar(20) DEFAULT NULL
ALTER TABLE MyTable MODIFY Col3 varchar(20) NULL;
This works in PSQL, not sure if it also works in normal SQL.
ALTER TABLE tablename
ALTER COLUMN columnname DROP NOT NULL;
ALTER TABLE school MODIFY COLUMN school_van varchar(36) DEFAULT NULL;
"ALTER" keyword didn't work but "MODIFY" worked fine in MySQL 8.0.26