mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-21 11:30:24 +00:00
Don't use TABLE STATUS, use CREATE TABLE instead for the table's engine.
This commit is contained in:
@@ -55,12 +55,10 @@ my $tbl_name = qr{
|
|||||||
# OptionParser - <OptionParser> object. All filters are gotten from this
|
# OptionParser - <OptionParser> object. All filters are gotten from this
|
||||||
# obj: --databases, --tables, etc.
|
# obj: --databases, --tables, etc.
|
||||||
# Quoter - <Quoter> object.
|
# Quoter - <Quoter> object.
|
||||||
|
# TableParser - <TableParser> object get tbl_struct.
|
||||||
#
|
#
|
||||||
# Optional Arguments:
|
# Optional Arguments:
|
||||||
# Schema - <Schema> object to initialize while iterating.
|
# Schema - <Schema> object to initialize while iterating.
|
||||||
# TableParser - <TableParser> object get tbl_struct.
|
|
||||||
# keep_ddl - Keep SHOW CREATE TABLE (default false).
|
|
||||||
# keep_tbl_status - Keep SHOW TABLE STATUS (default false).
|
|
||||||
# resume - Skip tables so first call to <next()> returns
|
# resume - Skip tables so first call to <next()> returns
|
||||||
# this "db.table".
|
# this "db.table".
|
||||||
#
|
#
|
||||||
@@ -68,7 +66,7 @@ my $tbl_name = qr{
|
|||||||
# SchemaIterator object
|
# SchemaIterator object
|
||||||
sub new {
|
sub new {
|
||||||
my ( $class, %args ) = @_;
|
my ( $class, %args ) = @_;
|
||||||
my @required_args = qw(OptionParser Quoter);
|
my @required_args = qw(OptionParser TableParser Quoter);
|
||||||
foreach my $arg ( @required_args ) {
|
foreach my $arg ( @required_args ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless $args{$arg};
|
||||||
}
|
}
|
||||||
@@ -88,15 +86,10 @@ sub new {
|
|||||||
$resume{tbl} = $tbl;
|
$resume{tbl} = $tbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $engine_key
|
|
||||||
= $dbh && ($dbh->{FetchHashKeyName} || '') eq 'NAME_lc' ? 'engine'
|
|
||||||
: 'Engine';
|
|
||||||
|
|
||||||
my $self = {
|
my $self = {
|
||||||
%args,
|
%args,
|
||||||
resume => \%resume,
|
resume => \%resume,
|
||||||
filters => _make_filters(%args),
|
filters => _make_filters(%args),
|
||||||
engine_key => $engine_key,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return bless $self, $class;
|
return bless $self, $class;
|
||||||
@@ -227,18 +220,11 @@ sub next {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( $schema_obj ) {
|
if ( $schema_obj ) {
|
||||||
if ( $schema_obj->{ddl} && $self->{TableParser} ) {
|
|
||||||
$schema_obj->{tbl_struct}
|
|
||||||
= $self->{TableParser}->parse($schema_obj->{ddl});
|
|
||||||
}
|
|
||||||
|
|
||||||
delete $schema_obj->{ddl} unless $self->{keep_ddl};
|
|
||||||
delete $schema_obj->{tbl_status} unless $self->{keep_tbl_status};
|
|
||||||
|
|
||||||
if ( my $schema = $self->{Schema} ) {
|
if ( my $schema = $self->{Schema} ) {
|
||||||
$schema->add_schema_object($schema_obj);
|
$schema->add_schema_object($schema_obj);
|
||||||
}
|
}
|
||||||
PTDEBUG && _d('Next schema object:', $schema_obj->{db}, $schema_obj->{tbl});
|
PTDEBUG && _d('Next schema object:',
|
||||||
|
$schema_obj->{db}, $schema_obj->{tbl});
|
||||||
}
|
}
|
||||||
|
|
||||||
return $schema_obj;
|
return $schema_obj;
|
||||||
@@ -300,14 +286,14 @@ sub _iterate_files {
|
|||||||
next CHUNK;
|
next CHUNK;
|
||||||
}
|
}
|
||||||
$ddl =~ s/ \*\/;\Z/;/; # remove end of version comment
|
$ddl =~ s/ \*\/;\Z/;/; # remove end of version comment
|
||||||
|
my $tbl_struct = $self->{TableParser}->parse($ddl);
|
||||||
my ($engine) = $ddl =~ m/\).*?(?:ENGINE|TYPE)=(\w+)/;
|
if ( $self->engine_is_allowed($tbl_struct->{engine}) ) {
|
||||||
|
|
||||||
if ( !$engine || $self->engine_is_allowed($engine) ) {
|
|
||||||
return {
|
return {
|
||||||
db => $self->{db},
|
db => $self->{db},
|
||||||
tbl => $tbl,
|
tbl => $tbl,
|
||||||
|
name => $self->{Quoter}->quote($self->{db}, $tbl),
|
||||||
ddl => $ddl,
|
ddl => $ddl,
|
||||||
|
tbl_struct => $tbl_struct,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -326,6 +312,7 @@ sub _iterate_files {
|
|||||||
sub _iterate_dbh {
|
sub _iterate_dbh {
|
||||||
my ( $self ) = @_;
|
my ( $self ) = @_;
|
||||||
my $q = $self->{Quoter};
|
my $q = $self->{Quoter};
|
||||||
|
my $tp = $self->{TableParser};
|
||||||
my $dbh = $self->{dbh};
|
my $dbh = $self->{dbh};
|
||||||
PTDEBUG && _d('Getting next schema object from dbh', $dbh);
|
PTDEBUG && _d('Getting next schema object from dbh', $dbh);
|
||||||
|
|
||||||
@@ -365,33 +352,15 @@ sub _iterate_dbh {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while ( my $tbl = shift @{$self->{tbls}} ) {
|
while ( my $tbl = shift @{$self->{tbls}} ) {
|
||||||
# If there are engine filters, we have to get the table status.
|
my $ddl = $tp->get_create_table($dbh, $self->{db}, $tbl);
|
||||||
# Else, get it if the user wants to keep it since they'll expect
|
my $tbl_struct = $tp->parse($ddl);
|
||||||
# it to be available.
|
if ( $self->engine_is_allowed($tbl_struct->{engine}) ) {
|
||||||
my $tbl_status;
|
|
||||||
if ( $self->{filters}->{'engines'}
|
|
||||||
|| $self->{filters}->{'ignore-engines'}
|
|
||||||
|| $self->{keep_tbl_status} )
|
|
||||||
{
|
|
||||||
my $sql = "SHOW TABLE STATUS FROM " . $q->quote($self->{db})
|
|
||||||
. " LIKE \'$tbl\'";
|
|
||||||
PTDEBUG && _d($sql);
|
|
||||||
$tbl_status = $dbh->selectrow_hashref($sql);
|
|
||||||
PTDEBUG && _d(Dumper($tbl_status));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !$tbl_status
|
|
||||||
|| $self->engine_is_allowed($tbl_status->{$self->{engine_key}}) ) {
|
|
||||||
my $ddl;
|
|
||||||
if ( my $tp = $self->{TableParser} ) {
|
|
||||||
$ddl = $tp->get_create_table($dbh, $self->{db}, $tbl);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
db => $self->{db},
|
db => $self->{db},
|
||||||
tbl => $tbl,
|
tbl => $tbl,
|
||||||
|
name => $q->quote($self->{db}, $tbl),
|
||||||
ddl => $ddl,
|
ddl => $ddl,
|
||||||
tbl_status => $tbl_status,
|
tbl_struct => $tbl_struct,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -507,7 +476,15 @@ sub table_is_allowed {
|
|||||||
|
|
||||||
sub engine_is_allowed {
|
sub engine_is_allowed {
|
||||||
my ( $self, $engine ) = @_;
|
my ( $self, $engine ) = @_;
|
||||||
die "I need an engine argument" unless $engine;
|
|
||||||
|
if ( !$engine ) {
|
||||||
|
# This normally doesn't happen, but it can if the user
|
||||||
|
# is iterating a file of their own table dumps, i.e. that
|
||||||
|
# weren't created by mysqldump, so there's no ENGINE=
|
||||||
|
# on the CREATE TABLE.
|
||||||
|
PTDEBUG && _d('No engine specified; allowing the table');
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
$engine = lc $engine;
|
$engine = lc $engine;
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@ BEGIN {
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings FATAL => 'all';
|
use warnings FATAL => 'all';
|
||||||
use English qw(-no_match_vars);
|
use English qw(-no_match_vars);
|
||||||
use Test::More tests => 31;
|
use Test::More tests => 29;
|
||||||
|
|
||||||
use SchemaIterator;
|
use SchemaIterator;
|
||||||
use FileIterator;
|
use FileIterator;
|
||||||
@@ -32,7 +32,7 @@ my $dp = new DSNParser(opts=>$dsn_opts);
|
|||||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||||
my $dbh = $sb->get_dbh_for('master');
|
my $dbh = $sb->get_dbh_for('master');
|
||||||
|
|
||||||
my $tp;
|
my $tp = new TableParser(Quoter => $q);
|
||||||
my $fi = new FileIterator();
|
my $fi = new FileIterator();
|
||||||
my $o = new OptionParser(description => 'SchemaIterator');
|
my $o = new OptionParser(description => 'SchemaIterator');
|
||||||
$o->get_specs("$trunk/bin/pt-table-checksum");
|
$o->get_specs("$trunk/bin/pt-table-checksum");
|
||||||
@@ -55,7 +55,6 @@ sub test_so {
|
|||||||
my $file_itr = $fi->get_file_itr(@{$args{files}});
|
my $file_itr = $fi->get_file_itr(@{$args{files}});
|
||||||
$si = new SchemaIterator(
|
$si = new SchemaIterator(
|
||||||
file_itr => $file_itr,
|
file_itr => $file_itr,
|
||||||
keep_ddl => defined $args{keep_ddl} ? $args{keep_ddl} : 1,
|
|
||||||
resume => $args{resume},
|
resume => $args{resume},
|
||||||
OptionParser => $o,
|
OptionParser => $o,
|
||||||
Quoter => $q,
|
Quoter => $q,
|
||||||
@@ -65,7 +64,6 @@ sub test_so {
|
|||||||
else {
|
else {
|
||||||
$si = new SchemaIterator(
|
$si = new SchemaIterator(
|
||||||
dbh => $dbh,
|
dbh => $dbh,
|
||||||
keep_ddl => defined $args{keep_ddl} ? $args{keep_ddl} : 1,
|
|
||||||
resume => $args{resume},
|
resume => $args{resume},
|
||||||
OptionParser => $o,
|
OptionParser => $o,
|
||||||
Quoter => $q,
|
Quoter => $q,
|
||||||
@@ -311,7 +309,6 @@ SKIP: {
|
|||||||
# ########################################################################
|
# ########################################################################
|
||||||
# Getting CREATE TALBE (ddl).
|
# Getting CREATE TALBE (ddl).
|
||||||
# ########################################################################
|
# ########################################################################
|
||||||
$tp = new TableParser(Quoter => $q);
|
|
||||||
test_so(
|
test_so(
|
||||||
filters => [qw(-t mysql.user)],
|
filters => [qw(-t mysql.user)],
|
||||||
result => $sandbox_version ge '5.1' ? "$out/mysql-user-ddl.txt"
|
result => $sandbox_version ge '5.1' ? "$out/mysql-user-ddl.txt"
|
||||||
@@ -319,9 +316,6 @@ SKIP: {
|
|||||||
test_name => "Get CREATE TABLE with dbh",
|
test_name => "Get CREATE TABLE with dbh",
|
||||||
);
|
);
|
||||||
|
|
||||||
# Kill the TableParser obj in case the next tests don't want to use it.
|
|
||||||
$tp = undef;
|
|
||||||
|
|
||||||
$sb->wipe_clean($dbh);
|
$sb->wipe_clean($dbh);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -368,51 +362,12 @@ my $objs = test_so(
|
|||||||
|
|
||||||
my $n_tbl_structs = grep { exists $_->{tbl_struct} } @$objs;
|
my $n_tbl_structs = grep { exists $_->{tbl_struct} } @$objs;
|
||||||
|
|
||||||
is(
|
|
||||||
$n_tbl_structs,
|
|
||||||
0,
|
|
||||||
'No tbl_struct without TableParser'
|
|
||||||
);
|
|
||||||
|
|
||||||
$tp = new TableParser(Quoter => $q);
|
|
||||||
|
|
||||||
$objs = test_so(
|
|
||||||
files => ["$in/dump001.txt"],
|
|
||||||
result => "", # hack to let return_objs work
|
|
||||||
test_name => "", # hack to let return_objs work
|
|
||||||
return_objs => 1,
|
|
||||||
);
|
|
||||||
|
|
||||||
$n_tbl_structs = grep { exists $_->{tbl_struct} } @$objs;
|
|
||||||
|
|
||||||
is(
|
is(
|
||||||
$n_tbl_structs,
|
$n_tbl_structs,
|
||||||
scalar @$objs,
|
scalar @$objs,
|
||||||
'Got tbl_struct for each schema object'
|
'Got tbl_struct for each schema object'
|
||||||
);
|
);
|
||||||
|
|
||||||
# Kill the TableParser obj in case the next tests don't want to use it.
|
|
||||||
$tp = undef;
|
|
||||||
|
|
||||||
# ############################################################################
|
|
||||||
# keep_ddl
|
|
||||||
# ############################################################################
|
|
||||||
$objs = test_so(
|
|
||||||
files => ["$in/dump001.txt"],
|
|
||||||
result => "", # hack to let return_objs work
|
|
||||||
test_name => "", # hack to let return_objs work
|
|
||||||
return_objs => 1,
|
|
||||||
keep_ddl => 0,
|
|
||||||
);
|
|
||||||
|
|
||||||
my $n_ddls = grep { exists $_->{ddl} } @$objs;
|
|
||||||
|
|
||||||
is(
|
|
||||||
$n_ddls,
|
|
||||||
0,
|
|
||||||
'DDL deleted unless keep_ddl'
|
|
||||||
);
|
|
||||||
|
|
||||||
# ############################################################################
|
# ############################################################################
|
||||||
# Resume
|
# Resume
|
||||||
# ############################################################################
|
# ############################################################################
|
||||||
|
@@ -1,37 +1,523 @@
|
|||||||
mysql.columns_priv
|
mysql.columns_priv
|
||||||
|
CREATE TABLE `columns_priv` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Column_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Column privileges'
|
||||||
|
|
||||||
mysql.db
|
mysql.db
|
||||||
|
CREATE TABLE `db` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
PRIMARY KEY (`Host`,`Db`,`User`),
|
||||||
|
KEY `User` (`User`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Database privileges'
|
||||||
|
|
||||||
mysql.event
|
mysql.event
|
||||||
|
CREATE TABLE `event` (
|
||||||
|
`db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`name` char(64) NOT NULL DEFAULT '',
|
||||||
|
`body` longblob NOT NULL,
|
||||||
|
`definer` char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`execute_at` datetime DEFAULT NULL,
|
||||||
|
`interval_value` int(11) DEFAULT NULL,
|
||||||
|
`interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
|
||||||
|
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`last_executed` datetime DEFAULT NULL,
|
||||||
|
`starts` datetime DEFAULT NULL,
|
||||||
|
`ends` datetime DEFAULT NULL,
|
||||||
|
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||||
|
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
|
||||||
|
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
|
||||||
|
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`originator` int(10) unsigned NOT NULL,
|
||||||
|
`time_zone` char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM',
|
||||||
|
`character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`db_collation` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`body_utf8` longblob,
|
||||||
|
PRIMARY KEY (`db`,`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Events'
|
||||||
|
|
||||||
mysql.func
|
mysql.func
|
||||||
|
CREATE TABLE `func` (
|
||||||
|
`name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`ret` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
`dl` char(128) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`type` enum('function','aggregate') CHARACTER SET utf8 NOT NULL,
|
||||||
|
PRIMARY KEY (`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='User defined functions'
|
||||||
|
|
||||||
mysql.help_category
|
mysql.help_category
|
||||||
|
CREATE TABLE `help_category` (
|
||||||
|
`help_category_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`name` char(64) NOT NULL,
|
||||||
|
`parent_category_id` smallint(5) unsigned DEFAULT NULL,
|
||||||
|
`url` char(128) NOT NULL,
|
||||||
|
PRIMARY KEY (`help_category_id`),
|
||||||
|
UNIQUE KEY `name` (`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='help categories'
|
||||||
|
|
||||||
mysql.help_keyword
|
mysql.help_keyword
|
||||||
|
CREATE TABLE `help_keyword` (
|
||||||
|
`help_keyword_id` int(10) unsigned NOT NULL,
|
||||||
|
`name` char(64) NOT NULL,
|
||||||
|
PRIMARY KEY (`help_keyword_id`),
|
||||||
|
UNIQUE KEY `name` (`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='help keywords'
|
||||||
|
|
||||||
mysql.help_relation
|
mysql.help_relation
|
||||||
|
CREATE TABLE `help_relation` (
|
||||||
|
`help_topic_id` int(10) unsigned NOT NULL,
|
||||||
|
`help_keyword_id` int(10) unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (`help_keyword_id`,`help_topic_id`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='keyword-topic relation'
|
||||||
|
|
||||||
mysql.help_topic
|
mysql.help_topic
|
||||||
|
CREATE TABLE `help_topic` (
|
||||||
|
`help_topic_id` int(10) unsigned NOT NULL,
|
||||||
|
`name` char(64) NOT NULL,
|
||||||
|
`help_category_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`description` text NOT NULL,
|
||||||
|
`example` text NOT NULL,
|
||||||
|
`url` char(128) NOT NULL,
|
||||||
|
PRIMARY KEY (`help_topic_id`),
|
||||||
|
UNIQUE KEY `name` (`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='help topics'
|
||||||
|
|
||||||
mysql.host
|
mysql.host
|
||||||
|
CREATE TABLE `host` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
PRIMARY KEY (`Host`,`Db`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Host privileges; Merged with database privileges'
|
||||||
|
|
||||||
mysql.ndb_binlog_index
|
mysql.ndb_binlog_index
|
||||||
|
CREATE TABLE `ndb_binlog_index` (
|
||||||
|
`Position` bigint(20) unsigned NOT NULL,
|
||||||
|
`File` varchar(255) NOT NULL,
|
||||||
|
`epoch` bigint(20) unsigned NOT NULL,
|
||||||
|
`inserts` bigint(20) unsigned NOT NULL,
|
||||||
|
`updates` bigint(20) unsigned NOT NULL,
|
||||||
|
`deletes` bigint(20) unsigned NOT NULL,
|
||||||
|
`schemaops` bigint(20) unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (`epoch`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
|
||||||
mysql.plugin
|
mysql.plugin
|
||||||
|
CREATE TABLE `plugin` (
|
||||||
|
`name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`dl` char(128) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='MySQL plugins'
|
||||||
|
|
||||||
mysql.proc
|
mysql.proc
|
||||||
|
CREATE TABLE `proc` (
|
||||||
|
`db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`name` char(64) NOT NULL DEFAULT '',
|
||||||
|
`type` enum('FUNCTION','PROCEDURE') NOT NULL,
|
||||||
|
`specific_name` char(64) NOT NULL DEFAULT '',
|
||||||
|
`language` enum('SQL') NOT NULL DEFAULT 'SQL',
|
||||||
|
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL DEFAULT 'CONTAINS_SQL',
|
||||||
|
`is_deterministic` enum('YES','NO') NOT NULL DEFAULT 'NO',
|
||||||
|
`security_type` enum('INVOKER','DEFINER') NOT NULL DEFAULT 'DEFINER',
|
||||||
|
`param_list` blob NOT NULL,
|
||||||
|
`returns` longblob NOT NULL,
|
||||||
|
`body` longblob NOT NULL,
|
||||||
|
`definer` char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
|
||||||
|
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`db_collation` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`body_utf8` longblob,
|
||||||
|
PRIMARY KEY (`db`,`name`,`type`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Stored Procedures'
|
||||||
|
|
||||||
mysql.procs_priv
|
mysql.procs_priv
|
||||||
|
CREATE TABLE `procs_priv` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Routine_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Routine_type` enum('FUNCTION','PROCEDURE') COLLATE utf8_bin NOT NULL,
|
||||||
|
`Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Proc_priv` set('Execute','Alter Routine','Grant') CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||||
|
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`Host`,`Db`,`User`,`Routine_name`,`Routine_type`),
|
||||||
|
KEY `Grantor` (`Grantor`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Procedure privileges'
|
||||||
|
|
||||||
mysql.servers
|
mysql.servers
|
||||||
|
CREATE TABLE `servers` (
|
||||||
|
`Server_name` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Host` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Db` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Username` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Password` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Port` int(4) NOT NULL DEFAULT '0',
|
||||||
|
`Socket` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Wrapper` char(64) NOT NULL DEFAULT '',
|
||||||
|
`Owner` char(64) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`Server_name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table'
|
||||||
|
|
||||||
mysql.tables_priv
|
mysql.tables_priv
|
||||||
|
CREATE TABLE `tables_priv` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||||
|
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
|
||||||
|
KEY `Grantor` (`Grantor`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Table privileges'
|
||||||
|
|
||||||
mysql.time_zone
|
mysql.time_zone
|
||||||
|
CREATE TABLE `time_zone` (
|
||||||
|
`Time_zone_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`Use_leap_seconds` enum('Y','N') NOT NULL DEFAULT 'N',
|
||||||
|
PRIMARY KEY (`Time_zone_id`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Time zones'
|
||||||
|
|
||||||
mysql.time_zone_leap_second
|
mysql.time_zone_leap_second
|
||||||
|
CREATE TABLE `time_zone_leap_second` (
|
||||||
|
`Transition_time` bigint(20) NOT NULL,
|
||||||
|
`Correction` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`Transition_time`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Leap seconds information for time zones'
|
||||||
|
|
||||||
mysql.time_zone_name
|
mysql.time_zone_name
|
||||||
|
CREATE TABLE `time_zone_name` (
|
||||||
|
`Name` char(64) NOT NULL,
|
||||||
|
`Time_zone_id` int(10) unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (`Name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Time zone names'
|
||||||
|
|
||||||
mysql.time_zone_transition
|
mysql.time_zone_transition
|
||||||
|
CREATE TABLE `time_zone_transition` (
|
||||||
|
`Time_zone_id` int(10) unsigned NOT NULL,
|
||||||
|
`Transition_time` bigint(20) NOT NULL,
|
||||||
|
`Transition_type_id` int(10) unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (`Time_zone_id`,`Transition_time`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Time zone transitions'
|
||||||
|
|
||||||
mysql.time_zone_transition_type
|
mysql.time_zone_transition_type
|
||||||
|
CREATE TABLE `time_zone_transition_type` (
|
||||||
|
`Time_zone_id` int(10) unsigned NOT NULL,
|
||||||
|
`Transition_type_id` int(10) unsigned NOT NULL,
|
||||||
|
`Offset` int(11) NOT NULL DEFAULT '0',
|
||||||
|
`Is_DST` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`Abbreviation` char(8) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`Time_zone_id`,`Transition_type_id`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Time zone transition types'
|
||||||
|
|
||||||
mysql.user
|
mysql.user
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
|
||||||
|
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||||
|
`ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||||
|
`ssl_cipher` blob NOT NULL,
|
||||||
|
`x509_issuer` blob NOT NULL,
|
||||||
|
`x509_subject` blob NOT NULL,
|
||||||
|
`max_questions` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`max_updates` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`max_connections` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`Host`,`User`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
|
||||||
|
|
||||||
sakila.actor
|
sakila.actor
|
||||||
|
CREATE TABLE `actor` (
|
||||||
|
`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`first_name` varchar(45) NOT NULL,
|
||||||
|
`last_name` varchar(45) NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`actor_id`),
|
||||||
|
KEY `idx_actor_last_name` (`last_name`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.address
|
sakila.address
|
||||||
|
CREATE TABLE `address` (
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`address` varchar(50) NOT NULL,
|
||||||
|
`address2` varchar(50) DEFAULT NULL,
|
||||||
|
`district` varchar(20) NOT NULL,
|
||||||
|
`city_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`postal_code` varchar(10) DEFAULT NULL,
|
||||||
|
`phone` varchar(20) NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`address_id`),
|
||||||
|
KEY `idx_fk_city_id` (`city_id`),
|
||||||
|
CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.category
|
sakila.category
|
||||||
|
CREATE TABLE `category` (
|
||||||
|
`category_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(25) NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`category_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.city
|
sakila.city
|
||||||
|
CREATE TABLE `city` (
|
||||||
|
`city_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`city` varchar(50) NOT NULL,
|
||||||
|
`country_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`city_id`),
|
||||||
|
KEY `idx_fk_country_id` (`country_id`),
|
||||||
|
CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=601 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.country
|
sakila.country
|
||||||
|
CREATE TABLE `country` (
|
||||||
|
`country_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`country` varchar(50) NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`country_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.customer
|
sakila.customer
|
||||||
|
CREATE TABLE `customer` (
|
||||||
|
`customer_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`first_name` varchar(45) NOT NULL,
|
||||||
|
`last_name` varchar(45) NOT NULL,
|
||||||
|
`email` varchar(50) DEFAULT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`active` tinyint(1) NOT NULL DEFAULT '1',
|
||||||
|
`create_date` datetime NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`customer_id`),
|
||||||
|
KEY `idx_fk_store_id` (`store_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
KEY `idx_last_name` (`last_name`),
|
||||||
|
CONSTRAINT `fk_customer_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_customer_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=600 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.film
|
sakila.film
|
||||||
|
CREATE TABLE `film` (
|
||||||
|
`film_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(255) NOT NULL,
|
||||||
|
`description` text,
|
||||||
|
`release_year` year(4) DEFAULT NULL,
|
||||||
|
`language_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`original_language_id` tinyint(3) unsigned DEFAULT NULL,
|
||||||
|
`rental_duration` tinyint(3) unsigned NOT NULL DEFAULT '3',
|
||||||
|
`rental_rate` decimal(4,2) NOT NULL DEFAULT '4.99',
|
||||||
|
`length` smallint(5) unsigned DEFAULT NULL,
|
||||||
|
`replacement_cost` decimal(5,2) NOT NULL DEFAULT '19.99',
|
||||||
|
`rating` enum('G','PG','PG-13','R','NC-17') DEFAULT 'G',
|
||||||
|
`special_features` set('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') DEFAULT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`film_id`),
|
||||||
|
KEY `idx_title` (`title`),
|
||||||
|
KEY `idx_fk_language_id` (`language_id`),
|
||||||
|
KEY `idx_fk_original_language_id` (`original_language_id`),
|
||||||
|
CONSTRAINT `fk_film_language` FOREIGN KEY (`language_id`) REFERENCES `language` (`language_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_film_language_original` FOREIGN KEY (`original_language_id`) REFERENCES `language` (`language_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.film_actor
|
sakila.film_actor
|
||||||
|
CREATE TABLE `film_actor` (
|
||||||
|
`actor_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`film_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`actor_id`,`film_id`),
|
||||||
|
KEY `idx_fk_film_id` (`film_id`),
|
||||||
|
CONSTRAINT `fk_film_actor_actor` FOREIGN KEY (`actor_id`) REFERENCES `actor` (`actor_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_film_actor_film` FOREIGN KEY (`film_id`) REFERENCES `film` (`film_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.film_category
|
sakila.film_category
|
||||||
|
CREATE TABLE `film_category` (
|
||||||
|
`film_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`category_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`film_id`,`category_id`),
|
||||||
|
KEY `fk_film_category_category` (`category_id`),
|
||||||
|
CONSTRAINT `fk_film_category_film` FOREIGN KEY (`film_id`) REFERENCES `film` (`film_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_film_category_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.film_text
|
sakila.film_text
|
||||||
|
CREATE TABLE `film_text` (
|
||||||
|
`film_id` smallint(6) NOT NULL,
|
||||||
|
`title` varchar(255) NOT NULL,
|
||||||
|
`description` text,
|
||||||
|
PRIMARY KEY (`film_id`),
|
||||||
|
FULLTEXT KEY `idx_title_description` (`title`,`description`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.inventory
|
sakila.inventory
|
||||||
|
CREATE TABLE `inventory` (
|
||||||
|
`inventory_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`film_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`inventory_id`),
|
||||||
|
KEY `idx_fk_film_id` (`film_id`),
|
||||||
|
KEY `idx_store_id_film_id` (`store_id`,`film_id`),
|
||||||
|
CONSTRAINT `fk_inventory_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_inventory_film` FOREIGN KEY (`film_id`) REFERENCES `film` (`film_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=4582 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.language
|
sakila.language
|
||||||
|
CREATE TABLE `language` (
|
||||||
|
`language_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` char(20) NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`language_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.payment
|
sakila.payment
|
||||||
|
CREATE TABLE `payment` (
|
||||||
|
`payment_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`customer_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`rental_id` int(11) DEFAULT NULL,
|
||||||
|
`amount` decimal(5,2) NOT NULL,
|
||||||
|
`payment_date` datetime NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`payment_id`),
|
||||||
|
KEY `idx_fk_staff_id` (`staff_id`),
|
||||||
|
KEY `idx_fk_customer_id` (`customer_id`),
|
||||||
|
KEY `fk_payment_rental` (`rental_id`),
|
||||||
|
CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_payment_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_payment_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.rental
|
sakila.rental
|
||||||
|
CREATE TABLE `rental` (
|
||||||
|
`rental_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`rental_date` datetime NOT NULL,
|
||||||
|
`inventory_id` mediumint(8) unsigned NOT NULL,
|
||||||
|
`customer_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`return_date` datetime DEFAULT NULL,
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`rental_id`),
|
||||||
|
UNIQUE KEY `rental_date` (`rental_date`,`inventory_id`,`customer_id`),
|
||||||
|
KEY `idx_fk_inventory_id` (`inventory_id`),
|
||||||
|
KEY `idx_fk_customer_id` (`customer_id`),
|
||||||
|
KEY `idx_fk_staff_id` (`staff_id`),
|
||||||
|
CONSTRAINT `fk_rental_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rental_inventory` FOREIGN KEY (`inventory_id`) REFERENCES `inventory` (`inventory_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rental_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.staff
|
sakila.staff
|
||||||
|
CREATE TABLE `staff` (
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`first_name` varchar(45) NOT NULL,
|
||||||
|
`last_name` varchar(45) NOT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`picture` blob,
|
||||||
|
`email` varchar(50) DEFAULT NULL,
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`active` tinyint(1) NOT NULL DEFAULT '1',
|
||||||
|
`username` varchar(16) NOT NULL,
|
||||||
|
`password` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`staff_id`),
|
||||||
|
KEY `idx_fk_store_id` (`store_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
CONSTRAINT `fk_staff_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_staff_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.store
|
sakila.store
|
||||||
|
CREATE TABLE `store` (
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`manager_staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`store_id`),
|
||||||
|
UNIQUE KEY `idx_unique_manager` (`manager_staff_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
CONSTRAINT `fk_store_staff` FOREIGN KEY (`manager_staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_store_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
|
@@ -1,3 +1,52 @@
|
|||||||
sakila.rental
|
sakila.rental
|
||||||
|
CREATE TABLE `rental` (
|
||||||
|
`rental_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`rental_date` datetime NOT NULL,
|
||||||
|
`inventory_id` mediumint(8) unsigned NOT NULL,
|
||||||
|
`customer_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`return_date` datetime DEFAULT NULL,
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`rental_id`),
|
||||||
|
UNIQUE KEY `rental_date` (`rental_date`,`inventory_id`,`customer_id`),
|
||||||
|
KEY `idx_fk_inventory_id` (`inventory_id`),
|
||||||
|
KEY `idx_fk_customer_id` (`customer_id`),
|
||||||
|
KEY `idx_fk_staff_id` (`staff_id`),
|
||||||
|
CONSTRAINT `fk_rental_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rental_inventory` FOREIGN KEY (`inventory_id`) REFERENCES `inventory` (`inventory_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rental_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.staff
|
sakila.staff
|
||||||
|
CREATE TABLE `staff` (
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`first_name` varchar(45) NOT NULL,
|
||||||
|
`last_name` varchar(45) NOT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`picture` blob,
|
||||||
|
`email` varchar(50) DEFAULT NULL,
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`active` tinyint(1) NOT NULL DEFAULT '1',
|
||||||
|
`username` varchar(16) NOT NULL,
|
||||||
|
`password` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`staff_id`),
|
||||||
|
KEY `idx_fk_store_id` (`store_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
CONSTRAINT `fk_staff_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_staff_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.store
|
sakila.store
|
||||||
|
CREATE TABLE `store` (
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`manager_staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`store_id`),
|
||||||
|
UNIQUE KEY `idx_unique_manager` (`manager_staff_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
CONSTRAINT `fk_store_staff` FOREIGN KEY (`manager_staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_store_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
|
@@ -1,4 +1,70 @@
|
|||||||
sakila.payment
|
sakila.payment
|
||||||
|
CREATE TABLE `payment` (
|
||||||
|
`payment_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`customer_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`rental_id` int(11) DEFAULT NULL,
|
||||||
|
`amount` decimal(5,2) NOT NULL,
|
||||||
|
`payment_date` datetime NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`payment_id`),
|
||||||
|
KEY `idx_fk_staff_id` (`staff_id`),
|
||||||
|
KEY `idx_fk_customer_id` (`customer_id`),
|
||||||
|
KEY `fk_payment_rental` (`rental_id`),
|
||||||
|
CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_payment_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_payment_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.rental
|
sakila.rental
|
||||||
|
CREATE TABLE `rental` (
|
||||||
|
`rental_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`rental_date` datetime NOT NULL,
|
||||||
|
`inventory_id` mediumint(8) unsigned NOT NULL,
|
||||||
|
`customer_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`return_date` datetime DEFAULT NULL,
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`rental_id`),
|
||||||
|
UNIQUE KEY `rental_date` (`rental_date`,`inventory_id`,`customer_id`),
|
||||||
|
KEY `idx_fk_inventory_id` (`inventory_id`),
|
||||||
|
KEY `idx_fk_customer_id` (`customer_id`),
|
||||||
|
KEY `idx_fk_staff_id` (`staff_id`),
|
||||||
|
CONSTRAINT `fk_rental_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rental_inventory` FOREIGN KEY (`inventory_id`) REFERENCES `inventory` (`inventory_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rental_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.staff
|
sakila.staff
|
||||||
|
CREATE TABLE `staff` (
|
||||||
|
`staff_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`first_name` varchar(45) NOT NULL,
|
||||||
|
`last_name` varchar(45) NOT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`picture` blob,
|
||||||
|
`email` varchar(50) DEFAULT NULL,
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`active` tinyint(1) NOT NULL DEFAULT '1',
|
||||||
|
`username` varchar(16) NOT NULL,
|
||||||
|
`password` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`staff_id`),
|
||||||
|
KEY `idx_fk_store_id` (`store_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
CONSTRAINT `fk_staff_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_staff_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
sakila.store
|
sakila.store
|
||||||
|
CREATE TABLE `store` (
|
||||||
|
`store_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`manager_staff_id` tinyint(3) unsigned NOT NULL,
|
||||||
|
`address_id` smallint(5) unsigned NOT NULL,
|
||||||
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`store_id`),
|
||||||
|
UNIQUE KEY `idx_unique_manager` (`manager_staff_id`),
|
||||||
|
KEY `idx_fk_address_id` (`address_id`),
|
||||||
|
CONSTRAINT `fk_store_staff` FOREIGN KEY (`manager_staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_store_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user