PostgreSQL VS MySQL
Tags: postgres, mysql
Published: 2023-07-29 16:05:45

### MySQL
MySQL is a relational database management system that lets you store data as tables with rows and columns. It’s a popular system that powers many web applications, dynamic websites, and embedded systems.

### PostgreSQL
PostgreSQL is an object-relational database management system that offers more features than MySQL. It gives you more flexibility in data types, scalability, concurrency, and data integrity.

### Similarities
- Both of them are relational database management systems. Hence, They store data in tables that are interrelated to each other via common column values.
- Both of them use SQL as an interface to read and edit data.
- Both are open source and have strong developer community support.
- Both have a built-in data backup, replication, and access control features.

### Dissimilarities
#### Triggers
Triggers are stored procedure that runs automatically when a related event occurs in the database management system.

Only AFTER and BEFORE triggers are used in a MySQL database for SQL INSERT, UPDATE, and DELETE statements. Which explains that only the procedure will run automatically before or after the user modifies the data.

While as in case of PostgreSQL, it supports the INSTEAD OF trigger, so you can run complex SQL statements using functions.

#### Stored Procedures
Stored procedures are pieces of SQL queries or code statements stored before hand. In order to utilize later or to enable the reusability in the database which will increase the efficiency.

While both MySQL and PostgreSQL support stored procedures, PostgreSQL allows you to call stored procedures written in languages other than SQL unlike MySQL.

#### Views
A view is a sub set data/table that is created from retrieving related data from tables present in database. 

Both of them supports views but PostgreSQL offers advanced view options like creating materialized views. which improve database performance for complicated queries.

#### Data Types
MySQL is a purely relational database.
While PostgreSQL is an object-relational database which allows it to store data as objects with properties. Hence, enabling concepts like inheritance.

#### Indexes
Databases utilize indexes to enhance data retrieval speed. By configuring the database management system, frequently accessed data can be sorted and stored differently from other data.

MySQL offers support for B-tree and R-tree indexing, which organizes data hierarchically. On the other hand, PostgreSQL provides a range of index types, including trees, expression indexes, partial indexes, and hash indexes. These options allow you to optimize your database performance according to specific scaling requirements.

#### Concurrency control
Multiversion Concurrency Control (MVCC) is an advanced database technique that ensures safe parallel read and update operations on the same data. By creating duplicate copies of records, MVCC allows multiple users to access and modify data simultaneously without compromising data integrity. This feature enables efficient concurrency management in the database, enhancing overall performance and user experience.

MySQL does not offer MVCC whereas PostgreSQL supports this feature.

#### ACID compliance
Atomicity, Consistency, Isolation, and Durability (ACID) are fundamental database properties that guarantee the integrity and reliability of the data even in the face of unexpected errors. These properties ensure that database transactions are processed in a manner that maintains a valid state, regardless of any interruptions or failures that may occur during the process. For instance, if an update operation affects multiple rows but encounters a system failure midway, the ACID properties ensure that no row is left in an inconsistent or incomplete state, preserving the overall data integrity.

MySQL supports ACID compliance only for InnoDB and NDB Cluster storage engines or software modules. 
Whereas PostgreSQL is fully ACID compliant in all configurations.