
- MySQL - Home
- MySQL - Introduction
- MySQL - Features
- MySQL - Versions
- MySQL - Variables
- MySQL - Installation
- MySQL - Administration
- MySQL - PHP Syntax
- MySQL - Node.js Syntax
- MySQL - Java Syntax
- MySQL - Python Syntax
- MySQL - Connection
- MySQL - Workbench
- MySQL Databases
- MySQL - Create Database
- MySQL - Drop Database
- MySQL - Select Database
- MySQL - Show Database
- MySQL - Copy Database
- MySQL - Database Export
- MySQL - Database Import
- MySQL - Database Info
- MySQL Users
- MySQL - Create Users
- MySQL - Drop Users
- MySQL - Show Users
- MySQL - Change Password
- MySQL - Grant Privileges
- MySQL - Show Privileges
- MySQL - Revoke Privileges
- MySQL - Lock User Account
- MySQL - Unlock User Account
- MySQL Tables
- MySQL - Create Tables
- MySQL - Show Tables
- MySQL - Alter Tables
- MySQL - Rename Tables
- MySQL - Clone Tables
- MySQL - Truncate Tables
- MySQL - Temporary Tables
- MySQL - Repair Tables
- MySQL - Describe Tables
- MySQL - Add/Delete Columns
- MySQL - Show Columns
- MySQL - Rename Columns
- MySQL - Table Locking
- MySQL - Drop Tables
- MySQL - Derived Tables
- MySQL Queries
- MySQL - Queries
- MySQL - Constraints
- MySQL - Insert Query
- MySQL - Select Query
- MySQL - Update Query
- MySQL - Delete Query
- MySQL - Replace Query
- MySQL - Insert Ignore
- MySQL - Insert on Duplicate Key Update
- MySQL - Insert Into Select
- MySQL Indexes
- MySQL - Indexes
- MySQL - Create Index
- MySQL - Drop Index
- MySQL - Show Indexes
- MySQL - Unique Index
- MySQL - Clustered Index
- MySQL - Non-Clustered Index
- MySQL Operators and Clauses
- MySQL - Where Clause
- MySQL - Limit Clause
- MySQL - Distinct Clause
- MySQL - Order By Clause
- MySQL - Group By Clause
- MySQL - Having Clause
- MySQL - AND Operator
- MySQL - OR Operator
- MySQL - Like Operator
- MySQL - IN Operator
- MySQL - ANY Operator
- MySQL - EXISTS Operator
- MySQL - NOT Operator
- MySQL - NOT EQUAL Operator
- MySQL - IS NULL Operator
- MySQL - IS NOT NULL Operator
- MySQL - Between Operator
- MySQL - UNION Operator
- MySQL - UNION vs UNION ALL
- MySQL - MINUS Operator
- MySQL - INTERSECT Operator
- MySQL - INTERVAL Operator
- MySQL Joins
- MySQL - Using Joins
- MySQL - Inner Join
- MySQL - Left Join
- MySQL - Right Join
- MySQL - Cross Join
- MySQL - Full Join
- MySQL - Self Join
- MySQL - Delete Join
- MySQL - Update Join
- MySQL - Union vs Join
- MySQL Keys
- MySQL - Unique Key
- MySQL - Primary Key
- MySQL - Foreign Key
- MySQL - Composite Key
- MySQL - Alternate Key
- MySQL Triggers
- MySQL - Triggers
- MySQL - Create Trigger
- MySQL - Show Trigger
- MySQL - Drop Trigger
- MySQL - Before Insert Trigger
- MySQL - After Insert Trigger
- MySQL - Before Update Trigger
- MySQL - After Update Trigger
- MySQL - Before Delete Trigger
- MySQL - After Delete Trigger
- MySQL Data Types
- MySQL - Data Types
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL Regular Expressions
- MySQL - Regular Expressions
- MySQL - RLIKE Operator
- MySQL - NOT LIKE Operator
- MySQL - NOT REGEXP Operator
- MySQL - regexp_instr() Function
- MySQL - regexp_like() Function
- MySQL - regexp_replace() Function
- MySQL - regexp_substr() Function
- MySQL Fulltext Search
- MySQL - Fulltext Search
- MySQL - Natural Language Fulltext Search
- MySQL - Boolean Fulltext Search
- MySQL - Query Expansion Fulltext Search
- MySQL - ngram Fulltext Parser
- MySQL Functions & Operators
- MySQL - Date and Time Functions
- MySQL - Arithmetic Operators
- MySQL - Numeric Functions
- MySQL - String Functions
- MySQL - Aggregate Functions
- MySQL Misc Concepts
- MySQL - NULL Values
- MySQL - Transactions
- MySQL - Using Sequences
- MySQL - Handling Duplicates
- MySQL - SQL Injection
- MySQL - SubQuery
- MySQL - Comments
- MySQL - Check Constraints
- MySQL - Storage Engines
- MySQL - Export Table into CSV File
- MySQL - Import CSV File into Database
- MySQL - UUID
- MySQL - Common Table Expressions
- MySQL - On Delete Cascade
- MySQL - Upsert
- MySQL - Horizontal Partitioning
- MySQL - Vertical Partitioning
- MySQL - Cursor
- MySQL - Stored Functions
- MySQL - Signal
- MySQL - Resignal
- MySQL - Character Set
- MySQL - Collation
- MySQL - Wildcards
- MySQL - Alias
- MySQL - ROLLUP
- MySQL - Today Date
- MySQL - Literals
- MySQL - Stored Procedure
- MySQL - Explain
- MySQL - JSON
- MySQL - Standard Deviation
- MySQL - Find Duplicate Records
- MySQL - Delete Duplicate Records
- MySQL - Select Random Records
- MySQL - Show Processlist
- MySQL - Change Column Type
- MySQL - Reset Auto-Increment
- MySQL - Coalesce() Function
MySQL - INT
The MySQL INT Data Type
The MySQL INT data type is used to store whole numbers without the decimal places (integers).
However, MySQL provides various integer data types, such as TINYINT, SMALLINT, MEDIUMINT, and BIGINT to cater to different ranges of whole numbers.
The following table illustrates the characteristics of different integer types in MySQL, including storage in bytes, minimum value, and maximum value for both signed and unsigned options −
Type | Storage (Bytes) | Minimum value (Signed/Unsigned) | Maximum value (Signed/Unsigned) |
---|---|---|---|
TINYINT | 1 | -128/ 0 | 127/ 255 |
SMALLINT | 2 | -32768/ 0 | 32767/ 65535 |
MEDIUMINT | 3 | -8388608/ 0 | 8388607/ 16777215 |
INT | 4 | -8388607/ 16777215 | 2147483647/ 4294967295 |
BIGINT | 8 | - 9223372036854775808 / 0 | 9223372036854775807 / 18446744073709551615 |
We have to choose the data types based on the kind (type) of data being stored. If possible, we need to use smaller data types to minimize the database size. TINYINT can be used for small numbers, while INT or BIGINT is used for large numbers like phone numbers in a country.
Auto Increment with MySQL INT
In MySQL, you can use the AUTO_INCREMENT attribute with an INT column to automatically generate unique values for that column. Here's how it works −
Initial Value − When you create a table with an AUTO_INCREMENT INT column, the sequence starts with 1.
Inserting NULL or 0 − When you insert a record with a NULL or 0 value for the AUTO_INCREMENT column, MySQL sets the value to the next sequence value. This means it assigns the next available integer starting from 1.
Inserting Non-NULL Values − If you insert a non-NULL value into the AUTO_INCREMENT column, MySQL accepts that value and continues the sequence based on the new value inserted.
Example
First of all, we are creating a table named STUDENTS with an AUTO_INCREMENT INT column named "ID" −
CREATE TABLE STUDENTS ( ID int auto_increment, NAME varchar(20), primary key (ID) );
When we insert records into this table without specifying values for the "ID" column, MySQL automatically generates unique values for "ID" starting from 1.
Here, we are inserting three rows into the STUDENTS table using the below INSERT query −
INSERT INTO STUDENTS (NAME) VALUES ('Tilak'), ('Akash'), ('Surya'), ('Deepak');
The STUDENTS table created is as follows −
ID | NAME |
---|---|
1 | Tilak |
2 | Akash |
3 | Surya |
4 | Deepak |
Now, let us insert a row where we provide an explicit value for the "ID" column −
INSERT INTO STUDENTS (ID, NAME) VALUES (15, 'Arjun');
Following is the output obtained −
Query OK, 1 row affected (0.01 sec)
Since we specified the "ID" as 15, MySQL resets the sequence to 16. If we insert a new row without specifying the "ID," MySQL will use 16 as the next AUTO_INCREMENT value −
INSERT INTO STUDENTS (NAME) VALUES ('Dev');
The output obtained is as follows −
Query OK, 1 row affected (0.01 sec)
Now, let us retrieve the records from the "STUDENTS" table −
SELECT * FROM STUDENTS;
The table produced is −
ID | NAME |
---|---|
1 | Tilak |
2 | Akash |
3 | Surya |
4 | Deepak |
15 | Arjun |
16 | Dev |
From MySQL 5.1 version and onwards, the AUTO_INCREMENT column accepts only positive values and does not allow negative values.
MySQL INT UNSIGNED
In MySQL, when you define an UNSIGNED INT on a column, that column is restricted to storing only non-negative values (i.e., positive values). Negative values are not allowed in such columns.
Example
Let us create a table with the name EMPLOYEES using the following query −
CREATE TABLE EMPLOYEES ( ID int auto_increment, NAME varchar(30) not null, AGE int UNSIGNED, Primary key(ID) );
Following is the output obtained −
Query OK, 0 rows affected (0.04 sec)
Now, let us insert a row with a non-negative value into the "AGE" column −
INSERT INTO EMPLOYEES (NAME, AGE) VALUES ('Varun', 32);
The above query will execute successfully since the value provided for the "AGE" column is non-negative.
Query OK, 1 row affected (0.01 sec)
However, if we attempt to insert a negative value into the "AGE" column, MySQL will generate an error −
INSERT INTO EMPLOYEES (NAME, AGE) VALUES ('Sunil', -10);
MySQL will issue an error as shown below −
ERROR 1264 (22003): Out of range value for column 'AGE' at row 1
MySQL INT with Display Width Attribute
In MySQL, you can specify a display width for the INT data type by using parentheses after the INT keyword. For instance, using INT(5) sets the display width to five digits.
It's important to note that the display width attribute for INT in MySQL doesn't affect the range of values that can be stored in the column. It formats integer values in applications, and is included as metadata in the result set.
For example, if you insert the value 12345 into the id column of the EMPLOYEES table, it will be stored as is. When you retrieve it, some applications may choose to pad it with leading zeros to ensure it is displayed as five digits (e.g., 012345).
MySQL INT with ZEROFILL Attribute
In MySQL, the ZEROFILL attribute is a non-standard attribute that can be applied to numeric data types. It adds leading zeros to the displayed values, making sure the number is displayed with a fixed width, especially useful for numerical codes.
Example
Let us create a table with the name ZEROFILL_TABLE with ZEROFILL applied to INT columns using the query below −
CREATE TABLE ZEROFILL_TABLE ( col1 int(4) ZEROFILL, col2 int(6) ZEROFILL, col3 int(8) ZEROFILL );
The output obtained is as follows −
Query OK, 0 rows affected, 6 warnings (0.02 sec)
Now, we are inserting a new row into the above-created table −
INSERT INTO ZEROFILL_TABLE (col1, col2, col3) VALUES (1, 7, 3);
Following is the output of the above code −
Query OK, 1 row affected (0.00 sec)
Now, let us display the records from the ZEROFILL_TABLE table −
SELECT * FROM ZEROFILL_TABLE;
We can see in the output below, the values are displayed with the specified width, and leading zeros are added to maintain that width, as determined by the ZEROFILL attribute −
col1 | col2 | col3 |
---|---|---|
0001 | 000007 | 00000003 |
INT Datatype Using a Client Program
We can also create column of the INT datatype using the client program.
Syntax
To create a column of INT datatype through a PHP program, we need to execute the "CREATE TABLE" statement using the mysqli function query() as follows −
$sql = 'CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )'; $mysqli->query($sql);
To create a column of INT datatype through a JavaScript program, we need to execute the "CREATE TABLE" statement using the query() function of mysql2 library as follows −
sql = "CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )"; con.query(sql);
To create a column of INT datatype through a Java program, we need to execute the "CREATE TABLE" statement using the JDBC function execute() as follows −
String sql = "CREATE TABLE students(Id INT AUTO_INCREMENT primary key not null, reg_No INT)"; statement.execute(sql);
To create a column of INT datatype through a python program, we need to execute the "CREATE TABLE" statement using the execute() function of the MySQL Connector/Python as follows −
sql = 'CREATE TABLE students (ID int auto_increment, NAME varchar(20), primary key (ID) )' cursorObj.execute(sql)
Example
Following are the programs −
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); //create table with boolean column $sql = 'CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )'; $result = $mysqli->query($sql); if ($result) { printf("Table created successfully...!\n"); } //insert data into created table $q = "INSERT INTO students (reg_No) VALUES (101), (102)"; if ($res = $mysqli->query($q)) { printf("Data inserted successfully...!\n"); } //now display the table records $s = "SELECT Id, reg_No FROM students"; if ($r = $mysqli->query($s)) { printf("Table Records: \n"); while ($row = $r->fetch_assoc()) { printf(" ID: %d, Reg: %s", $row["Id"], $row["reg_No"]); printf("\n"); } } else { printf('Failed'); } $mysqli->close();
Output
The output obtained is as follows −
Table Records: ID: 1, Reg: 101 ID: 2, Reg: 102
var mysql = require("mysql2"); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password", }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; //console.log("Connected successfully...!"); //console.log("--------------------------"); sql = "USE TUTORIALS"; con.query(sql); //create a students table, that accepts one column of int type. sql = "CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )"; con.query(sql); //insert data into created table sql = "INSERT INTO students (reg_No) VALUES (101), (102)"; con.query(sql); //select datatypes of salary sql = `SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'students' AND COLUMN_NAME = 'reg_No'`; con.query(sql, function (err, result) { if (err) throw err; console.log(result); }); });
Output
The output produced is as follows −
[ { DATA_TYPE: 'int' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Int { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/TUTORIALS"; String username = "root"; String password = "password"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //Int data types...!; String sql = "CREATE TABLE students(Id INT AUTO_INCREMENT primary key not null, reg_No INT)"; statement.execute(sql); System.out.println("column of a INT type created successfully...!"); ResultSet resultSet = statement.executeQuery("DESCRIBE students"); while (resultSet.next()){ System.out.println(resultSet.getString(1)+" "+resultSet.getString(2)); } connection.close(); } catch (Exception e) { System.out.println(e); } } }
Output
The output obtained is as shown below −
Connected successfully...! column of a INT type created successfully...! Id int reg_No int
import mysql.connector # Establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) # Creating a cursor object cursorObj = connection.cursor() # Create table with int column sql = '''CREATE TABLE students ( ID int auto_increment, NAME varchar(20), primary key (ID) )''' cursorObj.execute(sql) print("The table is created successfully!") # Data to be inserted data_to_insert = [ (1, 'Tilak'), (2, 'Akash'), (3, 'Surya'), (4, 'Deepak'), (15, 'Arjun'), (16, 'Dev') ] # Insert data into the created table insert_query = "INSERT INTO STUDENTS (ID, NAME) VALUES (%s, %s)" cursorObj.executemany(insert_query, data_to_insert) # Commit the changes after the insert operation connection.commit() print("Rows inserted successfully.") # Now display the table records select_query = "SELECT * FROM Students" cursorObj.execute(select_query) result = cursorObj.fetchall() print("Table Data:") for row in result: print(row) cursorObj.close() connection.close()
Output
Following is the output of the above code −
The table is created successfully! Rows inserted successfully. Table Data: (1, 'Tilak') (2, 'Akash') (3, 'Surya') (4, 'Deepak') (15, 'Arjun') (16, 'Dev')