Database structure and tables
TYPO3 distinguishes between internal and managed tables.
Table of contents
Internal tables
Used internally by TYPO3 and not accessible in the backend (e.g. tables such as
be_
,
sys_
, cache tables). They are accessed via TYPO3
APIs such as the caching framework. These tables are not
editable unless a specific backend module provides access.
Typical categories include:
- Cache tables: Created automatically when using a database-based cache backend
- Session tables:
fe_
,sessions be_
sessions -
System tables:
sys_
: Global configurationregistry sys_
: Viewable via System > Loglog
Managed tables
Defined in the TCA and, by default, editable in the
Web > List module. TYPO3 derives database schemas from the TCA
configuration. Required fields such as
uid
and
pid
are generated
automatically.
Required fields:
uid
: Primary key (auto-incremented)pid
: Page reference (from thepages
table)
Typical fields:
title
: Title displayed in backend listscrdate
: Creation timestamptstamp
: Last modification timestampsorting
: Manual sort orderdeleted
: Soft delete flaghidden
ordisabled
: Visibility control
These fields and their behavior are defined in the table properties (ctrl section of TCA).
When records are rendered in the backend using the
FormEngine, entries
with the soft delete flag set (
deleted
) will not be shown.
When querying tables via TypoScript, visibility fields such as
hidden
,
startdate
, and
enddate
are respected.
If you use the DBAL query builder to access the database, the restriction builder automatically filters records based on visibility fields unless explicitly disabled.
When using an Extbase repository, the query settings also apply visibility constraints by default, but can be reconfigured to change this behavior.
The
pages
table
Defines TYPO3's hierarchical page tree. All managed records reference a
pages.
via their
pid
.
- The root page has
pid = 0
and does not exist as a row in the table. - Only administrators can create records on the root level.
- Tables must explicitly allow root-level records using -.
Many-to-many (MM) relations
MM tables store relationships between records. Examples include:
sys_
: Categories and categorized recordscategory_ record_ mm sys_
: File usage in content and pagesfile_ reference
These tables may appear in the backend if configured via inline records.