Create table if not exists ошибка

Using the command:

CREATE TABLE IF NOT EXISTS `test`.`t1` (
    `col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;

Running this twice in the MySQL Query Browser results in:

Table ‘t1’ already exists Error 1050

I would have thought that creating the table «IF NOT EXISTS» would not throw errors. Am I missing something or is this a bug? I am running version 5.1. Thanks.

Adam Wagner's user avatar

Adam Wagner

15.3k7 gold badges52 silver badges66 bronze badges

asked Oct 30, 2009 at 16:39

user199559's user avatar

Works fine for me in 5.0.27

I just get a warning (not an error) that the table exists;

answered Oct 30, 2009 at 16:47

Eli's user avatar

EliEli

5,5001 gold badge29 silver badges27 bronze badges

1

As already stated, it’s a warning not an error, but (if like me) you want things to run without warnings, you can disable that warning, then re-enable it again when you’re done.

SET sql_notes = 0;      -- Temporarily disable the "Table already exists" warning
CREATE TABLE IF NOT EXISTS ...
SET sql_notes = 1;      -- And then re-enable the warning again

answered Aug 8, 2010 at 12:33

gdt's user avatar

gdtgdt

1,81217 silver badges19 bronze badges

1

You can use the following query to create a table to a particular database in MySql.

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

CREATE TABLE IF NOT EXISTS `tblsample` (

  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)

);

bummi's user avatar

bummi

27.1k13 gold badges62 silver badges101 bronze badges

answered Dec 18, 2015 at 7:40

Sachin Parse's user avatar

Sachin ParseSachin Parse

1,25111 silver badges12 bronze badges

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

***CREATE TABLE IF NOT EXISTS `tblsample` (
  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)
);***

tedder42's user avatar

tedder42

23.3k13 gold badges86 silver badges100 bronze badges

answered Nov 16, 2017 at 9:28

Balkishan's user avatar

BalkishanBalkishan

2813 silver badges4 bronze badges

I have a solution to a problem that may also apply to you. My database was in a state where a DROP TABLE failed because it couldn’t find the table… but a CREATE TABLE also failed because MySQL thought the table existed. (This state could easily mess with your IF NOT EXISTS clause).

I eventually found this solution:

sudo mysqladmin flush-tables

For me, without the sudo, I got the following error:

mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'

(Running on OS X 10.6)

answered Nov 23, 2010 at 0:05

Craig Walker's user avatar

Craig WalkerCraig Walker

49.4k53 gold badges151 silver badges211 bronze badges

0

Create mysql connection with following parameter. «‘raise_on_warnings’: False». It will ignore the warning. e.g.

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)

answered Feb 8, 2014 at 10:25

Vinay's user avatar

VinayVinay

4331 gold badge5 silver badges11 bronze badges

1

I had a similar Problem as @CraigWalker on debian: My database was in a state where a DROP TABLE failed because it couldn’t find the table, but a CREATE TABLE also failed because MySQL thought the table still existed. So the broken table still existed somewhere although it wasn’t there when I looked in phpmyadmin.

I created this state by just copying the whole folder that contained a database with some MyISAM and some InnoDB tables

cp -a /var/lib/mysql/sometable /var/lib/mysql/test

(this is not recommended!)

All InnoDB tables where not visible in the new database test in phpmyadmin.

sudo mysqladmin flush-tables didn’t help either.

My solution: I had to delete the new test database with drop database test and copy it with mysqldump instead:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql

answered Jun 22, 2017 at 4:13

rubo77's user avatar

rubo77rubo77

19.3k30 gold badges132 silver badges225 bronze badges

Well there are lot of answeres already provided and lot are making sense too.

Some mentioned it is just warning and some giving a temp way to disable warnings. All that will work but add risk when number of transactions in your DB is high.

I came across similar situation today and here is the query I came up with…

declare
begin
  execute immediate '
    create table "TBL" ("ID" number not null)';
  exception when others then
    if SQLCODE = -955 then null; else raise; end if;
end;
/

This is simple, if exception come while running query it will be suppressed. and you can use same for SQL or Oracle.

answered Apr 23, 2020 at 11:16

Kunal Vohra's user avatar

Kunal VohraKunal Vohra

2,6872 gold badges14 silver badges33 bronze badges

If anyone is getting this error after a Phpmyadmin export, using the custom options and adding the «drop tables» statements cleared this right up.

HoldOffHunger's user avatar

answered Dec 2, 2018 at 17:44

nizz0k's user avatar

nizz0knizz0k

4411 gold badge7 silver badges20 bronze badges

This article will discuss the script to create a table in MySQL only if it does not already exist. We will be using the IF NOT EXISTS clause within the create table script.

Further, in the examples, we will be writing create table scripts using the IF NOT EXISTS clause and without it to analyze the difference between both.

Let us get started by creating the table. We are assuming that this is a fresh creation.

Advertisements

CREATE TABLE IF NOT EXISTS sale_details (
    id INT auto_increment,
    sale_person_name VARCHAR(255),
    no_products_sold INT,
    sales_department VARCHAR(255),
    primary key (id)
);

Action Output:-

image_1

Output Message in image_1 shows that table is created successfully.

Let us re-run the create table statement.

CREATE TABLE IF NOT EXISTS sale_details (
    id INT auto_increment,
    sale_person_name VARCHAR(255),
    no_products_sold INT,
    sales_department VARCHAR(255),
    primary key (id)
);

Action Output:-

image_2

The output in image_2 shows a warning with the below message response.

Action Output Message:-

0 row(s) affected, 1 warning(s): 1050 Table ‘sale_details’ already exists 0.0021 sec

MySQL server has not returned with an error in this case, but what if the IF NOT EXISTS clause is absent in the create table statement. Let us view the situation by removing the IF NOT EXISTS clause and running the statement to create the table again.

CREATE TABLE sale_details (
    id INT auto_increment,
    sale_person_name VARCHAR(255),
    no_products_sold INT,
    sales_department VARCHAR(255),
    primary key (id)
);

Action Output:-

image_3

The highlighted row in the image_3 shows the MySQL server threw an error, this time with the below message.

Action Output Message:-

Error Code: 1050. Table ‘sale_details’ already exists.

READ MORE:

  • MySQL IF EXISTS DROP Table
  • Insert into a MySQL table or update if exists

We hope this article helped with IF NOT EXISTS CREATE TABLE statements. Good Luck!!!

You need to add a widget, row, or prebuilt layout before you’ll see anything here. 🙂

А вообще лови весь запрос

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `chat`
-- ----------------------------
DROP TABLE IF EXISTS `chat`;
CREATE TABLE `chat` (
  `gameID` int(10) NOT NULL default '0',
  `playerName` varchar(250) NOT NULL default '',
  `num` int(6) NOT NULL default '0',
  `text` text NOT NULL,
  PRIMARY KEY  (`gameID`),
  KEY `game_chat` (`gameID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of chat
-- ----------------------------

-- ----------------------------
-- Table structure for `complete`
-- ----------------------------
DROP TABLE IF EXISTS `complete`;
CREATE TABLE `complete` (
  `gameID` int(10) NOT NULL default '0',
  `players` varchar(250) NOT NULL default '',
  `result` varchar(7) NOT NULL default '',
  `pgn` text NOT NULL,
  PRIMARY KEY  (`gameID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of complete
-- ----------------------------

-- ----------------------------
-- Table structure for `games`
-- ----------------------------
DROP TABLE IF EXISTS `games`;
CREATE TABLE `games` (
  `gameID` int(10) NOT NULL auto_increment,
  `gameDate` varchar(14) NOT NULL default '',
  `whitePlayerID` smallint(3) NOT NULL default '0',
  `blackPlayerID` smallint(3) NOT NULL default '0',
  `nextMoveNum` smallint(3) NOT NULL default '1',
  `nextTurnColor` varchar(5) NOT NULL default 'white',
  `lastMove` varchar(250) NOT NULL default '',
  `setup` longtext NOT NULL,
  `wCastle` varchar(250) NOT NULL default '',
  `bCastle` varchar(250) NOT NULL default '',
  `winner` char(3) NOT NULL default '0',
  `reqDraw` tinyint(3) NOT NULL default '0',
  `reqUndo` smallint(1) NOT NULL default '0',
  PRIMARY KEY  (`gameID`),
  KEY `won_games` (`winner`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of games
-- ----------------------------

-- ----------------------------
-- Table structure for `moves`
-- ----------------------------
DROP TABLE IF EXISTS `moves`;
CREATE TABLE `moves` (
  `gameID` int(10) NOT NULL default '0',
  `moveNum` mediumint(3) NOT NULL default '0',
  `whiteMove` varchar(7) NOT NULL default '',
  `blackMove` varchar(7) NOT NULL default '',
  KEY `game_moves` (`gameID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of moves
-- ----------------------------

-- ----------------------------
-- Table structure for `options`
-- ----------------------------
DROP TABLE IF EXISTS `options`;
CREATE TABLE `options` (
  `id` int(5) NOT NULL,
  `optionName` varchar(150) NOT NULL default '',
  `optionValue` varchar(250) NOT NULL default '',
  `varName` varchar(150) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of options
-- ----------------------------
INSERT INTO `options` VALUES ('0', 'version', '2.0', '', '');
INSERT INTO `options` VALUES ('5', 'host', '', 'host', 'text');
INSERT INTO `options` VALUES ('10', 'db_user_name', '', 'dbUser', 'text');
INSERT INTO `options` VALUES ('15', 'db_password', '', 'dbPass', 'password');
INSERT INTO `options` VALUES ('20', 'database', '', 'database', 'text');
INSERT INTO `options` VALUES ('25', 'db_prefix', '', 'dbPre', 'text');
INSERT INTO `options` VALUES ('30', 'domain', '', 'domain', 'text');
INSERT INTO `options` VALUES ('35', 'language', 'en', 'lang', 'text');
INSERT INTO `options` VALUES ('40', 'home_folder', '', 'homeFolder', 'text');
INSERT INTO `options` VALUES ('45', 'admin_email', '', 'adminEmail', 'text');
INSERT INTO `options` VALUES ('50', 'backup_email', '', 'backupEmail', 'checkbox');
INSERT INTO `options` VALUES ('55', 'backup_folder', '', 'backupFolder', 'checkbox');
INSERT INTO `options` VALUES ('60', 'show_update', '1', 'showUpdate', 'checkbox');
INSERT INTO `options` VALUES ('65', 'show_backup', '1', 'showBackup', 'checkbox');
INSERT INTO `options` VALUES ('70', 'board_refresh', '35', 'boardRefresh', 'text');
INSERT INTO `options` VALUES ('75', 'chat_refresh', '37', 'chatRefresh', 'text');
INSERT INTO `options` VALUES ('80', 'show_stats', '1', 'showStats', 'checkbox');
INSERT INTO `options` VALUES ('85', 'show_chat', '1', 'showChat', 'checkbox');
INSERT INTO `options` VALUES ('90', 'show_player_image', '1', 'showPlayerImg', 'checkbox');
INSERT INTO `options` VALUES ('95', 'player_image_dir', 'playerImg', 'playerImgDir', 'text');
INSERT INTO `options` VALUES ('100', 'alow_undo', '', 'allowUndo', 'checkbox');
INSERT INTO `options` VALUES ('105', 'email_move', '', 'emailMove', 'checkbox');
INSERT INTO `options` VALUES ('110', 'delete_chat', '1', 'deleteChat', 'checkbox');
INSERT INTO `options` VALUES ('115', 'delete_moves', '', 'deleteMoves', 'checkbox');
INSERT INTO `options` VALUES ('120', 'start_power', '0', 'startPower', 'text');
INSERT INTO `options` VALUES ('125', 'end_days', '30', 'endDays', 'text');
INSERT INTO `options` VALUES ('130', 'allow_register', '', 'allowRegister', 'checkbox');
INSERT INTO `options` VALUES ('135', 'verify_register', '', 'verifyReg', 'checkbox');

-- ----------------------------
-- Table structure for `players`
-- ----------------------------
DROP TABLE IF EXISTS `players`;
CREATE TABLE `players` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(125) NOT NULL,
  `online` int(1) NOT NULL default '0',
  `timeOnline` decimal(12,0) NOT NULL,
  `pword` varchar(250) NOT NULL,
  `power` smallint(1) NOT NULL default '0',
  `pic` varchar(250) NOT NULL,
  `realname` varchar(250) NOT NULL,
  `location` varchar(250) NOT NULL,
  `email` varchar(250) NOT NULL,
  `invitedBy` varchar(4) NOT NULL default '0',
  `addDate` varchar(14) NOT NULL,
  `secQuestion` varchar(90) NOT NULL,
  `secAnswer` varchar(250) NOT NULL,
  `wins` int(10) NOT NULL,
  `loses` int(10) NOT NULL,
  `draws` int(10) NOT NULL,
  `points` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;;

-- ----------------------------
-- Records of players
-- ----------------------------
INSERT INTO `players` VALUES ('1', 'admin', '0', '0', '21232f297a57a5a743894a0e4a801fc3', '4', 'default.png', '', '', '', '0', '2014-02-14', '', '', '0', '0', '0', '0');

Умение создать таблицу — важный, даже можно сказать фундаментальный навык в работе с SQL.

В этом руководстве я покажу вам синтаксис инструкции CREATE TABLE на примерах с PostgreSQL и MySQL.

Базовый синтаксис CREATE TABLE

Вот синтаксис инструкции CREATE TABLE (букв. «создать таблицу»):

CREATE TABLE table_name(
    column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc
);

Начинаем с самой инструкции CREATE TABLE. Сразу за ней идет имя таблицы, которую вы хотите создать.

Предположим, я хочу создать таблицу с информацией о преподавателях. Я могу написать следующий запрос:

CREATE TABLE teachers();

В скобках указывается дополнительная информация о столбцах таблицы. Если вы забудете скобки, то получите сообщение об ошибке:

CREATE TABLE teachers;

Точка с запятой после скобок сообщает о том, что это конец SQL-инструкции.

Движки хранения данных MySQL

Согласно документации MySQL, «Движки хранения данных — это компоненты MySQL, управляющие SQL-операциями для разных типов таблиц».

MySQL использует эти движки для осуществления CRUD-операций (создание, чтение, обновление и удаление данных) в базе данных.

В MySQL можно указать тип движка, который вы хотите использовать для вашей таблицы. Для этого используется предложение ENGINE. Если вы его опустите, будет применен дефолтный движок — InnoDB.

CREATE TABLE table_name(
    column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc
)ENGINE=storage_engine;

От редакции Techrocks. Возможно, вам также будут интересны следующие статьи:

  • Запросы SQL: руководство для начинающих
  • Оператор UPDATE в SQL: разбираем на примерах
  • Выражение CASE в SQL: объяснение на примерах
  • Порядок выполнения SQL-операций

Что такое IF NOT EXISTS?

Вы можете добавить в запрос опциональное предложение IF NOT EXISTS. Оно нужно для проверки, не существует ли уже в базе данных та таблица, которую вы хотите создать. Это предложение можно поместить непосредственно перед именем таблицы.

CREATE TABLE IF NOT EXISTS teachers();

Если такая таблица существует, новая не будет создана.

Если не указать IF NOT EXISTS и попытаться создать заново уже существующую таблицу, получите сообщение об ошибке.

В этом примере я создала таблицу teachers. Попытавшись создать такую же таблицу снова, я получила ошибку.

CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();

Как создавать столбцы в таблице

В инструкции CREATE TABLE, в круглых скобках после имени таблицы, перечисляются имена столбцов, которые вы хотите создать, а также их типы данных и ограничения.

В этом примере мы добавим в таблицу teachers четыре столбца: school_id, name, email и age. Имена столбцов разделяются запятыми.

CREATE TABLE teachers(
    school_id data_type column_constraint, 
    name data_type column_constraint,
    email data_type column_constraint, 
    age data_type column_constraint
);

Согласно документации MySQL, «В MySQL установлено жесткое ограничение в 4096 столбцов на таблицу, но эффективный максимум может быть меньше. Реальный лимит количества столбцов зависит от нескольких факторов».

Впрочем, если вы работаете над маленькими личными проектами, маловероятно, что вам понадобится больше столбцов, чем это разрешено.

Согласно документации PostgreSQL, в этой СУБД установлен лимит в 1600 столбцов на таблицу. Так же, как и в MySQL, максимальное число столбцов может варьироваться в зависимости от количества места на диске или ограничений производительности.

Типы данных в SQL

При создании столбцов таблицы нужно указать их тип данных. Типы данных описывают значения, которые будут храниться в столбцах.

В SQL есть шесть популярных категорий типов данных:

  • числа (int, float, serial, decimal)
  • дата и время (timestamp, data, time)
  • символы и строки (char, varchar, text)
  • Unicode (ntext, nvarchar)
  • бинарные данные (binary)
  • смешанные (xml, table и др.)

Здесь мы не будем разбирать все типы, затронем только самые популярные. Полный список возможных типов данных можно посмотреть в документации: для PostgreSQL и для MySQL.

Что такое SERIAL и AUTO_INCREMENT?

В PostgreSQL тип данных SERIAL — это целое число, которое будет автоматически увеличиваться на единицу при каждом создании новой строки.

Мы можем указать тип данных SERIAL сразу после имени столбца school_id в нашей таблице teachers.

school_id SERIAL

В MySQL вместо SERIAL используется инструкция AUTO_INCREMENT. В примере ниже мы использовали ее с типом данных INT, представляющим целые числа.

school_id INT AUTO_INCREMENT

Если мы добавим в таблицу teachers пять строк и выведем содержимое столбца school_id, будут показаны числа 1, 2, 3, 4, 5. Число автоматически возрастает для каждой новой строки.

Что из себя представляет тип данных VARCHAR?

VARCHAR — это строковые данные переменной длины, где можно установить максимальную длину символов.

Ниже показан пример использования типа данных VARCHAR для столбцов name и email в таблице teachers. Здесь установлена максимальная длина в 30 символов.

name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,

Ограничения столбцов

Ограничения — это правила, которые должны соблюдаться относительно данных в столбцах таблицы.

Вот список нескольких самых распространенных ограничений столбцов:

  • PRIMARY KEY — если для столбца установлено это ограничение, данные в нем становятся уникальными идентификаторами строк в таблице
  • FOREIGN KEY — этот ключ связывает данные в одной таблице с данными в другой
  • UNIQUE — все значения в столбце должны быть уникальными
  • NOT NULL — значения не могут быть NULL. NULL — это отсутствие значения
  • CHECK — проверка значения на соответствие логическому выражению

Примеры PRIMARY и FOREIGN ключей

Давайте добавим ограничение PRIMARY KEY (первичный ключ) для столбца school_id в нашей таблице teachers.

В PostgreSQL код будет выглядеть так:

school_id SERIAL PRIMARY KEY

А в MySQL — так:

school_id INT AUTO_INCREMENT PRIMARY KEY

Первичный ключ может быть составным, т. е. строка может уникально идентифицироваться двумя столбцами. Чтобы установить PRIMARY KEY для нескольких столбцов, эту инструкцию нужно добавить сразу после создания самих столбцов:

CREATE TABLE table_name(
    column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc
    PRIMARY KEY (column1, column2)
);

Если вы хотите связать одну таблицу с другой, следует использовать FOREIGN KEY (внешний ключ).

Допустим, у нас есть таблица district_employees с первичным ключом district_id. Вот как будет выглядеть код в PostgreSQL:

CREATE TABLE district_employees(
   district_id SERIAL PRIMARY KEY,
   employee_name VARCHAR(30) NOT NULL,
   PRIMARY KEY(district_id)
);

В таблице teachers мы можем установить связь с таблицей district_employees при помощи внешнего ключа:

district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
    school_id SERIAL PRIMARY KEY,
    district_id INT REFERENCES district_employees(district_id),
    column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc 
);

Примеры NOT NULL, CHECK и UNIQUE

Если бы нам нужно было обеспечить отсутствие значений NULL в столбцах, мы могли бы прописать ограничение NOT NULL.

name VARCHAR(30) NOT NULL

При помощи ограничения CHECK можно гарантировать, что все учителя в таблице будут старше 18 лет. CHECK проверяет значение на соответствие логическому выражению.

Если одно из значений не соответствует условию, мы получим сообщение об ошибке.

Ограничение UNIQUE мы можем использовать, чтобы обеспечить уникальность всех электронных адресов.

email VARCHAR(30) UNIQUE

Вот так выглядит наша таблица teachers в итоге:

Полный код в PostgreSQL:

CREATE TABLE teachers(
    school_id SERIAL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email VARCHAR(30) UNIQUE,
    age INT CHECK(age >= 18)      
);

И в MySQL:

CREATE TABLE teachers(
    school_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email VARCHAR(30) UNIQUE,
    age INT CHECK(age >= 18)      
);

Надеюсь, эта статья была вам полезна!

Перевод статьи «How to Create a Table in SQL – Postgres and MySQL Example Query».

CREATE TABLE is a PostgreSQL’s command for creating tables. In Postgres, attempting to create a table that already exists will result in an error stating that the «relation already exists». To avoid such errors, the IF NOT EXISTS clause can be used with the CREATE TABLE command.

This write-up will show you how to use the IF NOT EXISTS clause with the CREATE TABLE command. So, let’s start.

How to Create a Table in Postgres?

In Postgres, the CREATE TABLE command assists us in creating a new table. Here is the very simple yet effective syntax to create a table in PostgreSQL:

CREATE TABLE tab_name(
first_col data_type,
second_col data_type,
third_col data_type,
.....
nth_col data_type,
);

Here, tab_name represents a table to be created. first_col, second_col, …, nth_col are the column names to be defined in the desired table with their respective data types.

Example #1: Create a Table

Let’s create a new table named “emp_record”:

CREATE TABLE emp_record(
emp_id INT PRIMARY KEY,
emp_name TEXT, 
emp_leaves INT,
emp_salary INT);

In this example, we created four columns: emp_id, emp_name, emp_leaves, and emp_salaray. The emp_name column has a TEXT data type, while the remaining three columns have an INT data type:

img

The emp_record table with four columns has been created successfully. Now, you can insert as many records as you want. Let’s insert the following three records into the newly created table:

INSERT INTO emp_record(
emp_id, emp_name, emp_leaves, emp_salary)
VALUES (1, 'Joe', 1, 40000),
(2, 'Seth', 0, 50000),
(3, 'John', 2, 45000);

img

Three new records have been inserted into the emp_record table.

PostgreSQL Create Table IF NOT EXISTS

If a database already has a table with the same name, then a «relation already exists» error will appear in Postgres. To avoid such a situation, PostgreSQL provides an IF NOT EXISTS clause that can be used with the CREATE TABLE command as follows:

CREATE TABLE IF NOT EXISTS tab_name(
first_col data_type,
second_col data_type,
third_col data_type,
.....
nth_col data_type
);

Here, the IF NOT EXISTS clause will first check the existence of the targeted table. If the table already exists, then a notice will be issued instead of throwing an error. However, a new table with the specified name will be created in the database if the desired table doesn’t exist.

Example #1: What is the Need For IF NOT EXISTS Clause?

Let’s create a new table with the same name, i.e., emp_record:

CREATE TABLE emp_record(
emp_name TEXT,
emp_age INT);

img

Postgres throws an error stating that the targeted table already exists in the database.

Example #2: How Does IF NOT EXISTS Clause Work in Postgres?

From the previous example, it is clear that Postgres will throw an error while creating an existing table. This example will demonstrate how to avoid the “relation already exists” error:

CREATE TABLE IF NOT EXISTS emp_record(
emp_name TEXT,
emp_age INT);

img

The output clarifies that the IF NOT EXISTS clause shows a notice instead of throwing an error. In this way, you can use the IF NOT EXISTS clause with the CREATE TABLE command to avoid the “relation already exists” error.

Conclusion

In PostgreSQL, the CREATE TABLE command assists us in creating a new table. In Postgres, attempting to create a table that already exists will result in an error stating that the «relation already exists». To avoid such errors, the IF NOT EXISTS clause is used with the CREATE TABLE command. This article used various examples to demonstrate how the PostgreSQL CREATE TABLE IF NOT EXISTS command works in PostgreSQL.

Понравилась статья? Поделить с друзьями:
  • Create package xml ошибка прекращена работа программы
  • Create 2d texture ошибка call of duty ww2
  • Crc32 не совпадает starline ошибка
  • Crc ошибки сети
  • Crc ошибки роутер