跟我一起学习MySQL技术内幕(第五版):(第二章学习日记5)

2.6.5更改表结构
2.7获取数据库元数据
2.7.1使用show语句获取元数据
2.7.2借助information_schema获取元数据
2.7.3从命令行获取元数据

Alter table table_name action.......;

(1)更改列的数据类型

   Alter table mytable modify i mediumint unsighed ;


   Alter table mytable change i i mediumint unsighed;
在使用change子句时列名需要写两遍,因为change 子句能够做到一句modify子句无法做到的事情,即在更改数据类型的同时将该列重新命名。所以如果不想更改列名,就需要将列名写两遍。

如果想要更改列名 可以使用 change old_name new_name,后边紧跟列的当前定义。
更改数据类型的原因,是要提高多表连接的查询效率,如果连接的两个列数据类型完全相同的话,比较速度会比较快。

(2)让表使用另一种存储引擎

  Alter table table_name engine=engine_name;

选择一种引擎或者更换一种引擎要注意的几点:
1.让它具有事务安全的特性。
2.能否达到最终目的:两种存储引擎中功能能否兼容
3.innoDB表的外键约束在别的引擎中将不再被支持。
4.memory表存储在内存之中,在服务器退出之后会消失。

(3)重新命名表
用rename子句可以为表指定一个新的名字

Alter table table_name rename to new_table_name;

Rename table table_name to new_table_name;

其中rename table 语句可以同时对多个表进行重新命名。

rename table table1 to name1,table2 to name2; 

如果表名前边限定了数据库名,则可以实现表在数据库之间的转移

Alter table sampdb.t rename to test.t;
Rename table sqmpdb.t to test.t;

2.7获取数据库元数据
1.使用show语句获取元数据
列出可以访问的数据库:

Show database

显示数据库的create database 语句:

Show create database database_name;

列出默认或给定数据库里的表:

Show tables; Show tables from database_name;

不包含temporary表。

显示表的create table语句:

Show create table table_name;

显示表里的列或索引信息:

Show columns from table_name;
Show index from table_name;

语句describe table_name ,explain table_name,show columns from table_name
是同一个意思.

显示数据库或某给定数据库里的表描述信息:

Show table status;
Show table status from database_name;


Show … Like ‘pattern’
可以通过一个模式来限制show语句的输出范围。MySQL 会将‘pattern’解释成一个允许包含通配符的SQL 模式

Show columns from student like ’ s% ’;

这条命令会把student表里名字以s开头的所有列显示出来。

如果在like模式里使用通配符本身,则可以在它的前面加一个反斜线进行转义。

除此之外,show ….. like还可以用来识别某个给定的表是否存在。

Show tables like ‘ table_name ’;
Show tables from database_name where false;

2借助information_schema获取元数据

Inforamtion_schema库是一个虚拟的库,其中的表是各种不同数据库元数据的视图。
显示如下:

Show tables in information_schema;
---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| OPTIMIZER_TRACE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| TABLES |
| TABLESPACES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| INNODB_LOCKS |
| INNODB_TRX |
| INNODB_SYS_DATAFILES |
| INNODB_LOCK_WAITS |
| INNODB_SYS_TABLESTATS |
| INNODB_CMP |
| INNODB_METRICS |
| INNODB_CMP_RESET |
| INNODB_CMP_PER_INDEX |
| INNODB_CMPMEM_RESET |
| INNODB_FT_DELETED |
| INNODB_BUFFER_PAGE_LRU |
| INNODB_SYS_FOREIGN |
| INNODB_SYS_COLUMNS |
| INNODB_SYS_INDEXES |
| INNODB_FT_DEFAULT_STOPWORD |
| INNODB_SYS_FIELDS |
| INNODB_CMP_PER_INDEX_RESET |
| INNODB_BUFFER_PAGE |
| INNODB_CMPMEM |
| INNODB_FT_INDEX_TABLE |
| INNODB_FT_BEING_DELETED |
| INNODB_SYS_TABLESPACES |
| INNODB_FT_INDEX_CACHE |
| INNODB_SYS_FOREIGN_COLS |
| INNODB_SYS_TABLES |
| INNODB_BUFFER_POOL_STATS |
| INNODB_FT_CONFIG |
+---------------------------------------+
59 rows in set (0.13 sec)

如果想要确定某个给定的information_schema里表都包含有那些列,则可以使用语句

show columns,或者describe

describe information_schema.character_sets; 

显示如下

+----------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra | +----------------------+-------------+------+-----+---------+-------+
| CHARACTER_SET_NAME   | varchar(32) | NO   |     |         |       |
| DEFAULT_COLLATE_NAME | varchar(32) | NO   |     |         |       |
| DESCRIPTION          | varchar(60) | NO   |     |         |       |
| MAXLEN | bigint(3) | NO | | 0 | | +----------------------+-------------+------+-----+---------+-------+
4 rows in set (0.09 sec)

如果想要显示某个表的信息。可以使用select语句(可以使用 where condition)。

这里出现了多次counts(*),这是用来计数,计数满足条件的行出现的次数。

3.从命令行获取元数据

%  mysqlshow
%  mysqlshow  database_name
%  mysqlshow  database_name  table_naem
%  mysqlshow  --keys database_name table_name
%  mysqlshow  --status database_name
%  mysqldump  --no--data database_name

1.列出数据库里的表
2.显示表里的列信息
3.显示表里的索引信息
4.显示数据库里所有表的描述性信息
5.6.显示create table 的表结构 其中第六句–no–data必须加,否则将显示具体数据而不是结构

你可能感兴趣的:(mysql)