ADD sql table structure to a EXISTED table - mysql

i knowCREATE TABLE new LIKE old;,but it can't copy fields to a existing table
i want to add the field,type and collation to an existing table
is there any simple way to do it?

You would have to SHOW CREATE TABLE old then copy & paste the columns you want to add to your existing table, and use them in an ALTER TABLE statement . You can use ADD COLUMN to add multiple columns in one statement.
There's no shortcut syntax for this. It's unlikely that you would want to copy all the columns. For example, you can't copy columns that conflict with column names in the existing table.
There are edge cases, like what if a column has NOT NULL but no DEFAULT? You can't add that to an existing table unless the table is empty.
You just have to build the ALTER TABLE statement to suit what you want to do. This is similar to most other custom programming scenarios.

Related

MySQL Workbench 6.3: how should I insert a new column into a specific position (in the middle of the table)

I am working on a SQL table and would like to create and insert a new column into the same table. The thing is, I would like my new column to be at a specific place in the middle of the table, rather than at the end, and there does not seem to be a method of doing this exact insertion in the documentation.
So, the name of my table is "actor" and its columns are "actor_id", "first_name", "last_name", and "last_update". I would like to create a column called "middle_name" between the columns "first_name" and "last_name". My code that I tried out was
ALTER TABLE actor
ADD middle_name VARCHAR(25);
However this just adds the column to the end of the table and not the middle as I want. Are there any suggestions for how to correct this?
It goes simple as:
ALTER TABLE actor
ADD COLUMN middle_name VARCHAR(25) AFTER first_name;
In MySQL Workbench you can open the table editor (via the context menu in the schema tree -> Alter table...). On the columns tab you see all currently defined columns. You can add new ones, remove unneeded ones and drag them into the order you want. Then apply the changes. The upcoming wizard with allow you to review of the code which will be sent to the server. Existing data should not be touched (unless you drop a column with data), but it's certainly safer to keep a backup around in case something goes wrong.

Add new columns without using Alter

Is it possible to add new columns to an existing table without using alter statement?
Other people are answering unequivocally "no, it is not possible." This is the answer to your literal question. But I'm wondering why you ask the question.
One of the biggest pain points of MySQL is that using ALTER TABLE locks the table while you're making a change like adding a column, and the more data in your table, the longer this lasts while it restructures the table. I'm guessing this is the issue you have, and you're trying to get an alternative that doesn't block access to the table while you're adding a new column.
(In the future, it would help folks give you the best answers if you explain more about what you're trying to do.)
The answer to this question is yes, there is a solution: pt-online-schema-change is a free tool that accomplishes this.
You use it just like you would use ALTER TABLE, but you use it at the command-line instead of in an SQL query.
pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=actor
In this example, the database name is sakila and the table name is actor. The script does a lot of work behind the scenes:
Create a table like the original table, but empty of rows
ALTER TABLE to add the column or whatever other alteration you told it. You can do anything you would normally do with ALTER TABLE. In fact, it's doing ALTER TABLE for you, against the empty copy table.
Copy rows from the original table to the new table in the background.
Create triggers to capture any changes made to the original table while it's gradually copying the bulk of the data.
Swap the names of the new table (with the extra column) and the original table, once all data has been copied.
Drop the original table.
This has a few caveats, like the original table must have a primary key, and must not have existing triggers.
It tends to take longer than doing a traditional ALTER TABLE, but since it's not blocking access to the original table, it's still more convenient.
Does this help?
Is it possible to add new columns to an existing table without using the alter statement?
No.
Is it possible to add new columns to an existing table without using alter statement?
I don't think it's impossible.
However I'm not sure what you want to do.
lets say you have a table
select * from Store
and you want just export the data or perhaps you want to do something with that data like a selection. but you don't want to STORE the data in your Database
you can just fill a value and give it a name
select
'Test' as name,
*
from Store
this will populate your column with the value your entered.
data results

Is there a way in MySQL to have one column be just a reference to another column on the same table?

Is there a way in MySQL to have one column be just a reference to another column on the same table?
I am dealing with a really old MySQL database that has no naming conventions. I can't just rename the columns because that would break a lot of code. So I thought it would be cool if I could add a "shortcut column" to the poorly named column and then use them interchangeably.
Have you considered creating a view?
CREATE VIEW view_name
AS SELECT *, bad_name as New_name
FROM table
I am not exactly sure what you mean by 'reference' (an example would be nice), but... in the SQL statement, you can define the same column multiple times and specify an alias to the column name.
Something like this:
SELECT *, [this_is_a_really_bad_name] as myNewName FROM MyTable
Assuming the table MyTable has the badly designed column this_is_a_really_bad_name, you can now refer to that column by its old name or as myNewName
Is that what you are trying to achieve?

Change field order in table using SQL query

I am adding new field to existing table using ALTER TABLE statement. Is it possible to change filed index by query so that field is not on last place in designer mode?
I don't believe it is, no. Other than re-ordering the columns in any SELECT statements which use them, to actually re-order the physical table would require:
Create a new table with the intended column order;
Copy all of the data from the existing table to the new table;
Drop the existing table;
Rename the new table to the previous table's name.
Naturally, doing all of this in a single atomic action is very important so that data isn't missed between steps 2 and 3. So cutting off application access during the window of time that this is done is a good idea.

Inserting a column in SQL Server at a position in a table

Hello I need to add a column to a table in SQL Server 2008. If I use the script below:
ALTER TABLE SampleTable ADD SampleColumn bigint NULL
it adds the column at the end of the table. What if I want the column at a position in the table using script only. For some reasons which are hard to explain, I cannot drop table and execute a new create table script.
Any ideas and suggestions!
Column order is irrelevant.
Observe:
SELECT Col1, Col2, Col3
FROM Table
SELECT Col3, Col2, Col1
FROM Table
Column order only matters if you use SELECT * which is another reason not to do that.
Besides recreating the table, there is no way to change the default column order in the metadata.
If you need a workaround, it's possible to create a VIEW that selects the fields in the desired order and use that.
If you can use SSMS, then it's easy -- just "design" your table (r-click the table), add your column, then drag it up/down in the list wherever you want it.
That said -- if you view the change script for doing this (i.e., all of the TSQL behind that simple drag & drop), there is an awful lot that actually goes on automagically (including re-creating of the table).
I know column order DOES matter (sorry #JNK) for someone who likes to follow a standard organizational method (like having all of your foriegn keys toward the top, etc.), or someone supporting queries/procedures that don't specify columns (like you can do with insert statements, or selects based on position).
There isn't another way to insert a column in a SQL Server table "in between" existing columns - you need to build a temp table and rebuild the old table. That said, column order shouldn't matter - are you sure that the column needs to be inserted in order?
Likely your best bet is to just use the GUI, script it out, and then change the constraint name to something reasonable within the script. You're right that the numerical constraint name isn't ideal, and it's not a best practice to allow SQL Server to determine your object names.
check the below link for more:
stackoverflow.com/questions/965927/inserting-column-between-other-columns-in-sql-server-using-script