- B
- C
- D
- E
- F
- I
- N
- R
- S
-
- show_variable,
- strict_mode?,
- supports_advisory_locks?,
- supports_bulk_alter?,
- supports_common_table_expressions?,
- supports_datetime_with_precision?,
- supports_explain?,
- supports_expression_index?,
- supports_foreign_keys?,
- supports_index_sort_order?,
- supports_indexes_in_create?,
- supports_insert_on_duplicate_skip?,
- supports_insert_on_duplicate_update?,
- supports_optimizer_hints?,
- supports_transaction_isolation?,
- supports_views?,
- supports_virtual_columns?
| ER_CANNOT_ADD_FOREIGN | = | 1215 |
| ER_CANNOT_CREATE_TABLE | = | 1005 |
| ER_DATA_TOO_LONG | = | 1406 |
| ER_DO_NOT_HAVE_DEFAULT | = | 1364 |
| ER_DUP_ENTRY | = | 1062 |
| ER_FILSORT_ABORT | = | 1028 |
See dev.mysql.com/doc/refman/5.7/en/error-messages-server.html |
||
| ER_FK_INCOMPATIBLE_COLUMNS | = | 3780 |
| ER_LOCK_DEADLOCK | = | 1213 |
| ER_LOCK_WAIT_TIMEOUT | = | 1205 |
| ER_NOT_NULL_VIOLATION | = | 1048 |
| ER_NO_REFERENCED_ROW | = | 1216 |
| ER_NO_REFERENCED_ROW_2 | = | 1452 |
| ER_OUT_OF_RANGE | = | 1264 |
| ER_QUERY_INTERRUPTED | = | 1317 |
| ER_QUERY_TIMEOUT | = | 3024 |
| ER_ROW_IS_REFERENCED | = | 1217 |
| ER_ROW_IS_REFERENCED_2 | = | 1451 |
| NATIVE_DATABASE_TYPES | = | { primary_key: "bigint auto_increment PRIMARY KEY", string: { name: "varchar", limit: 255 }, text: { name: "text" }, integer: { name: "int", limit: 4 }, float: { name: "float", limit: 24 }, decimal: { name: "decimal" }, datetime: { name: "datetime" }, timestamp: { name: "timestamp" }, time: { name: "time" }, date: { name: "date" }, binary: { name: "blob" }, blob: { name: "blob" }, boolean: { name: "tinyint", limit: 1 }, json: { name: "json" }, } |
By default, the Mysql2Adapter will consider all columns of type tinyint(1) as boolean. If you wish to disable this emulation you can add the following line to your application.rb file:
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans = false
Returns the database character set.
Returns the database collation strategy.
Create a new MySQL database with optional :charset and :collation. Charset defaults to utf8mb4.
Example:
create_database 'charset_test', charset: 'latin1', collation: 'latin1_bin'
create_database 'matt_development'
create_database 'matt_development', charset: :big5
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 252 def create_database(name, options = {}) if options[:collation] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT COLLATE #{quote_table_name(options[:collation])}" elsif options[:charset] execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET #{quote_table_name(options[:charset])}" elsif row_format_dynamic_by_default? execute "CREATE DATABASE #{quote_table_name(name)} DEFAULT CHARACTER SET `utf8mb4`" else raise "Configure a supported :charset and ensure innodb_large_prefix is enabled to support indexes on varchar(255) string columns." end end
Drops a table from the database.
:force-
Set to
:cascadeto drop dependent objects as well. Defaults to false. :if_exists-
Set to
trueto only drop the table if it exists. Defaults to false. :temporary-
Set to
trueto drop temporary table. Defaults to false.
Although this command ignores most options and the block if one is given, it can be helpful to provide these in a migration's change method so it can be reverted. In that case, options and the block will be used by create_table.
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 327 def drop_table(table_name, options = {}) execute "DROP#{' TEMPORARY' if options[:temporary]} TABLE#{' IF EXISTS' if options[:if_exists]} #{quote_table_name(table_name)}#{' CASCADE' if options[:force] == :cascade}" end
Executes the SQL statement in the context of this connection.
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 186 def explain(arel, binds = []) sql = "EXPLAIN #{to_sql(arel, binds)}" start = Concurrent.monotonic_time result = exec_query(sql, "EXPLAIN", binds) elapsed = Concurrent.monotonic_time - start MySQL::ExplainPrettyPrinter.new.pp(result, elapsed) end
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 379 def foreign_keys(table_name) raise ArgumentError unless table_name.present? scope = quoted_scope(table_name) fk_info = exec_query(<<~SQL, "SCHEMA") SELECT fk.referenced_table_name AS 'to_table', fk.referenced_column_name AS 'primary_key', fk.column_name AS 'column', fk.constraint_name AS 'name', rc.update_rule AS 'on_update', rc.delete_rule AS 'on_delete' FROM information_schema.referential_constraints rc JOIN information_schema.key_column_usage fk USING (constraint_schema, constraint_name) WHERE fk.referenced_column_name IS NOT NULL AND fk.table_schema = #{scope[:schema]} AND fk.table_name = #{scope[:name]} AND rc.constraint_schema = #{scope[:schema]} AND rc.table_name = #{scope[:name]} SQL fk_info.map do |row| options = { column: row["column"], name: row["name"], primary_key: row["primary_key"] } options[:on_update] = extract_foreign_key_action(row["on_update"]) options[:on_delete] = extract_foreign_key_action(row["on_delete"]) ForeignKeyDefinition.new(table_name, row["to_table"], options) end end
Drops the database specified on the name attribute and creates it again using the provided options.
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 331 def rename_index(table_name, old_name, new_name) if supports_rename_index? validate_index_length!(table_name, new_name) execute "ALTER TABLE #{quote_table_name(table_name)} RENAME INDEX #{quote_table_name(old_name)} TO #{quote_table_name(new_name)}" else super end end
Renames a table.
Example:
rename_table('octopuses', 'octopi')
SHOW VARIABLES LIKE 'name'
See dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html for more details.