跟我一起学习MySQL技术内幕(第五版):(第二章学习日记4)
来源:互联网 发布:生命起源知乎 编辑:程序博客网 时间:2024/04/26 15:26
2.6.2.4使用其他表或查询结果来创建表
Create new_table_name like table_name;
这句命令创建了一个结构完全等于 table_name的新表,但是只是一个空的副本
行数据的填充
Create table new_table_name like table_name;Insert into new_table_name select * from table_name;
可以用insert 语句进行数据的填充。
另外也可以依据临时表的创建规则,创建临时副本 关键字:temporary
列数据的填充
Create table new_table_name select * from table_name where condition;
即可以直接使用select查询语句作为创建表的依据,并把数据填入其中
但是这里需要注意一下命名问题
假设我们的select语句中包含一个表达式,我们如上创建数据表的时候就会产生一个名为表达式的列名,
如果我们之后想要再次使用该列的时候 我们的select语句就需要 使用 ‘name_of_expression’ 作为列名,
这样会非常繁琐,所以我们应该在使用这类创建的时候,应该同时赋予别名(即使不是表达式,系统自动默认的列名有时也会非常奇怪)
Create table table_name select PI()*2 as new_column;Select new_column from table_name;
关于 create select还有一点需要注意
假设t1表和t2表都有一个列名为C在试图创建一个包含两列的表时程序会报错
Create table t3 select * from t1 inner join t2;ERROR ! Create table t3 select t1.c, t2.c as c2From t1 inner join t2;
所以通过赋予别名的方式可以避免重列名错误
注意:
Create table …… Select一点不足:它不会把原有表的全部数据复制到新的表中,例如上一个表中的索引,或者一些属性
其中不会丢失的有:not null,null,字符集和排序规则,默认值,列注释。
Select 还可以做到的是在创建的新表里强制使用某些属性的方法。
Create table mytable selectCast(1 as unsigned)as i,Cast (curtime() as time ) as t,Cast ( PI() as decimal (10,5 ) as d );
也可以
Create table mytable ( i int unsighed , t time , d decima ( 10,5 ) )Select1 as i,Cast ( curtime() as time ) as t,Case ( PI() as decimal (10,5) ) as d;
区别即匹配在转换同时,还是在转换前。
2.6.2.5使用分区表
分区表,可以让表的内容分散存储在不同的物理存储位置。
优点一:表存储可以在多个设备上,可以通过I/O并行机制来缩短访问时间。
优点二:优化器可以把本地搜索限定在个特定的分区,或者并行搜索多个分区。
具体的内容暂时不做介绍,这里也没有很具体的介绍,可以参考附录E
2.6.3删除表
总的来说就是一个drop关键字
Drop table table_name;Drop table table1,table2.....;Drop table if exists table_name;Drop temporary table table_name ;
其中第三句非常有用,放在脚本程序第一行,可以确保在程序开始运行的时候有一个“干净”的环境。
2.6.4索引表
MySQL 提供了多种灵活的索引创建方法。
1.可以对单个列建立索引,多列索引也被称为符合索引
2.索引可以只包含唯一值,也可以包含重复值。
3.可以为同一个表创建多个索引,帮助优化对表的不同类型的查询。
4.除enum 和set 以外的字符串类型,可以利用列的前缀创建索引。
Alter table table_name add index index_name (index_columns);Alter table table_name add unique index_name (index_columns);Alter table table_name add primary key (index_columns);Alter table table_name add fulltext index_name (index_columns);Alter table table_name add spatial index_name (index_columns);
Table_name是要添加索引的那个表的名字,index_columns是要进行索引的列(如果需要索引多个列,则需要用逗号隔开)
其中 primary key 和spatial 索引的列必须为not null
其中 primary key 和unique 索引可以限制索引,使其只包含唯一值。
(primary key 索引在每个表中只能有一个,而unique数量可以有多个。并且前者不可以包含null值,后者可以)
接下来介绍create index 语句
Create index index_name on table_name ( index_columns );Create unique index index_name on table_name (index_columns );Create fulltext index index_name on table_name (index_columns );Create spatial index index_name on table_name (index_columns);
另外在创建表时也可以同时创建index,
Create table table_name(.................. Index index_name (index_column), Unique index_name(index_column));
也可以使用如下命令
Create table mytable( I int not null r=primary key, J char(10) not null); OR( I int not null, J char(10)not null, Primary key (i), Unique(j) );
接下来的内容介绍了memory表,这里没有过多介绍
所以先介绍对字符串的前缀建立索引
Create table addresslist( Name char(30) not null, Address binary(60) not null, Index(name(10)), Index(address(15)));
其中10 15 表示的就是前缀的字符个数,即对前多少个字符建立索引。
在某些场合,必须要通过列前缀进行索引。如blog或text
同样,也有必须进行满列值索引,不能进行前缀索引。如fulltext
2.6.4.3删除索引
Drop index index_name on table_name;Drop index ‘primary’ on table_name;Alter table table_name drop index_name;Alter table table_name drop primary key;
其中二四表示删除主键索引。
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记4)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记1)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记2)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记3)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记5)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记6)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记7)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记8)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记9)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记10)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记11)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记12)
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记13)
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记4)
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记1)
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记3)
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记5)
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记6)
- Hadoop学习九:hdfs源代码调试
- 【红宝书笔记】 创建对象的几种方法
- cmd中添加中文字体
- Android_基础知识掌握
- bzoj3507【CQOI2014】通配符匹配
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记4)
- Ubuntu环境下安装myeclipse
- Python def函数的定义、使用及参数传递实现代码
- C++第三次作业
- bzoj3170【TJOI2013】松鼠聚会
- 二分算法problem1001
- 切入业务日志
- LeetCode 160. Intersection of Two Linked Lists
- iOS 通知传值(顺传)