DEV Community

Cover image for How to create a table with SQL code?
Jing for Chat2DB

Posted on • Updated on

How to create a table with SQL code?

SQL is used not only for working with table data but also for managing all tasks related to databases and tables, including creating and modifying tables. There are two common ways to create a table:

  1. Using interactive tools: Most database management systems (DBMS) come with interactive tools that let users create and manage database tables through a graphical user interface.
  2. Using SQL statements: Tables can also be created and managed directly through SQL statements.

To create a table programmatically, you can use the SQL CREATE TABLE statement. Keep in mind that even when using an interactive tool, SQL statements are being executed in the background. The tool automatically generates and runs these statements for you, so there's no need to manually write them (this is also true when altering an existing table's structure).

The CREATE TABLE statement lets us define the structure of a table, such as its columns, data types, and constraints. In this article, we’ll go over how to use the CREATE TABLE statement to create a table, with real-world examples to demonstrate its usage.

The Basic Syntax of the SQL CREATE TABLE Statement

The CREATE TABLE statement follows this basic syntax:

CREATE TABLE table_name (
    column1 datatype [constraint],
    column2 datatype [constraint],
    ...
);
Enter fullscreen mode Exit fullscreen mode
  • table_name: The name of the table you want to create.
  • column1, column2, and so on: The names of the table's columns.
  • datatype: The data type for each column, such as INT for integers, VARCHAR for variable-length strings, or DATE for date values.
  • constraint: Optional constraints, like NOT NULL (to prevent null values), PRIMARY KEY (to define a primary key), or FOREIGN KEY (to enforce a foreign key relationship).

When creating a new table, the table name must not already exist; otherwise, it will result in an error. To avoid accidentally overwriting an existing table, SQL requires that the table be deleted manually before recreating it, rather than simply overwriting it with a CREATE TABLE command.

DROP TABLE IF EXISTS user;
Enter fullscreen mode Exit fullscreen mode

Data Types

When using the CREATE TABLE statement, it's necessary to assign a suitable data type to each column. Here are some common data types:

Integer Types

  • INT: A 4-byte integer that can store values between -2147483648 and 2147483647.
  • BIGINT: An 8-byte large integer capable of storing a wider range of values.
  • SMALLINT: A 2-byte small integer, typically storing values between -32768 and 32767.

String Types

  • VARCHAR(n): A variable-length string, where n represents the maximum length. For instance, VARCHAR(50) can hold up to 50 characters.
  • CHAR(n): A fixed-length string type. If the string is shorter than the defined length n, it is padded with spaces.
  • TEXT: Used for storing large amounts of text data.

Date and Time Types

  • DATE: Stores dates in the YYYY-MM-DD format.
  • TIME: Stores times in the HH:MM:SS format.
  • DATETIME: Stores both date and time in the YYYY-MM-DD HH:MM:SS format.

Other Types

  • BOOLEAN: Stores boolean values (TRUE or FALSE).
  • DECIMAL(p,s): Stores fixed-point numbers where p is the total number of digits and s is the number of decimal places. For example, DECIMAL(10,2) can hold up to 10 digits with 2 reserved for the decimal part.

Constraints

Constraints help enforce data integrity and define specific rules for the data in a table. Here are some commonly used constraints:

NOT NULL

A NULL value represents missing or undefined data. Columns that allow NULL values can have rows inserted without a value for that column. Conversely, a column defined as NOT NULL requires a value to be provided whenever a row is inserted or updated. Each column in a table is either defined as allowing NULL or as NOT NULL, based on the table's structure. For example:

CREATE TABLE customers(
    customer id INT PRIMARY KEY,
    customer name VARCHAR(50)NOT NULL,
    email VARCHAR(100)
);
Enter fullscreen mode Exit fullscreen mode

In the previous example, the customer_name column is marked as NOT NULL, meaning a value is required when inserting data into the table.

If the NOT NULL constraint is not explicitly set, most DBMS will assume the column allows NULL values by default. However, this behavior is not consistent across all DBMS.

Furthermore, only columns that disallow NULL values can be used as a primary key. A column that permits NULL values cannot be a unique identifier, as NULL signifies missing or unknown data, which cannot ensure uniqueness.

PRIMARY KEY

The primary key is used to ensure that each row in a table is uniquely identifiable. A table can have only one primary key, and the values in the primary key column must be unique with no duplicates. For example:

