text:
The sun was peaking through the clouds this morning as the racers made their way to the beach to prepare for today's course races.
Race director, Van Tol announced at the 10:00 am rider's meeting that he and his crew set an even longer course than yesterdays. The riders had to race in the form of a zigzag, making this a very artistic, and stylish course. It was an amazing view to see all the colorful kites from the helicopter that hovered above the course this afternoon.
The wind was still pretty light as the first race of the day began, but the riders prepared themselves for the lighter wind conditions as they pumped their 12-14m kites. Cumulonimbus clouds started to cluster as the racers made their way through the first cycle of the first race. It is very unusual and nearly unheard of having rain during this time of year in beautiful, warm and sunny Paros. Sometimes you just can't predict the weather. Weather facts state that monthly rain precipitation averages for the month of September here in Paros, Greece are between 0.01 and 0.00 cm, making today's forecast surely uncommon. If we only could have caught the culprit who must have been doing some sort of rain dance on the beach last night…
Bruno Sroka (FRA, Cabrinha) finished yet again in the number one position followed by fellow French native Julien Kerneur (Takoon). Kerneur is a rider that Sroka must keep an eye out for as he keeps creeping his way up the ranking list, finishing in the second position in the past three consecutive races. German rider Dirk Hanel (North) finishes third in today's race.
It was an exciting day for Greek rider, Felicia Constandopoulou (BEST) who took the number one spot today on the women's ranking list. German competitor and women's leader Kristin Boese (Best), was disqualified due to a failure to execute the proper course direction. The remaining women competitors were unable to finish the race due to the extremely poor weather conditions.
Competitors, locals and all the event crew squeezed into little corners of the beach café as the rain fell explosively from the sky. The wind and rain did not want to cooperate for today's planned events and was finally called to a halt at 3:00 pm.
Tomorrow's rider's meeting is scheduled for 10:00 am with the first possible start at 10:30 am.
Paros PKRA World Cup 2009 is sponsored in part by Greek Tourism. Visit there website www.visitgreece.gr for more information.


text:
Retail • Education • Corporate • Government • Library • International
Our books and software products can be purchased at your favorite local bookstore or online bookseller, electronics stores and computer stores anywhere computer technology books are sold. They can also be purchased here at PearsonITCertification.com.
To locate a bookstore near you, please visit the American Booksellers Association website.
Pearson IT Certification is a division of Pearson Education. Schools are encouraged to order through their Pearson representative. Online orders do include a sales tax charge.
To place an Academic order or to reach customer service, please call (800) 922-0579 (toll free).
Teachers in high schools and vocational/technical schools may reach a sales representative by calling (866) 326-4259.
Teachers in two-year colleges, community colleges, and four-year universities may contact your current sales and service representative. To locate your representative, use our online rep locator.
Instructor Review Copy Request Procedure
Please follow these directions to submit your requests via this website.
- Go to the Store section of this site to locate your title of interest.
- Click on "Instructor" where it mentions review copy requests in the right column.
- Follow the prompts to request your book via the Pearson Higher Education site.
Your representative will be automatically notified to follow up and provide you with a sample.
Businesses and corporations can purchase our titles for internal use, resale, or marketing purposes. For information on buying in bulk quantities or for special sales questions, please contact our corporate sales department at email@example.com or call 800-382-3419.
Government employees may order online at www.pearsongovernmentsales.com. The Pearson GSA Bookstore offers GSA pricing and free ground shipping. There is no tax on orders.
For information on our latest releases or to view Pearson's complete inventory of titles, please visit our Library Store at http://store.pearsoned.com/libraryresources. You may order directly from the store using a credit card. There are several other options for adding Pearson titles to your collection:
- Online on OASIS at http://oasis.pearson.com
- Phone toll-free 1-800-922-0579

subset: commoncrawl


