How can I insert a new column after x on a table? - sql

I have a table called users:
CREATE TABLE `users` (
`UID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(45) NOT NULL ,
`password` VARCHAR(200) NOT NULL ,
`name` VARCHAR(45) NOT NULL ,
`email` VARCHAR(255) NOT NULL ,
`phone` VARCHAR(30) NOT NULL ,
`logo` VARCHAR(255) NULL ,
`address` VARCHAR(100) NULL ,
`information` TEXT NULL ,
`announcement` TEXT NULL ,
`role` INT UNSIGNED NULL ,
`yahoo` VARCHAR(100) NULL ,
`twitter` VARCHAR(20) NULL ,
`timelogin` DATETIME NULL,
PRIMARY KEY (`UID`) ,
UNIQUE INDEX `UID_UNIQUE` (`UID` ASC) ,
UNIQUE INDEX `name_UNIQUE` (`name` ASC) ,
UNIQUE INDEX `logo_UNIQUE` (`logo` ASC) ,
UNIQUE INDEX `username_UNIQUE` (`username` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
the problem is that I want to add or insert a new row like
`image_seal` VARCHAR(255) NULL ,
after logo, can we do something like that in mysql ? append-thing?
Thanks
Adam Ramadhan

ALTER TABLE users ADD COLUMN image_seal VARCHAR(255) NULL AFTER logo;
Check here for Syntax of ALTER TABLE

It seems you want to add a new column to your table, not a row.
From the MySQL reference it seems you can use the keyword AFTER.
ALTER TABLE users ADD COLUMN image_seal VARCHAR(255) AFTER logo;
should do the trick.

What are you using to administer your database? SQLBuddy, PHPmyAdmin and others can do this for you, without you needing to run queries.

Related

Creating phpMyAdmin error #1064

I was following a youtube tutorial here. Even though I followed it to a t. The problem being is it didn't work because I have an updated version. I hope you can help. The SQL preview is here:
CREATE TABLE `test_database`.`members`
(
`id` INT NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(255) NOT NULL ,
`country` VARCHAR(255) NOT NULL ,
`county/state` VARCHAR(255) NOT NULL ,
`city` VARCHAR(255) NOT NULL ,
`bio` TEXT NOT NULL ,
`email` VARCHAR(255) NOT NULL ,
`password` VARCHAR(255) NOT NULL ,
`signupdate` DATETIME NOT NULL ,
`lastlogin` DATETIME NOT NULL ,
`accounttype` ENUM(0) NOT NULL ,
`emailactivated` ENUM(0) NOT NULL DEFAULT '\'0\'' ,
PRIMARY KEY (`id`), UNIQUE (`email`)
)
ENGINE = MyISAM;
This was the error message I received: #1064 - 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
'0) NOT NULL , `emailactivated` ENUM(0) NOT NULL DEFAULT '\'0\'' , PRIMARY KE
at line 1
Try to change your query like this:
CREATE TABLE test_database.members
(
id INT NOT NULL AUTO_INCREMENT ,
username VARCHAR(255) NOT NULL ,
country_state VARCHAR(255) NOT NULL ,
country VARCHAR(255) NOT NULL ,
city VARCHAR(255) NOT NULL ,
bio TEXT NOT NULL ,
email VARCHAR(255) NOT NULL ,
password VARCHAR(255) NOT NULL ,
signupdate DATETIME NOT NULL ,
lastlogin DATETIME NOT NULL ,
accounttype ENUM('0') NOT NULL ,
emailactivated ENUM('0') NOT NULL DEFAULT '0' ,
PRIMARY KEY (id), UNIQUE (email)
)
ENGINE = MyISAM;
try to use _ instead of/for column name. or just use camel case. Sometimes if you use /. It will give you an error.
for enum column type, it just like you give a choice, so better give the choice after that. like ENUM('a', 'b', 'c') NOT NULL DEFAULT 'a'
Instead. What Version of MySQL did you use? And Also for phpMyAdmin ?. Sometimes there is also a bug.
Read link
you cant set enum(0) that what wrong
check this if you want use enum

Error when creating multiple columns in one table with same values

When I try to exeecute the folliwng in SQL, I get error, I am trying to add multiple columns with same value to one table.
CREATE TABLE IF NOT EXISTS `vendor` (
`product_id` varchar(255) NOT NULL
), `Vendor_SKU_or_Stock_Number` varchar(255) NOT NULL
), `Brand_Name` varchar(255) NOT NULL
), `Image_URL5`varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ERROR: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' Vendor_SKU_or_Stock_Number varchar(255) NOT NULL
), Brand_Name varchar(255)' at line 13
Please help
You have too many closing parenthesis, and your table name and field names should not be quoted.
Try this:
CREATE TABLE IF NOT EXISTS vendor (
product_id varchar(255) NOT NULL
, Vendor_SKU_or_Stock_Number varchar(255) NOT NULL
, Brand_Name varchar(255) NOT NULL
, Image_URL5 varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Removed ")"
CREATE TABLE IF NOT EXISTS `vendor` (
`product_id` varchar(255) NOT NULL
, `Vendor_SKU_or_Stock_Number` varchar(255) NOT NULL
, `Brand_Name` varchar(255) NOT NULL
, `Image_URL5`varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Try this
CREATE TABLE IF NOT EXISTS `vendor` (
`product_id` varchar(255) NOT NULL
, `Vendor_SKU_or_Stock_Number` varchar(255) NOT NULL
, `Brand_Name` varchar(255) NOT NULL
, `Image_URL5`varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Try this
CREATE TABLE IF NOT EXISTS vendor (
product_id varchar(255) NOT NULL,
vendor_SKU_or_Stock_Number varchar(255) NOT NULL,
brand_Name varchar(255) NOT NULL,
image_URL5 varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1;

Derby and SQL from Workbench

I've a project at school and i must use a Derby DB.
I'm using eclipse and the SQL Scrapbook to execute my SQL script.
Here is the problem:
My SQL script was generated by Mysql Workbench, we did a schemas and then exported it to a .sql
When i try to execute it in the SQL Scrapbook, I have MANY errors, the sql seems not to be adapted to derby (for example, AUTOINCREMENT is now (START WITH 1, INCREMENT BY 1).
Here is my .sql :
SET #OLD_UNIQUE_CHECKS=##UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET #OLD_FOREIGN_KEY_CHECKS=##FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET #OLD_SQL_MODE=##SQL_MODE, SQL_MODE='TRADITIONAL';
DROP SCHEMA IF EXISTS `mydb` ;
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`User`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`User` ;
CREATE TABLE IF NOT EXISTS `mydb`.`User` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`lastname` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`adress` VARCHAR(45) NOT NULL ,
`city` VARCHAR(45) NOT NULL ,
`zip` VARCHAR(45) NOT NULL ,
`login` VARCHAR(45) NOT NULL ,
`password` VARCHAR(45) NOT NULL ,
`admin` TINYINT(1) NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
-- -----------------------------------------------------
-- Table `mydb`.`Movie`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Movie` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Movie` (
`id` INT NOT NULL AUTO_INCREMENT ,
`title` VARCHAR(45) NOT NULL ,
`resume` VARCHAR(500) NULL ,
`genre` VARCHAR(60) NULL ,
`grade` INT(11) NULL ,
`review_pub` VARCHAR(200) NULL ,
`review_gen` VARCHAR(200) NULL ,
`poster` VARCHAR(100) NULL ,
`duration` INT(11) NULL ,
`release_date` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Projection`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Projection` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Projection` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT ' ' ,
`date` DATE NULL ,
`length` INT(11) NULL ,
`Movie_id` INT NOT NULL ,
`price` DECIMAL(10,0) NULL ,
`location` VARCHAR(45) NOT NULL ,
`place_nbr` INT(11) NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_Projection_Movie` (`Movie_id` ASC) ,
CONSTRAINT `fk_Projection_Movie`
FOREIGN KEY (`Movie_id` )
REFERENCES `mydb`.`Movie` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`command`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`command` ;
CREATE TABLE IF NOT EXISTS `mydb`.`command` (
`id` INT NOT NULL AUTO_INCREMENT ,
`Projection_id` INT NOT NULL ,
`User_id` INT NOT NULL ,
`paid` TINYINT(1) NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_command_Projection1` (`Projection_id` ASC) ,
INDEX `fk_command_User1` (`User_id` ASC) ,
CONSTRAINT `fk_command_Projection1`
FOREIGN KEY (`Projection_id` )
REFERENCES `mydb`.`Projection` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_command_User1`
FOREIGN KEY (`User_id` )
REFERENCES `mydb`.`User` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=#OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=#OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=#OLD_UNIQUE_CHECKS;
Thank you
Try using DdlUtils (http://db.apache.org/ddlutils/) to export your schema from your MySQL database, then you can import that same schema to Derby.

Cannot create table due constraint

I am working few days with my project and I stuck on phpmyadmin sql.
I create in workbench ERR Diagram which looks like:
And the code to paste into sql query is:
SET #OLD_UNIQUE_CHECKS=##UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET #OLD_FOREIGN_KEY_CHECKS=##FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET #OLD_SQL_MODE=##SQL_MODE, SQL_MODE='TRADITIONAL';
DROP SCHEMA IF EXISTS `nieruchomosci` ;
CREATE SCHEMA IF NOT EXISTS `nieruchomosci` DEFAULT CHARACTER SET utf8 ;
USE `nieruchomosci` ;
-- -----------------------------------------------------
-- Table `nieruchomosci`.`wojewodztwa`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nieruchomosci`.`wojewodztwa` ;
CREATE TABLE IF NOT EXISTS `nieruchomosci`.`wojewodztwa` (
`id_wojewodztwa` INT NULL AUTO_INCREMENT ,
`nazwa` VARCHAR(145) NULL ,
PRIMARY KEY (`id_wojewodztwa`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `nieruchomosci`.`material`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nieruchomosci`.`material` ;
CREATE TABLE IF NOT EXISTS `nieruchomosci`.`material` (
`id_material` INT NULL AUTO_INCREMENT ,
`typ` VARCHAR(45) NULL ,
PRIMARY KEY (`id_material`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `nieruchomosci`.`szczegoly`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nieruchomosci`.`szczegoly` ;
CREATE TABLE IF NOT EXISTS `nieruchomosci`.`szczegoly` (
`id_szczegoly` INT NULL ,
`typ_nabytku` VARCHAR(45) NULL ,
`nr_budynku` INT NULL ,
`nr_lokalu` INT NULL ,
`pokoje` INT NULL ,
`powierzchnia_mieszkania` INT NULL ,
`powierzchnia_domu` INT NULL ,
`stan_b` INT NULL ,
`stan_l` INT NULL ,
`winda` VARCHAR(45) NULL ,
`garaz` VARCHAR(45) NULL ,
`osiedle` VARCHAR(45) NULL ,
`telefon` VARCHAR(45) NULL ,
`internet` VARCHAR(45) NULL ,
`tv` VARCHAR(45) NULL ,
`domofon` VARCHAR(45) NULL ,
`tereny` VARCHAR(45) NULL ,
`plac_zabaw` VARCHAR(45) NULL ,
`sport` VARCHAR(45) NULL ,
`kino` VARCHAR(45) NULL ,
`basen` VARCHAR(45) NULL ,
PRIMARY KEY (`id_szczegoly`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `nieruchomosci`.`ogloszenie`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nieruchomosci`.`ogloszenie` ;
CREATE TABLE IF NOT EXISTS `nieruchomosci`.`ogloszenie` (
`id_ogloszenie` INT NULL AUTO_INCREMENT ,
`rok` INT NULL ,
`pietro` INT NULL ,
`ile_pieter` INT NULL ,
`cena` INT NULL ,
`typ_oferty` INT NULL ,
`id_adres` INT NULL ,
`id_material` INT NULL ,
PRIMARY KEY (`id_ogloszenie`) ,
INDEX `fk_ogloszenie_material1` (`id_material` ASC) ,
CONSTRAINT `fk_ogloszenie_material1`
FOREIGN KEY (`id_material` )
REFERENCES `nieruchomosci`.`material` (`id_material` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_ogloszenie_szczegoly1`
FOREIGN KEY (`id_ogloszenie` )
REFERENCES `nieruchomosci`.`szczegoly` (`id_szczegoly` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `nieruchomosci`.`adres`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nieruchomosci`.`adres` ;
CREATE TABLE IF NOT EXISTS `nieruchomosci`.`adres` (
`id_adres` INT NULL AUTO_INCREMENT ,
`ulica` VARCHAR(45) NULL ,
`miasto` VARCHAR(45) NULL ,
`powiat` VARCHAR(45) NULL ,
`id_wojewodztwa` INT NULL ,
PRIMARY KEY (`id_adres`) ,
INDEX `fk_adres_wojewodztwa` (`id_wojewodztwa` ASC) ,
CONSTRAINT `fk_adres_wojewodztwa`
FOREIGN KEY (`id_wojewodztwa` )
REFERENCES `nieruchomosci`.`wojewodztwa` (`id_wojewodztwa` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_adres_ogloszenie1`
FOREIGN KEY (`id_adres` )
REFERENCES `nieruchomosci`.`ogloszenie` (`id_adres` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=#OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=#OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=#OLD_UNIQUE_CHECKS;
Adres means Address
Ogloszenie means Advertistment
Wojewodztwa means Province
Material means Material
Szczegoly means Details
This simple project is about advertistment which sells houses.
My error is
Executing SQL script in server
ERROR: Error 1005: Can't create table 'nieruchomosci.adres' (errno: 150)
I am total yellow in sql, where did I make mistake?
I think you reference the foreign key at the wrong position.
Instead of having the following in the definition of adres
CONSTRAINT `fk_adres_ogloszenie1`
FOREIGN KEY (`id_adres` )
REFERENCES `nieruchomosci`.`ogloszenie` (`id_adres` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
You should put this in the definition of the ogloszenie table.
Hope that helps.

Auto_increment with Perl SQLite

I am having trouble with auto increment in SQLite using Perl.
Database design:
$dbh->do( "CREATE TABLE IF NOT EXISTS `Users` (
`UserID` VARCHAR(45) NOT NULL PRIMARY KEY UNIQUE ,
`First_Name` VARCHAR(45) NOT NULL ,
`Last_Name` VARCHAR(45) NOT NULL ,
`Email` VARCHAR(45) NOT NULL ,
`Password` VARCHAR(45) NOT NULL )" ) ;
$dbh->do( "CREATE TABLE IF NOT EXISTS `Files` (
`FileID` INTEGER AUTO_INCREMENT ,
`UserID` VARCHAR(45) NOT NULL ,
`File_Name` VARCHAR(45) NOT NULL ,
`File` BLOB NULL ,
PRIMARY KEY (`FileID`, `UserID`) ,
CONSTRAINT `fk_Files_Users1`
FOREIGN KEY (`UserID` )
REFERENCES `Users` (`UserID` )
ON DELETE CASCADE
ON UPDATE CASCADE)" ) ;
The query:
$dbh->do( "INSERT INTO Files ( UserID, File_Name )
VALUES ( '$_[0]', '$_[1]' )" ) ;
Even though I have identified the FileID as being both an AUTO_INCREMENT and a PRIMARY KEY, when I add a new field using the above query the FileID is left blank and isn't incremented automatically. Any thoughts? Have I designed the tables wrong?
Cheers,
Nate
I recommend you to create a primary key on Files table with the FileID field exclusively (you have two fields). And I think you have a typo: it's AUTOINCREMENT, (you type AUTO_INCREMENT). See this: http://www.sqlite.org/autoinc.html