CREATE TABLE orders(
    order id INT PRIMARY KEY,
    customer id INT,
    order date DATE
);
Enter fullscreen mode Exit fullscreen mode

In this case, the order_id column is set as the primary key, guaranteeing that every order has a unique identifier.

FOREIGN KEY

Foreign keys are used to create a relationship between two tables. The values in the foreign key column must correspond to existing values in the primary key column of another table. For example:

CREATE TABLE orders(
    order id INT PRIMARY KEY,
    customer id INT,
    order date DATE,
    FOREIGN KEY(customer id)REFERENCES customers(customer id)
);
Enter fullscreen mode Exit fullscreen mode

In this case, the customer_id column in the orders table is a foreign key referencing the customer_id column in the customers table. This guarantees that every customer ID added to the orders table exists in the customers table.

UNIQUE

This ensures that the values in the column are unique, though NULL values are allowed. For example:

CREATE TABLE users(
    user_id INT PRIMARY KEY,
    username VARCHAR(50)UNIQUE,
    email VARCHAR(100)
);
Enter fullscreen mode Exit fullscreen mode

In this case, the username column is marked as unique, which means no two users can share the same username.

CHECK

This is used to enforce that the values in a column meet specific conditions. For example:

CREATE TABLE employees(
    employee id INT PRIMARY KEY,
    age INT,
    CHECK(age >= 18)
);
Enter fullscreen mode Exit fullscreen mode

In this case, the age column is constrained to be 18 or older, implemented through a check constraint.

Setting Default Values

SQL enables you to set default values, so if no value is provided during row insertion, the DBMS automatically assigns the default. You can specify this using the DEFAULT keyword within the column definition in the CREATE TABLE statement. For example:

CREATE TABLE user(
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    quantity INT default 1
);
Enter fullscreen mode Exit fullscreen mode

This statement creates a user table with a quantity column representing the number of items per order. In this case, DEFAULT 1 is added, indicating that the DBMS should assign a quantity of 1 if no value is provided. Default values are frequently used for date or timestamp fields.

For instance, by using functions or variables that reference the system date, the system date can be set as the default.

In MySQL, users can set DEFAULT CURRENT_DATE(), Oracle users use DEFAULT SYSDATE, and SQL Server users specify DEFAULT GETDATE().

Case study

Let’s say we need to create a table called students to store student information. The table will have the following structure:

Column Name Data Type Constraints
id INT PRIMARY KEY
name VARCHAR(50) NOT NULL
age INT CHECK (age >= 18)
gender ENUM('male', 'female', 'other') NOT NULL
major VARCHAR(50)

With Chat2DB AI, you can create this table by inputting the table name and column details in natural language, and it will instantly generate the SQL statement for you.

Image description

Click Run and the creation is successful:

Image description

Now we can start inserting data into the table. For instance:

Image description

If we try to insert data that violates the constraints — such as entering a student with an age below 18 — the database will reject the operation and return an error message.

Image description

Points to Note

1. Choosing the Right Data Type

It’s important to choose data types that fit your needs, to avoid wasting storage or introducing inaccuracies. For instance, if a column only holds two possible values (like 0 and 1), use a BOOLEAN type rather than INT.

2. Setting Reasonable Constraints

Constraints maintain data integrity and consistency, but using too many or overly strict constraints may slow down data inserts and updates. Define constraints based on real-world business requirements and the nature of the data.

3. Planning for Future Scalability

When designing a table, consider future business changes to allow easy expansion of the table. You can reserve some extra columns or use flexible data types to accommodate growth.

4. Follow Naming Conventions

Use meaningful names for tables and columns, and stick to a consistent naming convention to make the code more readable and maintainable. For example, you could use plural names for tables and nouns for columns.

Conclusion

The SQL CREATE TABLE statement provides a simple way to create database tables. While doing so, it’s crucial to pick the right data types, define appropriate constraints, and think ahead about scalability and naming conventions. By working through real-world examples, we gain a deeper understanding of how to use CREATE TABLE to design tables that meet our actual needs. Mastering these concepts will improve our ability to manage and work with databases efficiently.


Community

Go to Chat2DB website
🙋 Join the Chat2DB Community
🐦 Follow us on X
📝 Find us on Discord

Top comments (0)