MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry.
Find a file
Nikita Malyavin 1b95e201d9 MDEV-36274 Implement IDENTITY column
This patch implements basic IDENTITY feature, with the following
syntax:

<col> GENERATED {ALWAYS AS | BY DEFAULT [ON NULL]} identity_props

The following identity_props are recognized and saved in
the table metadata, but ignored
- START WITH num
- INCREMENT BY num
- MAXVALUE num
- MINVALUE num
- ORDER, NOORDER
- CYCLE, NOCYCLE
- NOMINVALUE, NO MINVALUE
- NOMAXVALUE, NO MAXVALUE

The following identity_props are newly added keywords, however they are
not reserved, i.e. can be used as identifiers, column names, etc. just
as before:
- KEEP
- SCALE
- SHARD
- EXTEND
- NOKEEP
- NOSCALE
- NOSHARD
- NOEXTEND

The patch is designed in minimalistic manner, re-using existing
AUTO_INCREMENT implementation, yet utilizing the default values
evaluation mechanism. As a result, it grants usage of CHECK constraints
and other table expressions: vcols, default values with identity column.

Some notes:
* IDENTITY is evaluated as Field's default_value. Even GENERATED ALWAYS
is considered "default", since the IDENTITY expression is not
determistic.

* However, the GENERATED ALWAYS kind cannot be assigned in DMLs in
STRICT SQL_MODE. That is, the behavior for users is like for other
GENERATED ALWAYS columns.

* It honors INSERT_ID and uses it, which is important for
statement-based replication to work.

* START WITH and INCREMENT BY are ignored. auto_increment_increment and
auto_increment_offset are being followed instead, exactly as for
AUTO_INCREMENT.

* Since IDENTITY behaves as DEFAULT, it cannot follow
NO_AUTO_VALUE_ON_ZERO and should accept user-set keyword with zeroes,
even when it is off, otherwise, `default` will not work.
See test "Zeroes and defaults handling".

* IDENTITY column is always replicated and saved in mariadb-dump, which
is guaranteed by using default_value instead of vcol_expr (vcols, even
stored, are usually not replicated).

* In frm, it is loaded and saved as a default expression. For that,
parse_vcol_expr definition was extended to support things like GENERATED
BY DEFAULT, and even GENERATED ALWAYS. That is, no EXTRA2 header had to
be added.

* AUTO_INCREMENT is not transformed into default_value and works
completely as before.

* IDENTITY should work without the key, and moreover should generate new
values without repetition. If no suitable key is created by user, one is
created implicitly.

* New IDENTITY keyword is added as not-reserved.

handler::update_auto_increment: extract a part checking for explicit
value and zeroes. Invoke only for AUTO_INCREMENT. The rest is contained
in handler::update_auto_increment_impl, which will be invoked by
IDENTITY. Add field argument to use instead of next_number_field.
Note that for IDENTITY, field is not always next_number_field
(Item_default_value can create its own field).
* show_create.cc: changes make it possible to output Field's
default_value as GENERATED BY DEFAULT, instead of DEFAULT (expr).
* Item_field::check_vcol_func_processor: allow default on IDENTITY
fields (they still have AUTO_INCREMENT properties, like unireg_check)
* Item_default_value::tie_field: forbid default(x) exprs.
Item_default_value distinguishes `default` and `default(x)` by the
vcol_assignment_ok flag.
* mysql_prepare_create_table_finalize: make sure there is at least
one key where IDENTITY field goes as a first key_part. If there's none -
create one.

Known issues:
* LAST_INSERT_ID() is not working for now.

