Add new columns without using Alter - mysql

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

Related

ADD sql table structure to a EXISTED table

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.

Creating empty table in mySQL

I want to create an empty table, which will be populated by columns much later in a script.
I've tried
$command =
"CREATE TABLE table ()";
in my script, but it won't work. It will only work if I put a filler column inside.
$command =
"CREATE TABLE table (
LameFiller varchar(30)
)";
But I don't like the idea of putting a filler inside. How do I properly create an empty table?
As others have said, you cannot create an empty table.
The best approach at this point isn't then figuring out how to create empty tables, it's not needing to in the first place.
Create the table once its structure finalized
This is the best option. You really don't want to be inserting data into a table, then altering, then inserting, then altering, etc. That just screams poor design. You should be able to come up with your table structure before you ever add data to it.
Create the table before the first data entry
You'll never insert data into a table with no columns (please let me know if you do, because that would be neat and break 2 impossibilities). As such, create the table when you first need to add data to it. If you plan on altering the table or adding more columns, I'd advise against this. Again, that's just poor design.
In some design cases it is necessary to want an empty table. For example, if you are working on a design project where you want people to create their own custom tables within a database. However, it is not possible to create an empty table. The way around this is to find a single column (usually title or name ect.) and send that variable to your php create table function. from there have a add column button that calls a separate php function that adds another column to the database. Tried to keep this as vague as possible to fit multiple scenarios and just cover a core concept to work around the issue.

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.

Get last created ID with auto-increment in MySQL

I have a primary index on column URL but at the same time I need to have records with URL left blank which won't be permitted by the index.
I thought of a solution which is to add a new column called ID and make it auto-increment.
So I need to get the ID created with auto-increment on INSERT so that I stick it to column URL too. How can I do this?
If you can think of a better solution please tell
thanks
It is almost certainly better to use the mysql wrapper in your scripting language of choice to acquire the last insert id, but you can SELECT LAST_INSERT_ID(); to get it with mysql itself.
The solution may depend on what other columns you have on your table. It will be hard for you to add an auto_increment column to a table that already has data. The process will be to create a new table with the new column added and add the data from the old table and then drop the old table and re-name the new one to the matching name.

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