text:
Dumb ? for chocolate users, but I need some input, Please.
Is there a way I can change the taste of coating to taste more like chocolate? Thank You
updated by @darlene: 04/10/15 08:38:00AM
Hi yes, there is a way... just stop buying it
Unfortunately is impossible to make a lobster out of a shrimp... as Lynn said stick to the real deal.
There is no real fundamental reason why a dark compound coating should not have a strong chocolate flavor.
Coating is usually used for a technical reason (the higher melt point) or because of price considerations (it's cheaper) or both.
From one of your other questions I am going to infer that the higher melt point of compound is a main reason you're using it.
If you're using a dark coating then the simple answer is to buy a better coating. There are some that are very difficult to tell apart from bulk chocolates.
If you're using white or colored compound the answer is to add very small amounts of a very good chocolate essential oil flavoring. If you do that it's very important to make sure the coating is at a high enough temperature (100F at least) and do a very good job of incorporating the flavoring oil. If you don't it can leave streaks and deliver uneven flavor.
You can also use the chocolate flavoring oil in the dark compound if you are having trouble locating a better tasting dark compound.
However, Lynn and Antonino are essentially correct: the chocolate flavor will probably not be as "good" as if you used real chocolate because the oil is likely to be one-noted. However, the chocolate flavor will be more intense.
Not all of us live in places or cater to markets that can afford to use expensive or real chocolate. While there is no way to turn a shrimp into lobster, we can work as hard as we can to make the shrimp the best it can possibly be.
Thank you so very much for helping me ... I was down hearted by the first two answers---because I "have a dream" one not from my flesh, but a real dream! I have to start with what I can afford..I will not let the dream die! Your answer gives me hope...I am very gateful that you took the time to explain in detail. Now I can gofrom your advise. I have Barry Callebaut and am working with it but I do not have the materials to melt it correctly.
Thank You for the encouragement.
HI Darlene,
the compound i'm working about, is supposed to be (on paper) as good as cocoa butter chocolate. do i believe is that good? not really. Is my intention to expose underprivileged to a better/healthier chocolate (less sugar, organic beans.organic milk powder etc) YES.
I will keep posted on it. i have a huge challenge in front of me, but don't we all have one?
Take a look at the company Grand-Place. In another forum one of their people mentioned that they had developed a compound that is very difficult to tell from regular chocolate. As the company also operates out of Vietnam (they are headquartered in Belgium) cost and temperature concerns are important to them.


text:
Brickshelf user AtomicBuilder certainly has a place for his Vikings when they die:
The rainbow just kinda drew me in, then bam! I nice looking hall (I assume it's Valhalla?). The farm is great, too, and the water with Jormungand is nicely done.
The rest of his gallery is pretty cool, too!


text:
Instead of a silent drive motor that focuses the lens with barely a whisper, this faux Nikkor AF-S 55-200mm lens packs a speaker cone and the requisite electronics to play your music. It's also officially bumped the Nikon 1 off the top of my Christmas wishlist.
Like the Nikon and Canon mugs and thermoses that came before it, this lens was purpose built to serve as a speaker, instead of being retrofitted as an afterthought. The functioning buttons serve as playback controls since the speaker is able to natively play audio files from a microSD card, and I'm hoping the large zoom ring is turned to adjust the volume. You can also attach an included breakout cable to connect the speaker to a headphone jack, or to a USB port for power and charging its battery. It's not known if these speakers were produced by Nikon as a promotional item, or by another company as a knockoff. But they're hard to come by, mostly popping up on eBay from international sellers for around $US20. [eBay via Nikon Rumors]


text:
Now, in his most controversial book, John Dominic Crossan shows that this traditional understanding of the Gospels as historical fact is not only wrong but dangerous. Drawing on the best of biblical, anthropological, sociological and historical research, he demonstrates definitively that it was the Roman government that tried and executed Jesus as a social agitator. Crossan also candidly addresses such key theological questions as "Did Jesus die for our sins?" and "Is our faith in vain if there was no bodily resurrection?"
Ultimately, however, Crossan's radical reexamination shows that the belief that the Jews killed Jesus is an early Christian myth (directed against rival Jewish groups) that must be eradicated from authentic Christian faith....Continua


text:
- 184.108.40.206 Files Created by CREATE TABLE
- 184.108.40.206 CREATE TEMPORARY TABLE Statement
- 220.127.116.11 CREATE TABLE ... LIKE Statement
- 184.108.40.206 CREATE TABLE ... SELECT Statement
- 22.214.171.124 FOREIGN KEY Constraints
- 220.127.116.11 CHECK Constraints
- 188.8.131.52 Silent Column Specification Changes
- 126.96.36.199 CREATE TABLE and Generated Columns
- 22.214.171.124 Secondary Indexes and Generated Columns
- 18.104.22.168 Setting NDB_TABLE Options
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[AS] query_expression
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
col_name column_definition
| {INDEX|KEY} [index_name] [index_type] (key_part,...)
[index_option] ...
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name,...)
| check_constraint_definition
data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]
[COMMENT 'string']
[COLLATE collation_name]
| data_type
[COLLATE collation_name]
[GENERATED ALWAYS] AS (expr)
[COMMENT 'string']
(see Chapter 11, Data Types)
key_part: {col_name [(length)] | (expr)} [ASC | DESC]
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
REFERENCES tbl_name (key_part,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
table_option [[,] table_option] ...
AUTO_INCREMENT [=] value
| AVG_ROW_LENGTH [=] value
| [DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
| COMMENT [=] 'string'
| CONNECTION [=] 'connect_string'
| {DATA|INDEX} DIRECTORY [=] 'absolute path to directory'
| ENGINE [=] engine_name
| KEY_BLOCK_SIZE [=] value
| MAX_ROWS [=] value
| MIN_ROWS [=] value
| PASSWORD [=] 'string'
| STATS_SAMPLE_PAGES [=] value
| TABLESPACE tablespace_name [STORAGE {DISK|MEMORY}]
| UNION [=] (tbl_name[,tbl_name]...)
{ [LINEAR] HASH(expr)
| [LINEAR] KEY [ALGORITHM={1|2}] (column_list)
| RANGE{(expr) | COLUMNS(column_list)}
| LIST{(expr) | COLUMNS(column_list)} }
[PARTITIONS num]
{ [LINEAR] HASH(expr)
| [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }
[SUBPARTITIONS num]
[(partition_definition [, partition_definition] ...)]
PARTITION partition_name
{LESS THAN {(expr | value_list) | MAXVALUE}
IN (value_list)}]
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'string' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
[(subpartition_definition [, subpartition_definition] ...)]
SUBPARTITION logical_name
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'string' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
SELECT ... (Some valid select or union statement)
CREATE TABLE creates a table with
the given name. You must have the
CREATE privilege for the table.
By default, tables are created in the default database, using the
InnoDB storage engine. An error
occurs if the table exists, if there is no default database, or if
the database does not exist.
MySQL has no limit on the number of tables. The underlying file
system may have a limit on the number of files that represent
tables. Individual storage engines may impose engine-specific
InnoDB permits up to 4 billion
For information about the physical representation of a table, see Section 184.108.40.206, "Files Created by CREATE TABLE".
There are several aspects to the
TABLE statement, described under the following topics in
this section:
Table Name
The table name can be specified as
db_name.tbl_nameto create the table in a specific database. This works regardless of whether there is a default database, assuming that the database exists. If you use quoted identifiers, quote the database and table names separately. For example, write
`mydb`.`mytbl`, not
Rules for permissible table names are given in Section 9.2, "Schema Object Names".
Prevents an error from occurring if the table exists. However, there is no verification that the existing table has a structure identical to that indicated by the
CREATE TABLEstatement.
Temporary Tables
You can use the
TEMPORARY keyword when creating
a table. A
TEMPORARY table is visible only
within the current session, and is dropped automatically when the
session is closed. For more information, see
Section 126.96.36.199, "CREATE TEMPORARY TABLE Statement".
Table Cloning and Copying
CREATE TABLE ... LIKEto create an empty table based on the definition of another table, including any column attributes and indexes defined in the original table:
CREATE TABLE new_tbl LIKE orig_tbl;
For more information, see Section 22.214.171.124, "CREATE TABLE ... LIKE Statement".
To create one table from another, add a
SELECTstatement at the end of the
CREATE TABLEstatement:
CREATE TABLE new_tbl AS SELECT * FROM orig_tbl;
For more information, see Section 126.96.36.199, "CREATE TABLE ... SELECT Statement".
REPLACEoptions indicate how to handle rows that duplicate unique key values when copying a table using a
For more information, see Section 22.214.171.124, "CREATE TABLE ... SELECT Statement".
Column Data Types and Attributes
There is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table and depends on the factors discussed in Section 8.4.7, "Limits on Table Column Count and Row Size".
data_typerepresents the data type in a column definition. For a full description of the syntax available for specifying column data types, as well as information about the properties of each type, see Chapter 11, Data Types.
Some attributes do not apply to all data types.
AUTO_INCREMENTapplies only to integer and floating-point types. Prior to MySQL 8.0.13,
DEFAULTdoes not apply to the
GEOMETRY, and
Character data types (
VARCHAR, the
SET, and any synonyms) can include
CHARACTER SETto specify the character set for the column.
CHARSETis a synonym for
CHARACTER SET. A collation for the character set can be specified with the
COLLATEattribute, along with any other attributes. For details, see Chapter 10, Character Sets, Collations, Unicode. Example:
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
MySQL 8.0 interprets length specifications in character column definitions in characters. Lengths for
VARBINARYare in bytes.
BINARY, and
VARBINARYcolumns, indexes can be created that use only the leading part of column values, using
syntax to specify an index prefix length.
TEXTcolumns also can be indexed, but a prefix length must be given. Prefix lengths are given in characters for nonbinary string types and in bytes for binary string types. That is, index entries consist of the first
lengthcharacters of each column value for
VARCHAR, and
TEXTcolumns, and the first
lengthbytes of each column value for
VARBINARY, and
BLOBcolumns. Indexing only a prefix of column values like this can make the index file much smaller. For additional information about index prefixes, see Section 13.1.15, "CREATE INDEX Statement".
Only the
MyISAMstorage engines support indexing on
TEXTcolumns. For example:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
If a specified index prefix exceeds the maximum column data type size,
CREATE TABLEhandles the index as follows:
For a nonunique index, either an error occurs (if strict SQL mode is enabled), or the index length is reduced to lie within the maximum column data type size and a warning is produced (if strict SQL mode is not enabled).
For a unique index, an error occurs regardless of SQL mode because reducing the index length might enable insertion of nonunique entries that do not meet the specified uniqueness requirement.
JSONcolumns cannot be indexed. You can work around this restriction by creating an index on a generated column that extracts a scalar value from the
JSONcolumn. See Indexing a Generated Column to Provide a JSON Column Index, for a detailed example.
If neither
NOT NULLis specified, the column is treated as though
NULLhad been specified.
In MySQL 8.0, only the
MyISAM, and
MEMORYstorage engines support indexes on columns that can have
NULLvalues. In other cases, you must declare indexed columns as
NOT NULLor an error results.
Specifies a default value for a column. For more information about default value handling, including the case that a column definition includes no explicit
DEFAULTvalue, see Section 11.6, "Data Type Default Values".
If the
NO_ZERO_IN_DATESQL mode is enabled and a date-valued default is not correct according to that mode,
CREATE TABLEproduces a warning if strict SQL mode is not enabled and an error if strict mode is enabled. For example, with
c1 DATE DEFAULT '2010-00-00'produces a warning.
An integer or floating-point column can have the additional attribute
AUTO_INCREMENT. When you insert a value of
NULL(recommended) or
0into an indexed
AUTO_INCREMENTcolumn, the column is set to the next sequence value. Typically this is
, where
valueis the largest value for the column currently in the table.
AUTO_INCREMENTsequences begin with
To retrieve an
AUTO_INCREMENTvalue after inserting a row, use the
LAST_INSERT_ID()SQL function or the
mysql_insert_id()C API function. See Section 12.15, "Information Functions", and Section 188.8.131.52, "mysql_insert_id()".
If the
NO_AUTO_VALUE_ON_ZEROSQL mode is enabled, you can store
AUTO_INCREMENTcolumns as
0without generating a new sequence value. See Section 5.1.11, "Server SQL Modes".
There can be only one
AUTO_INCREMENTcolumn per table, it must be indexed, and it cannot have a
DEFAULTvalue. An
AUTO_INCREMENTcolumn works properly only if it contains only positive values. Inserting a negative number is regarded as inserting a very large positive number. This is done to avoid precision problems when numbers "wrap" over from positive to negative and also to ensure that you do not accidentally get an
AUTO_INCREMENTcolumn that contains
MyISAMtables, you can specify an
AUTO_INCREMENTsecondary column in a multiple-column key. See Section 3.6.9, "Using AUTO_INCREMENT".
To make MySQL compatible with some ODBC applications, you can find the
AUTO_INCREMENTvalue for the last inserted row with the following query:
SELECT * FROM tbl_name WHERE auto_col IS NULL
This method requires that
sql_auto_is_nullvariable is not set to 0. See Section 5.1.8, "Server System Variables".
For information about
AUTO_INCREMENT, see Section 184.108.40.206, "AUTO_INCREMENT Handling in InnoDB". For information about
AUTO_INCREMENTand MySQL Replication, see Section 22.214.171.124, "Replication and AUTO_INCREMENT".
A comment for a column can be specified with the
COMMENToption, up to 1024 characters long. The comment is displayed by the
SHOW CREATE TABLEand
SHOW FULL COLUMNSstatements.
In NDB Cluster, it is also possible to specify a data storage format for individual columns of
NDBtables using
COLUMN_FORMAT. Permissible column formats are
DYNAMIC, and
FIXEDis used to specify fixed-width storage,
DYNAMICpermits the column to be variable-width, and
DEFAULTcauses the column to use fixed-width or variable-width storage as determined by the column's data type (possibly overridden by a
NDBtables, the default value for
In NDB Cluster, the maximum possible offset for a column defined with
COLUMN_FORMAT=FIXEDis 8188 bytes. For more information and possible workarounds, see Section 184.108.40.206, "Limits Associated with Database Objects in NDB Cluster".
COLUMN_FORMATcurrently has no effect on columns of tables using storage engines other than
NDB. MySQL 8.0 silently ignores
NDBtables, it is possible to specify whether the column is stored on disk or in memory by using a
STORAGE DISKcauses the column to be stored on disk, and
STORAGE MEMORYcauses in-memory storage to be used. The
CREATE TABLEstatement used must still include a
mysql> CREATE TABLE t1 ( -> c1 INT STORAGE DISK, -> c2 INT STORAGE MEMORY -> ) ENGINE NDB; ERROR 1005 (HY000): Can't create table 'c.t1' (errno: 140) mysql> CREATE TABLE t1 ( -> c1 INT STORAGE DISK, -> c2 INT STORAGE MEMORY -> ) TABLESPACE ts_1 ENGINE NDB; Query OK, 0 rows affected (1.06 sec)
STORAGE DEFAULTis equivalent to
STORAGEclause has no effect on tables using storage engines other than
NDB. The
STORAGEkeyword is supported only in the build of mysqld that is supplied with NDB Cluster; it is not recognized in any other version of MySQL, where any attempt to use the
STORAGEkeyword causes a syntax error.
Used to specify a generated column expression. For information about generated columns, see Section 220.127.116.11, "CREATE TABLE and Generated Columns".
Stored generated columns can be indexed.
InnoDBsupports secondary indexes on virtual generated columns. See Section 220.127.116.11, "Secondary Indexes and Generated Columns".
Indexes, Foreign Keys, and CHECK Constraints
Several keywords apply to creation of indexes, foreign keys, and
CHECK constraints. For general background in
addition to the following descriptions, see
Section 13.1.15, "CREATE INDEX Statement",
Section 188.8.131.52, "FOREIGN KEY Constraints", and
Section 22.214.171.124, "CHECK Constraints".
CONSTRAINTclause may be given to name a constraint. If the clause is not given, or a
symbolis not included following the
CONSTRAINTkeyword, MySQL automatically generates a constraint name, with the exception noted below. The
symbolvalue, if used, must be unique per schema (database), per constraint type. A duplicate
symbolresults in an error. See also the discussion about length limits of generated constraint identifiers at Section 9.2.1, "Identifier Length Limits".Note
If the
CONSTRAINTclause is not given in a foreign key definition, or a
symbolis not included following the
CONSTRAINTkeyword, MySQL uses the foreign key index name up to MySQL 8.0.15, and automatically generates a constraint name thereafter.
The SQL standard specifies that all types of constraints (primary key, unique index, foreign key, check) belong to the same namespace. In MySQL, each constraint type has its own namespace per schema. Consequently, names for each type of constraint must be unique per schema, but constraints of different types can have the same name.
A unique index where all key columns must be defined as
NOT NULL. If they are not explicitly declared as
NOT NULL, MySQL declares them so implicitly (and silently). A table can have only one
PRIMARY KEY. The name of a
PRIMARY KEYis always
PRIMARY, which thus cannot be used as the name for any other kind of index.
If you do not have a
PRIMARY KEYand an application asks for the
PRIMARY KEYin your tables, MySQL returns the first
UNIQUEindex that has no
NULLcolumns as the
InnoDBtables, keep the
PRIMARY KEYshort to minimize storage overhead for secondary indexes. Each secondary index entry contains a copy of the primary key columns for the corresponding row. (See Section 18.104.22.168, "Clustered and Secondary Indexes".)
In the created table, a
PRIMARY KEYis placed first, followed by all
UNIQUEindexes, and then the nonunique indexes. This helps the MySQL optimizer to prioritize which index to use and also more quickly to detect duplicated
PRIMARY KEYcan be a multiple-column index. However, you cannot create a multiple-column index using the
PRIMARY KEYkey attribute in a column specification. Doing so only marks that single column as primary. You must use a separate
PRIMARY KEY(clause.
key_part, ...)
If a table has a
PRIMARY KEYor
UNIQUE NOT NULLindex that consists of a single column that has an integer type, you can use
_rowidto refer to the indexed column in
SELECTstatements, as described in Unique Indexes.
In MySQL, the name of a
PRIMARY KEYis
PRIMARY. For other indexes, if you do not assign a name, the index is assigned the same name as the first indexed column, with an optional suffix (
...) to make it unique. You can see index names for a table using
SHOW INDEX FROM. See Section 188.8.131.52, "SHOW INDEX Statement".
KEYis normally a synonym for
INDEX. The key attribute
PRIMARY KEYcan also be specified as just
KEYwhen given in a column definition. This was implemented for compatibility with other database systems.
UNIQUEindex creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a
UNIQUEindex permits multiple
NULLvalues for columns that can contain
NULL. If you specify a prefix value for a column in a
UNIQUEindex, the column values must be unique within the prefix length.
If a table has a
PRIMARY KEYor
UNIQUE NOT NULLindex that consists of a single column that has an integer type, you can use
_rowidto refer to the indexed column in
SELECTstatements, as described in Unique Indexes.
FULLTEXTindex is a special type of index used for full-text searches. Only the
MyISAMstorage engines support
FULLTEXTindexes. They can be created only from
VARCHAR, and
TEXTcolumns. Indexing always happens over the entire column; column prefix indexing is not supported and any prefix length is ignored if specified. See Section 12.9, "Full-Text Search Functions", for details of operation. A
WITH PARSERclause can be specified as an
index_optionvalue to associate a parser plugin with the index if full-text indexing and searching operations need special handling. This clause is valid only for
MyISAMsupport full-text parser plugins. See Full-Text Parser Plugins and Section 184.108.40.206, "Writing Full-Text Parser Plugins" for more information.
You can create
SPATIALindexes on spatial data types. Spatial types are supported only for
MyISAMtables, and indexed columns must be declared as
NOT NULL. See Section 11.4, "Spatial Data Types".
MySQL supports foreign keys, which let you cross-reference related data across tables, and foreign key constraints, which help keep this spread-out data consistent. For definition and option information, see
reference_definition, and
Partitioned tables employing the
InnoDBstorage engine do not support foreign keys. See Section 23.6, "Restrictions and Limitations on Partitioning", for more information.
CHECKclause enables the creation of constraints to be checked for data values in table rows. See Section 184.108.40.206, "CHECK Constraints".
key_partspecification can end with
DESCto specify whether index values are stored in ascending or descending order. The default is ascending if no order specifier is given.
Prefixes, defined by the
lengthattribute, can be up to 767 bytes long for
InnoDBtables that use the
COMPACTrow format. The prefix length limit is 3072 bytes for
InnoDBtables that use the
COMPRESSEDrow format. For
MyISAMtables, the prefix length limit is 1000 bytes.
Prefix limits are measured in bytes. However, prefix lengths for index specifications in
ALTER TABLE, and
CREATE INDEXstatements are interpreted as number of characters for nonbinary string types (
TEXT) and number of bytes for binary string types (
BLOB). Take this into account when specifying a prefix length for a nonbinary string column that uses a multibyte character set.
Beginning with MySQL 8.0.17, the
exprfor a
key_partspecification can take the form
(CASTto create a multi-valued index on a
JSONcolumn. Multi-Valued Indexes, provides detailed information regarding creation of, usage of, and restrictions and limitations on multi-valued indexes.
Some storage engines permit you to specify an index type when creating an index. The syntax for the
index_typespecifier is
CREATE TABLE lookup (id INT, INDEX USING BTREE (id)) ENGINE = MEMORY;
The preferred position for
USINGis after the index column list. It can be given before the column list, but support for use of the option in that position is deprecated and will be removed in a future MySQL release.
index_optionvalues specify additional options for an index.
KEY_BLOCK_SIZEoptionally specifies the size in bytes to use for index key blocks. The value is treated as a hint; a different size could be used if necessary. A
KEY_BLOCK_SIZEvalue specified for an individual index definition overrides the table-level
For information about the table-level
KEY_BLOCK_SIZEattribute, see Table Options.
WITH PARSERoption can only be used with
FULLTEXTindexes. It associates a parser plugin with the index if full-text indexing and searching operations need special handling.
MyISAMsupport full-text parser plugins. If you have a
MyISAMtable with an associated full-text parser plugin, you can convert the table to
In MySQL 8.0, index definitions can include an optional comment of up to 1024 characters.
You can set the
MERGE_THRESHOLDvalue for an individual index using the
COMMENTclause. See Section 15.8.11, "Configuring the Merge Threshold for Index Pages".
For more information about permissible
index_optionvalues, see Section 13.1.15, "CREATE INDEX Statement". For more information about indexes, see Section 8.3.1, "How MySQL Uses Indexes".
reference_definitionsyntax details and examples, see Section 184.108.40.206, "FOREIGN KEY Constraints".
NDBtables support checking of foreign key constraints. The columns of the referenced table must always be explicitly named. Both
ON DELETEand
ON UPDATEactions on foreign keys are supported. For more detailed information and examples, see Section 126.96.36.199, "FOREIGN KEY Constraints".
For other storage engines, MySQL Server parses and ignores the
FOREIGN KEYand
REFERENCESsyntax in
CREATE TABLEstatements. See Section 188.8.131.52, "FOREIGN KEY Constraint Differences".Important
For users familiar with the ANSI/ISO SQL Standard, please note that no storage engine, including
InnoDB, recognizes or enforces the
MATCHclause used in referential integrity constraint definitions. Use of an explicit
MATCHclause will not have the specified effect, and also causes
ON DELETEand
ON UPDATEclauses to be ignored. For these reasons, specifying
MATCHshould be avoided.
MATCHclause in the SQL standard controls how
NULLvalues in a composite (multiple-column) foreign key are handled when comparing to a primary key.
InnoDBessentially implements the semantics defined by
MATCH SIMPLE, which permit a foreign key to be all or partially
NULL. In that case, the (child table) row containing such a foreign key is permitted to be inserted, and does not match any row in the referenced (parent) table. It is possible to implement other semantics using triggers.
Additionally, MySQL requires that the referenced columns be indexed for performance. However,
InnoDBdoes not enforce any requirement that the referenced columns be declared
NOT NULL. The handling of foreign key references to nonunique keys or keys that contain
NULLvalues is not well defined for operations such as
DELETE CASCADE. You are advised to use foreign keys that reference only keys that are both
PRIMARY) and
MySQL parses but ignores "inline
REFERENCESspecifications" (as defined in the SQL standard) where the references are defined as part of the column specification. MySQL accepts
REFERENCESclauses only when specified as part of a separate
FOREIGN KEYspecification.
For information about the
NO ACTION, and
SET DEFAULToptions, see Section 220.127.116.11, "FOREIGN KEY Constraints".
Table Options
Table options are used to optimize the behavior of the table. In
most cases, you do not have to specify any of them. These options
apply to all storage engines unless otherwise indicated. Options
that do not apply to a given storage engine may be accepted and
remembered as part of the table definition. Such options then
apply if you later use
to convert the table to use a different storage engine.
Specifies the storage engine for the table, using one of the names shown in the following table. The engine name can be unquoted or quoted. The quoted name
'DEFAULT'is recognized but ignored.
Storage Engine Description
Transaction-safe tables with row locking and foreign keys. The default storage engine for new tables. See Chapter 15, The InnoDB Storage Engine, and in particular Section 15.1, "Introduction to InnoDB" if you have MySQL experience but are new to
The binary portable storage engine that is primarily used for read-only or read-mostly workloads. See Section 16.2, "The MyISAM Storage Engine".
The data for this storage engine is stored only in memory. See Section 16.3, "The MEMORY Storage Engine".
Tables that store rows in comma-separated values format. See Section 16.4, "The CSV Storage Engine".
The archiving storage engine. See Section 16.5, "The ARCHIVE Storage Engine".
An example engine. See Section 16.9, "The EXAMPLE Storage Engine".
Storage engine that accesses remote tables. See Section 16.8, "The FEDERATED Storage Engine".
This is a synonym for
A collection of
MyISAMtables used as one table. Also known as
MRG_MyISAM. See Section 16.7, "The MERGE Storage Engine".
Clustered, fault-tolerant, memory-based tables, supporting transactions and foreign keys. Also known as
NDBCLUSTER. See Chapter 22, MySQL NDB Cluster 8.0.
By default, if a storage engine is specified that is not available, the statement fails with an error. You can override this behavior by removing
NO_ENGINE_SUBSTITUTIONfrom the server SQL mode (see Section 5.1.11, "Server SQL Modes") so that MySQL allows substitution of the specified engine with the default storage engine instead. Normally in such cases, this is
InnoDB, which is the default value for the
default_storage_enginesystem variable. When
NO_ENGINE_SUBSTITUTIONis disabled, a warning occurs if the storage engine specification is not honored.
The initial
AUTO_INCREMENTvalue for the table. In MySQL 8.0, this works for
InnoDB, and
ARCHIVEtables. To set the first auto-increment value for engines that do not support the
AUTO_INCREMENTtable option, insert a "dummy" row with a value one less than the desired value after creating the table, and then delete the dummy row.
For engines that support the
AUTO_INCREMENTtable option in
CREATE TABLEstatements, you can also use
ALTER TABLEto reset the
tbl_nameAUTO_INCREMENT =
AUTO_INCREMENTvalue. The value cannot be set lower than the maximum value currently in the column.
An approximation of the average row length for your table. You need to set this only for large tables with variable-size rows.
When you create a
MyISAMtable, MySQL uses the product of the
AVG_ROW_LENGTHoptions to decide how big the resulting table is. If you don't specify either option, the maximum size for
MyISAMdata and index files is 256TB by default. (If your operating system does not support files that large, table sizes are constrained by the file size limit.) If you want to keep down the pointer sizes to make the index smaller and faster and you don't really need big files, you can decrease the default pointer size by setting the
myisam_data_pointer_sizesystem variable. (See Section 5.1.8, "Server System Variables".) If you want all your tables to be able to grow above the default limit and are willing to have your tables slightly slower and larger than necessary, you can increase the default pointer size by setting this variable. Setting the value to 7 permits table sizes up to 65,536TB.
Specifies a default character set for the table.
CHARSETis a synonym for
CHARACTER SET. If the character set name is
DEFAULT, the database character set is used.
Set this to 1 if you want MySQL to maintain a live checksum for all rows (that is, a checksum that MySQL updates automatically as the table changes). This makes the table a little slower to update, but also makes it easier to find corrupted tables. The
CHECKSUM TABLEstatement reports the checksum. (
Specifies a default collation for the table.
A comment for the table, up to 2048 characters long.
You can set the
MERGE_THRESHOLDvalue for a table using the
COMMENTclause. See Section 15.8.11, "Configuring the Merge Threshold for Index Pages".
Setting NDB_TABLE options. The table comment in a
CREATE TABLEthat creates an
NDBtable or an
ALTER TABLEstatement which alters one can also be used to specify one to four of the
PARTITION_BALANCE, or
FULLY_REPLICATEDas a set of name-value pairs, separated by commas if need be, immediately following the string
NDB_TABLE=that begins the quoted comment text. An example statement using this syntax is shown here (emphasized text):
CREATE TABLE t1 ( c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c2 VARCHAR(100), c3 VARCHAR(100) ) ENGINE=NDBCOMMENT="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE";
Spaces are not permitted within the quoted string. The string is case-insensitive.
The comment is displayed as part of the ouput of
SHOW CREATE TABLE. The text of the comment is also available as the TABLE_COMMENT column of the MySQL Information Schema
This comment syntax is also supported with
ALTER TABLEstatements for
NDBtables. Keep in mind that a table comment used with
ALTER TABLEreplaces any existing comment which the table might have had perviously.
Setting the
MERGE_THRESHOLDoption in table comments is not supported for
NDBtables (it is ignored).
For complete syntax information and examples, see Section 22.214.171.124, "Setting NDB_TABLE Options".
The compression algorithm used for page level compression for
InnoDBtables. Supported values include
LZ4, and
None. The
COMPRESSIONattribute was introduced with the transparent page compression feature. Page compression is only supported with
InnoDBtables that reside in file-per-table tablespaces, and is only available on Linux and Windows platforms that support sparse files and hole punching. For more information, see Section 15.9.2, "InnoDB Page Compression".
The connection string for a
Older versions of MySQL used a
COMMENToption for the connection string.
InnoDB, the
DATA DIRECTORY='clause permits creating tables outside of the data directory. The
innodb_file_per_tablevariable must be enabled to use the
DATA DIRECTORYclause. The full directory path must be specified. For more information, see Section 188.8.131.52, "Creating Tables Externally".
When creating
MyISAMtables, you can use the
DATA DIRECTORY='clause, the
INDEX DIRECTORY='clause, or both. They specify where to put a
MyISAMtable's data file and index file, respectively. Unlike
InnoDBtables, MySQL does not create subdirectories that correspond to the database name when creating a
MyISAMtable with a
DATA DIRECTORYor
INDEX DIRECTORYoption. Files are created in the directory that is specified.
You must have the
FILEprivilege to use the
DATA DIRECTORYor
INDEX DIRECTORYtable option.Important
DATA DIRECTORYand
INDEX DIRECTORYoptions are ignored for partitioned tables. (Bug #32091)
These options work only when you are not using the
--skip-symbolic-linksoption. Your operating system must also have a working, thread-safe
realpath()call. See Section 126.96.36.199, "Using Symbolic Links for MyISAM Tables on Unix", for more complete information.
If a
MyISAMtable is created with no
DATA DIRECTORYoption, the
.MYDfile is created in the database directory. By default, if
MyISAMfinds an existing
.MYDfile in this case, it overwrites it. The same applies to
.MYIfiles for tables created with no
INDEX DIRECTORYoption. To suppress this behavior, start the server with the
--keep_files_on_createoption, in which case
MyISAMwill not overwrite existing files and returns an error instead.
If a
MyISAMtable is created with a
DATA DIRECTORYor
INDEX DIRECTORYoption and an existing
.MYIfile is found, MyISAM always returns an error. It will not overwrite a file in the specified directory.Important
You cannot use path names that contain the MySQL data directory with
DATA DIRECTORYor
INDEX DIRECTORY. This includes partitioned tables and individual table partitions. (See Bug #32167.)
Set this to 1 if you want to delay key updates for the table until the table is closed. See the description of the
delay_key_writesystem variable in Section 5.1.8, "Server System Variables". (
ENCRYPTIONclause enables or disables page-level data encryption for an
InnoDBtable. A keyring plugin must be installed and configured before encryption can be enabled. Prior to MySQL 8.0.16, the
ENCRYPTIONclause can only be specified when creating a table in an a file-per-table tablespace. As of MySQL 8.0.16, the
ENCRYPTIONclause can also be specified when creating a table in a general tablespace.
As of MySQL 8.0.16, a table inherits the default schema encryption if an
ENCRYPTIONclause is not specified. If the
table_encryption_privilege_checkvariable is enabled, the
TABLE_ENCRYPTION_ADMINprivilege is required to create a table with an
ENCRYPTIONclause setting that differs from the default schema encryption. When creating a table in a general tablespace, table and tablespace encryption must match.
As of MySQL 8.0.16, specifying an
ENCRYPTIONclause with a value other than
''is not permitted when using a storage engine that does not support encryption. Previously, the clause was accepted.
For more information, see Section 15.13, "InnoDB Data-at-Rest Encryption".
If you want to insert data into a
MERGEtable, you must specify with
INSERT_METHODthe table into which the row should be inserted.
INSERT_METHODis an option useful for
MERGEtables only. Use a value of
LASTto have inserts go to the first or last table, or a value of
NOto prevent inserts. See Section 16.7, "The MERGE Storage Engine".
KEY_BLOCK_SIZEoptionally specifies the size in bytes to use for index key blocks. The value is treated as a hint; a different size could be used if necessary. A
KEY_BLOCK_SIZEvalue specified for an individual index definition overrides the table-level
KEY_BLOCK_SIZEspecifies the page size in kilobytes to use for compressed
InnoDBtables. The
KEY_BLOCK_SIZEvalue is treated as a hint; a different size could be used by
InnoDBif necessary.
KEY_BLOCK_SIZEcan only be less than or equal to the
innodb_page_sizevalue. A value of 0 represents the default compressed page size, which is half of the
innodb_page_sizevalue. Depending on
innodb_page_size, possible
KEY_BLOCK_SIZEvalues include 0, 1, 2, 4, 8, and 16. See Section 15.9.1, "InnoDB Table Compression" for more information.
Oracle recommends enabling
innodb_strict_modewhen specifying
InnoDBtables. When
innodb_strict_modeis enabled, specifying an invalid
KEY_BLOCK_SIZEvalue returns an error. If
innodb_strict_modeis disabled, an invalid
KEY_BLOCK_SIZEvalue results in a warning, and the
KEY_BLOCK_SIZEoption is ignored.
Create_optionscolumn in response to
SHOW TABLE STATUSreports the actual
KEY_BLOCK_SIZEused by the table, as does
InnoDBonly supports
KEY_BLOCK_SIZEat the table level.
KEY_BLOCK_SIZEis not supported with 32KB and 64KB
InnoDBtable compression does not support these pages sizes.
InnoDBdoes not support the
KEY_BLOCK_SIZEoption when creating temporary tables.
The maximum number of rows you plan to store in the table. This is not a hard limit, but rather a hint to the storage engine that the table must be able to store at least this many rows.Important
The use of
NDBtables to control the number of table partitions is deprecated. It remains supported in later versions for backward compatibility, but is subject to removal in a future release. Use PARTITION_BALANCE instead; see Setting NDB_TABLE options.
NDBstorage engine treats this value as a maximum. If you plan to create very large NDB Cluster tables (containing millions of rows), you should use this option to insure that
NDBallocates sufficient number of index slots in the hash table used for storing hashes of the table's primary keys by setting
MAX_ROWS = 2 *, where
rowsis the number of rows that you expect to insert into the table.
The maximum
MAX_ROWSvalue is 4294967295; larger values are truncated to this limit.
The minimum number of rows you plan to store in the table. The
MEMORYstorage engine uses this option as a hint about memory use.
Takes effect only with
MyISAMtables. Set this option to 1 if you want to have smaller indexes. This usually makes updates slower and reads faster. Setting the option to 0 disables all packing of keys. Setting it to
DEFAULTtells the storage engine to pack only long
BINARY, or
If you do not use
PACK_KEYS, the default is to pack strings, but not numbers. If you use
PACK_KEYS=1, numbers are packed as well.
When packing binary number keys, MySQL uses prefix compression:
Every key needs one extra byte to indicate how many bytes of the previous key are the same for the next key.
The pointer to the row is stored in high-byte-first order directly after the key, to improve compression.
This means that if you have many equal keys on two consecutive rows, all following "same" keys usually only take two bytes (including the pointer to the row). Compare this to the ordinary case where the following keys takes
storage_size_for_key + pointer_size(where the pointer size is usually 4). Conversely, you get a significant benefit from prefix compression only if you have many numbers that are the same. If all keys are totally different, you use one byte more per key, if the key is not a key that can have
NULLvalues. (In this case, the packed key length is stored in the same byte that is used to mark if a key is
This option is unused.
Defines the physical format in which the rows are stored.
When creating a table with strict mode disabled, the storage engine's default row format is used if the specified row format is not supported. The actual row format of the table is reported in the
Row_formatcolumn in response to
SHOW TABLE STATUS. The
Create_optionscolumn shows the row format that was specified in the
CREATE TABLEstatement, as does
Row format choices differ depending on the storage engine used for the table.
The default row format is defined by
innodb_default_row_format, which has a default setting of
DYNAMIC. The default row format is used when the
ROW_FORMAToption is not defined or when
ROW_FORMAT=DEFAULTis used.
If the
ROW_FORMAToption is not defined, or if
ROW_FORMAT=DEFAULTis used, operations that rebuild a table also silently change the row format of the table to the default defined by
innodb_default_row_format. For more information, see Defining the Row Format of a Table.
For more efficient
InnoDBstorage of data types, especially
BLOBtypes, use the
DYNAMIC. See DYNAMIC Row Format for requirements associated with the
DYNAMICrow format.
To enable compression for
InnoDBtables, specify
ROW_FORMAT=COMPRESSED. The
ROW_FORMAT=COMPRESSEDoption is not supported when creating temporary tables. See Section 15.9, "InnoDB Table and Page Compression" for requirements associated with the
COMPRESSEDrow format.
The row format used in older versions of MySQL can still be requested by specifying the
REDUNDANTrow format.
When you specify a non-default
ROW_FORMATclause, consider also enabling the
innodb_strict_modeconfiguration option.
ROW_FORMAT=FIXEDis not supported. If
ROW_FORMAT=FIXEDis specified while
innodb_strict_modeis disabled,
InnoDBissues a warning and assumes
ROW_FORMAT=DYNAMIC. If
ROW_FORMAT=FIXEDis specified while
innodb_strict_modeis enabled, which is the default,
InnoDBreturns an error.
For additional information about
InnoDBrow formats, see Section 15.10, "InnoDB Row Formats".
MyISAMtables, the option value can be
DYNAMICfor static or variable-length row format. myisampack sets the type to
COMPRESSED. See Section 16.2.3, "MyISAM Table Storage Formats".
NDBtables, the default
Specifies whether to automatically recalculate persistent statistics for an
InnoDBtable. The value
DEFAULTcauses the persistent statistics setting for the table to be determined by the
innodb_stats_auto_recalcconfiguration option. The value
1causes statistics to be recalculated when 10% of the data in the table has changed. The value
0prevents automatic recalculation for this table; with this setting, issue an
ANALYZE TABLEstatement to recalculate the statistics after making substantial changes to the table. For more information about the persistent statistics feature, see Section 126.96.36.199, "Configuring Persistent Optimizer Statistics Parameters".
Specifies whether to enable persistent statistics for an
InnoDBtable. The value
DEFAULTcauses the persistent statistics setting for the table to be determined by the
innodb_stats_persistentconfiguration option. The value
1enables persistent statistics for the table, while the value
0turns off this feature. After enabling persistent statistics through a
CREATE TABLEor
ALTER TABLEstatement, issue an
ANALYZE TABLEstatement to calculate the statistics, after loading representative data into the table. For more information about the persistent statistics feature, see Section 22.214.171.124, "Configuring Persistent Optimizer Statistics Parameters".
The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by
ANALYZE TABLE. For more information, see Section 220.127.116.11, "Configuring Persistent Optimizer Statistics Parameters".
TABLESPACEclause can be used to create a table in an existing general tablespace, a file-per-table tablespace, or the system tablespace.
CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_name
The general tablespace that you specify must exist prior to using the
TABLESPACEclause. For information about general tablespaces, see Section 220.127.116.11, "General Tablespaces".
is a case-sensitive identifier. It may be quoted or unquoted. The forward slash character ("/") is not permitted. Names beginning with "innodb_" are reserved for special use.
To create a table in the system tablespace, specify
innodb_systemas the tablespace name.
CREATE TABLE tbl_name ... TABLESPACE [=] innodb_system
TABLESPACE [=] innodb_system, you can place a table of any uncompressed row format in the system tablespace regardless of the
innodb_file_per_tablesetting. For example, you can add a table with
ROW_FORMAT=DYNAMICto the system tablespace using
TABLESPACE [=] innodb_system.
To create a table in a file-per-table tablespace, specify
innodb_file_per_tableas the tablespace name.
CREATE TABLE tbl_name ... TABLESPACE [=] innodb_file_per_tableNote
innodb_file_per_tableis enabled, you need not specify
TABLESPACE=innodb_file_per_tableto create an
InnoDBfile-per-table tablespace.
InnoDBtables are created in file-per-table tablespaces by default when
innodb_file_per_tableis enabled.
DATA DIRECTORYclause is permitted with
CREATE TABLE ... TABLESPACE=innodb_file_per_tablebut is otherwise not supported for use in combination with the
Support for
TABLESPACE = innodb_file_per_tableand
TABLESPACE = innodb_temporaryclauses with
CREATE TEMPORARY TABLEis deprecated as of MySQL 8.0.13 and will be removed in a future version of MySQL.
STORAGEtable option is employed only with
STORAGEdetermines the type of storage used (disk or memory), and can be either
TABLESPACE ... STORAGE DISKassigns a table to an NDB Cluster Disk Data tablespace. The tablespace must already have been created using
CREATE TABLESPACE. See Section 22.5.13, "NDB Cluster Disk Data Tables", for more information.Important
STORAGEclause cannot be used in a
CREATE TABLEstatement without a
Used to access a collection of identical
MyISAMtables as one. This works only with
MERGEtables. See Section 16.7, "The MERGE Storage Engine".
You must have
UPDATE, and
DELETEprivileges for the tables you map to a
Formerly, all tables used had to be in the same database as the
MERGEtable itself. This restriction no longer applies.
Table Partitioning
partition_options can be used to
control partitioning of the table created with
Not all options shown in the syntax for
partition_options at the beginning of
this section are available for all partitioning types. Please see
the listings for the following individual types for information
specific to each type, and see Chapter 23, Partitioning, for
more complete information about the workings of and uses for
partitioning in MySQL, as well as additional examples of table
creation and other statements relating to MySQL partitioning.
Partitions can be modified, merged, added to tables, and dropped from tables. For basic information about the MySQL statements to accomplish these tasks, see Section 13.1.9, "ALTER TABLE Statement". For more detailed descriptions and examples, see Section 23.3, "Partition Management".
If used, a
partition_optionsclause begins with
PARTITION BY. This clause contains the function that is used to determine the partition; the function returns an integer value ranging from 1 to
num, where
numis the number of partitions. (The maximum number of user-defined partitions which a table may contain is 1024; the number of subpartitions—discussed later in this section—is included in this maximum.)Note
The expression (
expr) used in a
PARTITION BYclause cannot refer to any columns not in the table being created; such references are specifically not permitted and cause the statement to fail with an error. (Bug #29444)
Hashes one or more columns to create a key for placing and locating rows.
expris an expression using one or more table columns. This can be any valid MySQL expression (including MySQL functions) that yields a single integer value. For example, these are both valid
CREATE TABLEstatements using
CREATE TABLE t1 (col1 INT, col2 CHAR(5)) PARTITION BY HASH(col1); CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME) PARTITION BY HASH ( YEAR(col3) );
You may not use either
VALUES LESS THANor
VALUES INclauses with
PARTITION BY HASHuses the remainder of
exprdivided by the number of partitions (that is, the modulus). For examples and additional information, see Section 23.2.4, "HASH Partitioning".
LINEARkeyword entails a somewhat different algorithm. In this case, the number of the partition in which a row is stored is calculated as the result of one or more logical
ANDoperations. For discussion and examples of linear hashing, see Section 188.8.131.52, "LINEAR HASH Partitioning".
This is similar to
HASH, except that MySQL supplies the hashing function so as to guarantee an even data distribution. The
column_listargument is simply a list of 1 or more table columns (maximum: 16). This example shows a simple table partitioned by key, with 4 partitions:
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY KEY(col3) PARTITIONS 4;
For tables that are partitioned by key, you can employ linear partitioning by using the
LINEARkeyword. This has the same effect as with tables that are partitioned by
HASH. That is, the partition number is found using the
&operator rather than the modulus (see Section 126.96.36.199, "LINEAR HASH Partitioning", and Section 23.2.5, "KEY Partitioning", for details). This example uses linear partitioning by key to distribute data between 5 partitions:
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR KEY(col3) PARTITIONS 5;
ALGORITHM={1|2}option is supported with
ALGORITHM=1causes the server to use the same key-hashing functions as MySQL 5.1;
ALGORITHM=2means that the server employs the key-hashing functions implemented and used by default for new
KEYpartitioned tables in MySQL 5.5 and later. (Partitioned tables created with the key-hashing functions employed in MySQL 5.5 and later cannot be used by a MySQL 5.1 server.) Not specifying the option has the same effect as using
ALGORITHM=2. This option is intended for use chiefly when upgrading or downgrading
[LINEAR] KEYpartitioned tables between MySQL 5.1 and later MySQL versions, or for creating tables partitioned by
LINEAR KEYon a MySQL 5.5 or later server which can be used on a MySQL 5.1 server. For more information, see Section 22.214.171.124, "ALTER TABLE Partition Operations".
mysqldump in MySQL 5.7 (and later) writes this option encased in versioned comments, like this:
CREATE TABLE t1 (a INT) /*!50100 PARTITION BY KEY */ /*!50611 ALGORITHM = 1 */ /*!50100 () PARTITIONS 3 */
This causes MySQL 5.6.10 and earlier servers to ignore the option, which would otherwise cause a syntax error in those versions. If you plan to load a dump made on a MySQL 5.7 server where you use tables that are partitioned or subpartitioned by
KEYinto a MySQL 5.6 server previous to version 5.6.11, be sure to consult Changes in MySQL 5.6, before proceeding. (The information found there also applies if you are loading a dump containing
KEYpartitioned or subpartitioned tables made from a MySQL 5.7—actually 5.6.11 or later—server into a MySQL 5.5.30 or earlier server.)
Also in MySQL 5.6.11 and later,
ALGORITHM=1is shown when necessary in the output of
SHOW CREATE TABLEusing versioned comments in the same manner as mysqldump.
ALGORITHM=2is always omitted from
SHOW CREATE TABLEoutput, even if this option was specified when creating the original table.
You may not use either
VALUES LESS THANor
VALUES INclauses with
In this case,
exprshows a range of values using a set of
VALUES LESS THANoperators. When using range partitioning, you must define at least one partition using
VALUES LESS THAN. You cannot use
VALUES INwith range partitioning.Note
For tables partitioned by
VALUES LESS THANmust be used with either an integer literal value or an expression that evaluates to a single integer value. In MySQL 8.0, you can overcome this limitation in a table that is defined using
PARTITION BY RANGE COLUMNS, as described later in this section.
Suppose that you have a table that you wish to partition on a column containing year values, according to the following scheme.
Partition Number: Years Range: 0 1990 and earlier 1 1991 to 1994 2 1995 to 1998 3 1999 to 2002 4 2003 to 2005 5 2006 and later
A table implementing such a partitioning scheme can be realized by the
CREATE TABLEstatement shown here:
CREATE TABLE t1 ( year_col INT, some_data INT ) PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999), PARTITION p3 VALUES LESS THAN (2002), PARTITION p4 VALUES LESS THAN (2006), PARTITION p5 VALUES LESS THAN MAXVALUE );
PARTITION ... VALUES LESS THAN ...statements work in a consecutive fashion.
VALUES LESS THAN MAXVALUEworks to specify "leftover" values that are greater than the maximum value otherwise specified.
VALUES LESS THANclauses work sequentially in a manner similar to that of the
caseportions of a
switch ... caseblock (as found in many programming languages such as C, Java, and PHP). That is, the clauses must be arranged in such a way that the upper limit specified in each successive
VALUES LESS THANis greater than that of the previous one, with the one referencing
MAXVALUEcoming last of all in the list.
This variant on
RANGEfacilitates partition pruning for queries using range conditions on multiple columns (that is, having conditions such as
WHERE a = 1 AND b < 10or
WHERE a = 1 AND b = 10 AND c < 10). It enables you to specify value ranges in multiple columns by using a list of columns in the
COLUMNSclause and a set of column values in each
PARTITION ... VALUES LESS THAN (partition definition clause. (In the simplest case, this set consists of a single column.) The maximum number of columns that can be referenced in the
value_listis 16.
column_listused in the
COLUMNSclause may contain only names of columns; each column in the list must be one of the following MySQL data types: the integer types; the string types; and time or date column types. Columns using
BIT, or spatial data types are not permitted; columns that use floating-point number types are also not permitted. You also may not use functions or arithmetic expressions in the
VALUES LESS THANclause used in a partition definition must specify a literal value for each column that appears in the
COLUMNS()clause; that is, the list of values used for each
VALUES LESS THANclause must contain the same number of values as there are columns listed in the
COLUMNSclause. An attempt to use more or fewer values in a
VALUES LESS THANclause than there are in the
COLUMNSclause causes the statement to fail with the error Inconsistency in usage of column lists for partitioning.... You cannot use
NULLfor any value appearing in
VALUES LESS THAN. It is possible to use
MAXVALUEmore than once for a given column other than the first, as shown in this example:
CREATE TABLE rc ( a INT NOT NULL, b INT NOT NULL ) PARTITION BY RANGE COLUMNS(a,b) ( PARTITION p0 VALUES LESS THAN (10,5), PARTITION p1 VALUES LESS THAN (20,10), PARTITION p2 VALUES LESS THAN (50,MAXVALUE), PARTITION p3 VALUES LESS THAN (65,MAXVALUE), PARTITION p4 VALUES LESS THAN (MAXVALUE,MAXVALUE) );
Each value used in a
VALUES LESS THANvalue list must match the type of the corresponding column exactly; no conversion is made. For example, you cannot use the string
'1'for a value that matches a column that uses an integer type (you must use the numeral
1instead), nor can you use the numeral
1for a value that matches a column that uses a string type (in such a case, you must use a quoted string:
For more information, see Section 23.2.1, "RANGE Partitioning", and Section 23.4, "Partition Pruning".
This is useful when assigning partitions based on a table column with a restricted set of possible values, such as a state or country code. In such a case, all rows pertaining to a certain state or country can be assigned to a single partition, or a partition can be reserved for a certain set of states or countries. It is similar to
RANGE, except that only
VALUES INmay be used to specify permissible values for each partition.
VALUES INis used with a list of values to be matched. For instance, you could create a partitioning scheme such as the following:
CREATE TABLE client_firms ( id INT, name VARCHAR(35) ) PARTITION BY LIST (id) ( PARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21), PARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22), PARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23), PARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24) );
When using list partitioning, you must define at least one partition using
VALUES IN. You cannot use
VALUES LESS THANwith
PARTITION BY LIST.Note
For tables partitioned by
LIST, the value list used with
VALUES INmust consist of integer values only. In MySQL 8.0, you can overcome this limitation using partitioning by
LIST COLUMNS, which is described later in this section.
This variant on
LISTfacilitates partition pruning for queries using comparison conditions on multiple columns (that is, having conditions such as
WHERE a = 5 AND b = 5or
WHERE a = 1 AND b = 10 AND c = 5). It enables you to specify values in multiple columns by using a list of columns in the
COLUMNSclause and a set of column values in each
PARTITION ... VALUES IN (partition definition clause.
The rules governing regarding data types for the column list used in
LIST COLUMNS(and the value list used in
VALUES IN(are the same as those for the column list used in
RANGE COLUMNS(and the value list used in
VALUES LESS THAN(, respectively, except that in the
VALUES INclause,
MAXVALUEis not permitted, and you may use
There is one important difference between the list of values used for
VALUES INwith
PARTITION BY LIST COLUMNSas opposed to when it is used with
PARTITION BY LIST. When used with
PARTITION BY LIST COLUMNS, each element in the
VALUES INclause must be a set of column values; the number of values in each set must be the same as the number of columns used in the
COLUMNSclause, and the data types of these values must match those of the columns (and occur in the same order). In the simplest case, the set consists of a single column. The maximum number of columns that can be used in the
column_listand in the elements making up the
value_listis 16.
The table defined by the following
CREATE TABLEstatement provides an example of a table using
LIST COLUMNSpartitioning:
CREATE TABLE lc ( a INT NULL, b INT NULL ) PARTITION BY LIST COLUMNS(a,b) ( PARTITION p0 VALUES IN( (0,0), (NULL,NULL) ), PARTITION p1 VALUES IN( (0,1), (0,2), (0,3), (1,1), (1,2) ), PARTITION p2 VALUES IN( (1,0), (2,0), (2,1), (3,0), (3,1) ), PARTITION p3 VALUES IN( (1,3), (2,2), (2,3), (3,2), (3,3) ) );
The number of partitions may optionally be specified with a
PARTITIONSclause, where
numis the number of partitions. If both this clause and any
PARTITIONclauses are used,
nummust be equal to the total number of any partitions that are declared using
Whether or not you use a
PARTITIONSclause in creating a table that is partitioned by
LIST, you must still include at least one
PARTITION VALUESclause in the table definition (see below).
A partition may optionally be divided into a number of subpartitions. This can be indicated by using the optional
SUBPARTITION BYclause. Subpartitioning may be done by
KEY. Either of these may be
LINEAR. These work in the same way as previously described for the equivalent partitioning types. (It is not possible to subpartition by
The number of subpartitions can be indicated using the
SUBPARTITIONSkeyword followed by an integer value.
Rigorous checking of the value used in
SUBPARTITIONSclauses is applied and this value must adhere to the following rules:
The value must be a positive, nonzero integer.
No leading zeros are permitted.
The value must be an integer literal, and cannot not be an expression. For example,
PARTITIONS 0.2E+01is not permitted, even though
0.2E+01evaluates to
2. (Bug #15890)
Each partition may be individually defined using a
partition_definitionclause. The individual parts making up this clause are as follows:
Specifies a logical name for the partition.
For range partitioning, each partition must include a
VALUES LESS THANclause; for list partitioning, you must specify a
VALUES INclause for each partition. This is used to determine which rows are to be stored in this partition. See the discussions of partitioning types in Chapter 23, Partitioning, for syntax examples.
MySQL accepts a
[STORAGE] ENGINEoption for both
SUBPARTITION. Currently, the only way in which this option can be used is to set all partitions or all subpartitions to the same storage engine, and an attempt to set different storage engines for partitions or subpartitions in the same table will give rise to the error ERROR 1469 (HY000): The mix of handlers in the partitions is not permitted in this version of MySQL.
An optional
COMMENTclause may be used to specify a string that describes the partition. Example:
COMMENT = 'Data for the years previous to 1999'
The maximum length for a partition comment is 1024 characters.
DATA DIRECTORYand
DATA DIRECTORYand
INDEX DIRECTORYmay be used to indicate the directory where, respectively, the data and indexes for this partition are to be stored. Both the
and the
must be absolute system path names.
You must have the
FILEprivilege to use the
DATA DIRECTORYor
INDEX DIRECTORYpartition option.
CREATE TABLE th (id INT, name VARCHAR(30), adate DATE) PARTITION BY LIST(YEAR(adate)) ( PARTITION p1999 VALUES IN (1995, 1999, 2003) DATA DIRECTORY = '/var/appdata/95/data' INDEX DIRECTORY = '/var/appdata/95/idx', PARTITION p2000 VALUES IN (1996, 2000, 2004) DATA DIRECTORY = '/var/appdata/96/data' INDEX DIRECTORY = '/var/appdata/96/idx', PARTITION p2001 VALUES IN (1997, 2001, 2005) DATA DIRECTORY = '/var/appdata/97/data' INDEX DIRECTORY = '/var/appdata/97/idx', PARTITION p2002 VALUES IN (1998, 2002, 2006) DATA DIRECTORY = '/var/appdata/98/data' INDEX DIRECTORY = '/var/appdata/98/idx' );
DATA DIRECTORYand
INDEX DIRECTORYbehave in the same way as in the
CREATE TABLEstatement's
table_optionclause as used for
One data directory and one index directory may be specified per partition. If left unspecified, the data and indexes are stored by default in the table's database directory.
DATA DIRECTORYand
INDEX DIRECTORYoptions are ignored for creating partitioned tables if
NO_DIR_IN_CREATEis in effect.
May be used to specify, respectively, the maximum and minimum number of rows to be stored in the partition. The values for
min_number_of_rowsmust be positive integers. As with the table-level options with the same names, these act only as "suggestions" to the server and are not hard limits.
May be used to designate an
InnoDBfile-per-table tablespace for the partition by specifying
TABLESPACE `innodb_file_per_table`. All partitions must belong to the same storage engine.
InnoDBtable partitions in shared
InnoDBtablespaces is not supported. Shared tablespaces include the
InnoDBsystem tablespace and general tablespaces.
The partition definition may optionally contain one or more
subpartition_definitionclauses. Each of these consists at a minimum of the
SUBPARTITION, where
nameis an identifier for the subpartition. Except for the replacement of the
PARTITIONkeyword with
SUBPARTITION, the syntax for a subpartition definition is identical to that for a partition definition.
Subpartitioning must be done by
KEY, and can be done only on
LISTpartitions. See Section 23.2.6, "Subpartitioning".
Partitioning by Generated Columns
Partitioning by generated columns is permitted. For example:
CREATE TABLE t1 (
s1 INT,
s2 INT AS (EXP(s1)) STORED
PARTITION BY LIST (s2) (
PARTITION p1 VALUES IN (1)
Partitioning sees a generated column as a regular column, which
enables workarounds for limitations on functions that are not
permitted for partitioning (see
Section 23.6.3, "Partitioning Limitations Relating to Functions"). The
preceding example demonstrates this technique:
EXP() cannot be used directly in
PARTITION BY clause, but a generated column
defined using
EXP() is permitted.


text:
Stars like our Sun don't die through a supernova. Instead, after they exhaust their usable nuclear fuel, they shed their outer layers. This forms the beautiful clouds known as planetary nebulae, while the remaining core becomes a white dwarf. The mechanism by which stars jettison most of their mass has proven difficult to measure, since obtaining good data on the region close to stars is technically very challenging.
Using the Very Large Telescope (VLT) in Chile, astronomers have now measured the light scattered off the ejected matter from three stars nearing the end of their lives. As they describe in Nature, Barnaby R. M. Norris et al. found that huge, late-life stars known as asymptotic giants form large dust grains close to their surfaces, which are then driven outward by photon scattering. This finding has interesting implications for the seeding of interstellar space with the raw ingredients for forming new star systems.
When a star like our Sun nears the end of its life, the nuclear fusion that makes it shine runs at an accelerated rate. This excess energy inflates the outer layers of the star—called the envelope—so that it becomes huge, even as the surface temperature drops. While in this asymptotic giant (sometimes known as red supergiant) phase, stars are unstable: their surfaces pulse in and out. When the star is at its largest, standard astronomical models indicate that the temperature is low enough that heavier atoms (notably silicon) in the envelope can cluster to form dust grains.
Lower-mass stars (including the Sun) aren't able to create elements more massive than oxygen in their cores. However, the envelopes of typical stars contain heavier elements including magnesium, silicon, calcium, and iron, that were produced in earlier, much more massive stars that then exploded. But there aren't enough supernovas going off to create the distribution of stuff we see, so mass shed by lower-mass stars must be responsible for the remainder.
The dust clouds produced by these stars are an important part of the continuing cycle of star birth: cold dust clouds form the environment in which new stars can form. However, the mechanism that liberates the dust from the dying star that produced it isn't clear. Dust grains containing iron don't move much when they absorb photons, meaning they stick close to the star rather than spreading out into interstellar space.
The new observations by Norris et al. provide a way out of this difficulty. They measured light from three asymptotic giant stars (W Hydrae, R Doradus, and R Leonis). The polarization of the light enabled them to separate the light from the star itself (which is unpolarized) from photons scattered off dust grains near the surfaces (which is polarized). They determined that there are shells of dust very close to the surface, with grains of relatively large size: approximately 600 nanometers in diameter. Since these grains aren't obscuring the star's light, they must be mostly transparent in visible wavelengths, which limits the possibilities for their chemical composition.
Putting all this information together, the astronomers concluded that the grains must be iron-free silicates such as forsterite (Mg2SiO4) and enstatite (Mg2SiO4), found in interstellar dust clouds. Even though dust formed from these molecules is transparent to visible light, photons still scatter off them, giving them a bit of momentum, which they pass along to lighter gas molecules.
This phenomenon provides a good understanding of the flow of particles away from the surface of stars. Since mass loss by stars like our Sun contributes to the environment of interstellar space, knowing how asymptotic giants shed their envelopes is an important part of comprehending the cycle of star birth and death. The new observations by Norris et al. help enhance this comprehension.
Nature, 2012. DOI: 10.1038/nature10935 (About DOIs).


text:
Ask to be rated as a skater...
Been Skating All My Life
Use this control to limit the display of threads to those newer than the specified time frame.
Allows you to choose the data by which the thread list will be sorted.
Order threads in...
Note: when sorting by date, 'descending order' will show the newest results first.
Forum Rules
Welcome to Skateboard-City Forum!


text:
Podcast: Play in new window | Download (Duration: 54:13 — 49.6MB) | Embed
Gilad Atzmon's New Book: The Wandering Who? A Study Of Jewish Identity Politics
Jewish identity is tied up with some of the most difficult and contentious issues of today. The purpose in this book is to open many of these issues up for discussion. Since Israel defines itself openly as the 'Jewish State', we should ask what the notions of 'Judaism', 'Jewishness', 'Jewish culture' and 'Jewish ideology' stand for. Gilad examines the tribal aspects embedded in Jewish secular discourse, both Zionist and anti Zionist; the 'holocaust religion'; the meaning of 'history' and 'time' within the Jewish political discourse; the anti-Gentile ideologies entangled within different forms of secular Jewish political discourse and even within the Jewish left. He questions what it is that leads Diaspora Jews to identify themselves with Israel and affiliate with its politics. The devastating state of our world affairs raises an immediate demand for a conceptual shift in our intellectual and philosophical attitude towards politics, identity politics and history.
You can now order the book on Amazon.com or Amazon.co.uk


text:
…cute, adorable? YES! the fabulous Denise designed this baby carriage treat box and let me try it out! I love this especially since my sister is pregnant, I don't know if she is having a boy or a girl yet so I'll have to hold back on making more for a bit!
This is a svg file that you can cut with your Cricut if you have Sure Cuts a Lot (SCAL) software. Please visit Denise's blog for more info on this file.
I also used SCAL to make this card, I welded 2 scallop circles together to make the base then ran the cardstock through my Big Shot with a Fiskars texture plate and inked the raised edges. The stamps are from Stampin Up! I scored the pretty ribbon at the Dollar Tree, they have tons of 6 yard rolls of organza, grosgrain and satin ribbon in gorgeous colors for a buck a roll! They look very similar to the SU! ribbon too.
That's all for now, I have a few more baby treat box files to try out from Denise I'll post them as soon as they are done. Til' next time happy crafting!
Filed under: SCAL software + Cricut, Stamping, Uncategorized | Tagged: baby carriage, baby shower card, baby shower papercraft, cricut baby shower project, pram favor boxes, puns from the past, SCAL software + Cricut, stampin up, SVG, treat box | 6 Comments »


text:
Bay's disastrous three-year stint with Mets finally comes to an end
Jason Bay hit just 26 home runs with the Mets over the past three years. (AP)
Even as some teams prepare to enter expensive long-term entanglements with free agents, cautionary tales abound. Case in point: On Wednesday, the Mets released Jason Bay after negotiating an early end to the four-year, $66 million contract he signed in December 2009 — a deal that still had one year remaining. The team will save a bit of money, free up a roster spot, and avoid further distraction that can come with marginalizing a highly-paid player, while he can search for a new team with which he can attempt to revive his flagging career.
Bay didn't look like a particularly bad bet when the Mets signed him. In his age-30 season with the Red Sox in 2009, he had hit .267/.384/.537 with 36 homers, 94 walks and 119 RBIs, a season that was worth 5.9 Wins Above Replacement Player and wasn't out of context with his recent production. Though he had passed through the hands of the Expos, Mets and Padres before establishing himself at the major league level with the Pirates, from 2004-2009 he had hit .280/.375/.519, averaging 30 homers, 99 RBIs and 4.6 WARP. Concerns about his lackluster defense in the outfield (which other metrics liked less than Baseball Prospectus' Fielding Runs Above Average) as well as the standard caveats about players on the wrong side of 30 certainly applied, but nothing suggested his collapse was imminent.
Alas, he never came close to delivering any kind of value for the Mets, much to the dismay of their front office and fans. In three seasons during which he averaged just 96 games and never played in more than 123 due to injuries, he hit just .234/.318/.369, with an average of nine homers, 41 RBIs and 0.4 WARP. The injuries were a significant part of the problem; he sustained a whiplash-induced concussion after running into an outfield wall on July 23, 2010, one the Mets failed to identify until after he had played for two more days and flown with the team — handling that rightly drew criticism. The Mets were initially hopeful he would miss only a few days, but he didn't play again all season. He missed four weeks the following year with an intercostal strain, and in 2012 was limited to just 70 games due to a broken rib and yet another wall-induced concussion, batting just .165/.237/.299 with eight homers.
Yet injuries don't tell the entirety of Bay's Big Apple tenure. Nor does the offense-suppressing environment of Citi Field, which was particularly hard on righthanded hitters, reducing batting average by six percent and home runs by 22 percent from 2009-2011 according to The Bill James Handbook 2012. Even before his 2010 concussion, Bay batted just .259/.347/.402 with six homers, numbers that break down to a respectable .277/.371/.459 line at home, but an anemic .243/.326/.354 line on the road. That puzzling trend held true across the three-year period, with his road OPS 116 points lower than his home OPS. Whether he was tinkering with his swing too much, developing bad habits from adapting to Citi or playing through other undisclosed injuries is an open question, but the bottom line is that the Mets didn't get anywhere near the player they though they were getting.
Bay had $21 million coming to him via a $16 million 2013 salary, a $2 million installment of his signing bonus, and a $3 million buyout of his 2014 club option, which would have been for $17 million. His option would have vested had he gotten 600 plate appearances in the coming season, something he hasn't managed since 2009. Some of the $21 million will be deferred, giving the Mets additional flexibility with their payroll. Bay saves money with regards to New York taxes and gets unhindered free agency via which he can make more than the major league minimum salary of $450,000 that he'd get if the Mets had simply released him with his current deal intact and another team had picked him up.
This kind of move isn't unprecedented. Two cases come to mind immediately, one of which will be all-too-familiar to Mets fans. In January 2000, the Mets released Bobby Bonilla, who was coming off a year in which he had hit a Bay-like .160/.277/.303 in 60 games, and was headed into his age-37 season. Rather than pay him the $5.9 million he was due, they struck a deal via which Bonilla's salary would be deferred 12 years and then would pay out in 25 annual installments of $1,193,248.20 every year from 2011 through 2035, a total take of $29.8 million.
In January 2009, the Dodgers released Andruw Jones, who had hit .158/.256/.249 — detecting a trend yet? — in 75 games in the first year of a two-year, $36 million deal, and who was headed into his age-32 season. Los Angeles deferred $12 million of the $21.1 million he had remaining, spreading out the payments over six years (2009-2014). While Bonilla played just two more seasons, only one of which was remotely productive, Jones has had more success as an inexpensive part-time lefty-masher for the Rangers, White Sox and Yankees. Though he's nowhere near the player who won 10 Gold Gloves, made five All-Star teams and appeared headed for Cooperstown, he hasn't had a base salary of more than $2 million in any of the four seasons since.
If Bay can't resurrect his career in its entirety, he can hope to go the Jones route. One early possibility is with the Indians, where he would be reunited with incoming manager Terry Francona, who managed him in Boston. Cleveland's leftfielders hit just .215/.277/.321 last year, and it will be dipping into the winter market in one way or another to find a better solution. There's no guarantee Bay can provide that, but it will cost them almost nothing to find out.
- Comment help
- Get Livefyre
Recent Posts
- New Hall of Fame ballot weighty in talent and controversy
- JAWS: A look at the Pre-Integration Hall of Fame ballot, Part I
- Marvin Miller's exclusion a mark of shame for the Hall of Fame
- Longoria's deal a sensible one for Rays
- Free-agent Greinke should benefit from Yankees' signing of Kuroda
@jay_jaffe's Twitter
- @kacpdx yes, I think there are plenty of worthy candidates, including Bonds & Clemens. Not to excuse PED use, but has to be contextualized 35 minutes ago
- @YourSource123 absolutely should be considered, but it's not the bulk of a player's case and doesn't lend itself to easy quantification 40 minutes ago
- @kacpdx I don't have a vote yet. Need 10 years in the BBWAA, I have 2 so far. 40 minutes ago
- then it's a good thing they DFA'd Whiteside. Whew! RT @dturkenk: @jay_jaffe Jay, Mount Rushmore only has four heads 1 hour ago
- Bill Dickey, Yogi Berra, Thurman Munson, Jorge Posada and Eli Whiteside: the Mount Rushmore of Yankee catchers 1 hour ago
- November 2012
- October 2012
- September 2012
- August 2012
- July 2012
- June 2012
- May 2012
- A.J. Burnett
- Adam Greenberg
- Adrian Beltre


text:
You have no items in your shopping cart.
Items 1 to 12 of 53 total
Do you want to remove this product from your wishlist?
Click & Collect
Orders before 12PM get delivered the same day. Orders after 12PM get delivered the next day. A 2.500 KD charge applies. See Terms & Conditions.
You can order this item online and choose to collect it from one of the available X-cite stores. Be sure to collect it within a 48-hour period! See Terms & Conditions.