Limitations:
* default(identity_column), is disabled, because persistent write is
not properly done in that case.
2025-06-30 14:23:58 +02:00
.github Add a sanity check for backups 2025-03-25 08:30:12 +11:00
BUILD Merge branch '10.6' into 10.11 2024-04-26 08:02:49 +02:00
client MDEV-34138: Implements the function MBRCoveredBy 2025-04-22 16:26:36 -04:00
cmake Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
dbug Reënable ATTRIBUTE_FORMAT on DBUG_PRINT & t/eprint 2025-02-12 10:17:44 +01:00
debian MDEV-31134: sync galera settings with KB doc 2025-04-22 14:50:54 +02:00
Docs Fixed some typos in optimizer_costs.txt 2023-03-28 18:41:09 +11:00
extra Fix typos in user-facing messages 2025-04-19 02:47:33 +04:00
include cleanup: further replace thd->alloc() with operator new 2025-06-02 19:34:03 +02:00
libmariadb@ba712ddf96 update C/C 2025-04-02 10:52:31 +11:00
libmysqld MDEV-20034 Add support for the pre-defined weak SYS_REFCURSOR 2025-04-19 10:59:58 +04:00
libservices Merge 10.6 into 10.11 2024-02-08 15:04:46 +02:00
man Fix typos in user-facing messages 2025-04-19 02:47:33 +04:00
mysql-test MDEV-36274 Implement IDENTITY column 2025-06-30 14:23:58 +02:00
mysys Merge branch '11.8' into main 2025-04-18 17:11:01 +02:00
mysys_ssl Merge branch '11.4' into 11.7 2025-02-06 16:46:36 +01:00
plugin cleanup: add new(thd) to Sql_alloc and Item 2025-06-02 19:34:03 +02:00
randgen/conf Group commit for maria engine. 2010-02-12 15:12:28 +02:00
scripts Fix typos in user-facing messages 2025-04-19 02:47:33 +04:00
sql MDEV-36274 Implement IDENTITY column 2025-06-30 14:23:58 +02:00
sql-bench Fix typos in user-facing messages 2025-04-19 02:47:33 +04:00
sql-common MDEV-31334: Consider dates ending in 'T' as malformed 2025-04-15 14:39:42 +03:00
storage Innodb: fix clang build 2025-06-02 19:34:03 +02:00
strings Merge branch '11.8' into main 2025-04-18 17:11:01 +02:00
support-files Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
tests Merge branch '11.8' into main 2025-04-18 17:11:01 +02:00
tpool Fix typos in C comments in miscellaneous files 2025-03-24 13:36:28 +11:00
unittest Fix typos in C comments in miscellaneous files 2025-03-24 13:36:28 +11:00
vio MDEV-14091 Support password protected SSL key in server. 2025-04-19 14:04:10 +03:00
win Fix typos in C comments in miscellaneous files 2025-03-24 13:36:28 +11:00
wsrep-lib@70cd967f5e galera: wsrep-lib submodule update 2024-12-17 09:53:19 +01:00
zlib Merge branch 'merge-zlib' (1.3.1) into 10.4 2024-04-26 13:50:03 +02:00
.clang-format Remove duplicate key "Language" from .clang-format 2024-04-17 16:52:37 +02:00
.gitattributes Merge branch '10.5' into 10.6 2022-02-03 17:01:31 +01:00
.gitignore MDEV-34979 generate SBOM from server builds 2025-01-15 14:37:43 +01:00
.gitlab-ci.yml All-green GitLab CI in main branch in January 2025 2025-01-29 10:56:08 +11:00
.gitmodules Merge remote-tracking branch '10.4' into 10.5 2023-03-31 21:32:41 +02:00
appveyor.yml appveyor - run builds in "main" branch 2025-01-24 13:15:05 +01:00
BUILD-CMAKE Minor spelling fixes in code comments, docs and output 2018-01-12 16:49:02 +02:00
CMakeLists.txt Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
CODING_STANDARDS.md Review fixes 2025-03-03 14:54:40 +02:00
config.h.cmake Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
configure.cmake Merge branch '11.6' into 11.7 2024-11-10 19:22:21 +01:00
CONTRIBUTING.md Add CODING_STANDARDS.md file 2023-02-03 15:47:17 +11:00
COPYING Update FSF Address 2019-05-11 21:29:06 +03:00
CREDITS Update sponsors 2024-08-12 09:32:30 +01:00
INSTALL-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
INSTALL-WIN-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
KNOWN_BUGS.txt Changed some MySQL names in messages to MariaDB 2018-12-09 20:49:05 +02:00
README.md Merge branch '10.11' into 11.1 2024-05-31 10:54:31 +10:00
SECURITY.md Create SECURITY.md 2023-06-05 08:28:06 +10:00
THIRDPARTY Update THIRDPARTY license file to reflect reality 2025-04-18 23:16:46 +02:00
VERSION bump the version 2025-04-18 17:11:09 +02:00

Code status:

  • Appveyor CI status ci.appveyor.com

MariaDB: The innovative open source database

MariaDB was designed as a drop-in replacement of MySQL(R) with more features, new storage engines, fewer bugs, and better performance.

MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. Please read the CREDITS file for details about the MariaDB Foundation, and who is developing MariaDB.

MariaDB is developed by many of the original developers of MySQL who now work for the MariaDB Corporation, the MariaDB Foundation and by many people in the community.

MySQL, which is the base of MariaDB, is a product and trademark of Oracle Corporation, Inc. For a list of developers and other contributors, see the Credits appendix. You can also run 'SHOW authors' to get a list of active contributors.

A description of the MariaDB project and a manual can be found at:

https://mariadb.org

https://mariadb.com/kb/en/

https://mariadb.com/kb/en/mariadb-vs-mysql-features/

https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/

https://mariadb.com/kb/en/new-and-old-releases/

Getting the code, building it and testing it

Refer to the following guide: https://mariadb.org/get-involved/getting-started-for-developers/get-code-build-test/ which outlines how to build the source code correctly and run the MariaDB testing framework, as well as which branch to target for your contributions.

Help

More help is available from the Maria Discuss mailing list https://lists.mariadb.org/postorius/lists/discuss.lists.mariadb.org/ and MariaDB's Zulip instance, https://mariadb.zulipchat.com/

Licensing


MariaDB is specifically available only under version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.) This is inherited from MySQL. Please see the README file in the MySQL distribution for more information.

License information can be found in the COPYING file. Third party license information can be found in the THIRDPARTY file.


Bug Reports

Bug and/or error reports regarding MariaDB should be submitted at: https://jira.mariadb.org

For reporting security vulnerabilities, see our security-policy.

The code for MariaDB, including all revision history, can be found at: https://github.com/MariaDB/server