Alter table add column and set default value in MySQL - mysql

Is there a way to add a new column and set its default value in MySQL? When I run this command I get a syntax error:
ALTER TABLE tableName ADD newColumn varchar(20) SET DEFAULT 'test';
The documentation I've found doesn't really help me.

The SET shouldn't be necessary:
ALTER TABLE tableName ADD newColumn varchar(20) DEFAULT 'test';

try this
ALTER TABLE tableName ADD COLUMN newColumn VARCHAR(20) DEFAULT 'test';

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 - Remove default value for Datetime field

An existing MySQL table has a DateTime field which is not null and having a Default Value set as '0001-00-00 00:00:00'. Is it possible to Alter this table to remove the default value for the DateTime field ?
Yes, you can drop the default using an ALTER TABLE statement like this:
alter table your_table
alter column your_column drop default;
To drop the default from multiple datetime columns in a table:
ALTER TABLE your_table
ALTER COLUMN columnname1 DROP DEFAULT,
ALTER COLUMN columnname2 DROP DEFAULT,
ALTER COLUMN columnname3 DROP DEFAULT,
....
You can simply change the column and exclude default clause using following query. Here T1 is table containing default value for column updated and subject. You can simply remove default value as given below:
ALTER TABLE `T1`
CHANGE `updated` `updated` DATETIME NOT NULL,
CHANGE `subject` `subject` VARCHAR(100)

MySQL - How to modify column default value?

How do I change my column's default value from None to something else? For example, I want my dates to have a default value of 0000-00-00 if I don't specify one when I create the row.
I understand this in phpMyAdmin, but I'm not sure how to do it via command prompt.
I also understand how to do this when adding a column. But all of my columns are made and have data in some of them.
ALTER TABLE table1 ADD COLUMN foo INT DEFAULT 0;
From searching, I found this line, but I'm not sure if that's what I want?
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
Use ALTER TABLE to CHANGE or MODIFY the DEFAULT value of column. Check this link ALTER TABLE SYNTAX
ALTER TABLE `tableName` CHANGE `columnName` `columnName` DATE DEFAULT '0000-00-00';
ALTER TABLE `tableName` MODIFY `columnName` DATE DEFAULT '0000-00-00';
try this
ALTER TABLE foobar_data CHANGE COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
user CHANGE to alter a existing column
see Link
In my case, it worked
ALTER TABLE `table_name` CHANGE `col_name` `col_name_again` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'anydefault_text';
Hope it helps you too.

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 '{}';

Create Column Allow NULL but Default Value Set to NOT NULL

Id like to create a column on my table that allows null but is set by default to empty (not null)
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} DEFAULT '';
This doesn't seem to work. Any ideas?
Thanks!
Did you try
ALTER TABLE table_name ADD column_name VARCHAR(20) NULL DEFAULT '';
If all else fails,
CREATE TRIGGER trigger_tablename_columnname
BEFORE INSERT ON tablename
FOR EACH ROW SET NEW.columnname = IFNULL(NEW.columnname, '')