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必须加,否则将显示具体数据而不是结构