303

I am looking for the syntax to add a column to a MySQL database with a default value of 0

Reference

0

10 Answers 10

505

Try this:

ALTER TABLE table1 ADD COLUMN foo INT DEFAULT 0;

From the documentation that you linked to:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
   alter_specification [, alter_specification] ...

alter_specification:
    ...
    ADD [COLUMN] (col_name column_definition,...)
    ...

To find the syntax for column_definition search a bit further down the page:

column_definition clauses use the same syntax for ADD and CHANGE as for CREATE TABLE. See Section 12.1.17, “CREATE TABLE Syntax”.

And from the linked page:

column_definition:  
   data_type [NOT NULL | NULL] [DEFAULT default_value]
   [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]  
   [COMMENT 'string']  
   [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]  
   [STORAGE {DISK|MEMORY|DEFAULT}]  
   [reference_definition]  

Notice the word DEFAULT there.

Sign up to request clarification or add additional context in comments.

5 Comments

I was particularly struck by how good this answer is, both concise and thorough, wish I could upvote it again
boolean and bool are synonyms for TINYINT(1) which is way more efficient than using INT, bear that in mind when using this "correct" answer
In case you need to add a boolean column with a default value of False, you can use: ALTER TABLE table1 ADD COLUMN foo boolean not null default 0;
"ALTER TABLE table1 ADD COLUMN foo INT DEFAULT 0;" - In this 'COLUMN' keyword is not required
Consider adding NOT NULL. Unless specified, a column with a default value can still be NULL, which often (but not always) defeats the purpose of the default value.
47

Like this?

ALTER TABLE `tablename` ADD `new_col_name` INT NOT NULL DEFAULT 0;

1 Comment

if default is >0, add quotes: ALTER TABLE tablename ADD new_col_name INT NOT NULL DEFAULT '1';
7

table users (user_id int unsigned PK, username varchar(32))

alter table users add column verified tinyint unsigned default 0

Comments

7
ALTER TABLE my_table ADD COLUMN new_field TinyInt(1) DEFAULT 0;

1 Comment

Can you explain that further? Why did you need to add a new answer to this question?
5

Simply add default 0 at the end of your ALTER TABLE <table> ADD COLUMN <column> <type> statement

Comments

4

This will work for ENUM type as default value

ALTER TABLE engagete_st.holidays add column `STATUS` ENUM('A', 'D') default 'A' AFTER `H_TYPE`;

Comments

3

You can try this,

ALTER TABLE table_name ADD column_name INT DEFAULT 0;

Comments

3

Another useful keyword is FIRST and AFTER if you want to add it in a specific spot in your table.

ALTER TABLE `table1` ADD COLUMN `foo` AFTER `bar` INT DEFAULT 0;

1 Comment

AFTER bar should be *after INT
2

If you are learning it's helpful to use a GUI like SQLyog, make the changes using the program and then see the History tab for the DDL statements that made those changes.

Comments

1

Try This :)

ALTER TABLE TABLE_NAME ADD COLUMN_NAME INT NOT NULL DEFAULT 0;

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.