码迷,mamicode.com
首页 > 其他好文 > 详细

上课笔记第三十天DDL、DML、子查询

时间:2015-06-17 02:06:17      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:mysql

1、MySQL的DDL语句     
               MySQL中字符的大小写
                          SQL关键字及函数名不区字符大小写;
                          数据库、表、索引及视图的名称是否区分大小写取决于低层的OS及FS;
                          存储过程、存储函数及事件调度器不区分字符大小写;但触发器区分;
                          表别名不区分大小写;
                          字段中字符数据,类型为binary、blog、varbinary时区分大小写;其它的不区分;

              DDL:CREATE/ALTER/DROP 
                          CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
                          MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE ‘%char%‘; 
                          DROP {DATABASE | SCHEMA} [IF EXISTS] db_name  
                    表:
                          约束:PRIMARY KEY, UNIQUE KEY, FOREIGN KEY 
                          索引:特殊的数据结构,用于快速找到数据记录(行) 
                                    键可用作索引;并非所有索引都是键;
                          索引类型:B-Tree (B+ Tree) (左前缀), hash (key-value), R-Tree, FullText 
                          索引优点:
                                     减少服务器扫描数据量 
                                     创建索引后该字段本身就为排序后结果,查找时可以尽量避免排序时创建临时表  
                                     索引可以将随机I/O转换为顺序I/O  

              B-Tree (B+ Tree) (左前缀)索引:
                            全值匹配:比较操作符=、<=>
                            左前缀匹配:like ‘string%’
                            列前缀匹配:
                            匹配范围值:  
                            组合索引:第一列必须为精确匹配,之后可以为范围匹配。     

              聚集索引、非聚集索引
                          聚簇索引:索引和数据一起存放;
                          非聚簇索引:索引和数据分开存放,而数据记录未必顺序存放;但索引数据一般顺序存放;   
  
                          MyISAM为非聚集索引,InnoDB为聚集索引。 一个表只能有一个聚集索引,对InnoDB来说一般为主键索引,

              注意事项:
                         MyISAM是支持全文索引的,但不支持外键。InnoDB不支持全文索引。现在大多引擎为InnoDB ,只有InnoDb可以设置表空间 TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]

             常用命令:
                          help create | alter | drop;查看相关创建语句帮助。
                          show global variables like ‘%char%‘;:显示字符集
                          help create table: 查看创建表的相关信息
                          create temporary table test (name char(20));:创建临时表。临时表内存不能超16M,如超变为磁盘临时表,性能很差。
                          create table tb1 (name char(20),gender enum(‘m‘,‘f‘),primary key(name));  创建带主键的表 
                          create table tb2 (name char(20),gender enum(‘m‘,‘f‘),primary key(name)) engine ‘innodb‘;:修改存储引擎
                          create table tb5 select * from tb1;:把tb1中的表结构和数据 一起复制到tb5中,表中属性不复制。
                          create table tb3 like tb2;:复制tb2表结构创建新表tb3只复制表结构,并复制表中所有属性;
                          insert into tb1 values(‘xj‘,‘f‘),(‘tan‘,‘m‘),(‘zhang‘,‘m‘);:插入数据 
                          show index form tables;:显示索引
                          show global variables like ‘%storage%‘;:显示存储引擎。 
                          show engines;:查看当前支持的存储引擎。
                          show table status like ‘tb1‘\G:查看表的相关属性。

2、MySQL的DDL语及索引的使用策略
          help drop table tbname;:查看删除表的命令。

          常用语句:
                 alter table tb3 drop primary key;:删除主键。
                 alter table tb3 add index (gender);:在gender字段上添加索引。默认为b-tree索引。
                 alter table tb3 drop index name;:删除tb3表中name的索引。
                 alter table tb3 rename to tb4;修改tb3表名为tb4。
                 drop index index_name on tb_name;删除索引;

3、SELECT查询语句  DML
        insert into tb_name values、updata 、delete
        is null:字段为空
        is not null:字段不为空
        group by :分组
        having :指定分组后条件
        distinct: 去除重复值。select distinct name form tb5;

           注意:
               几乎所有的缓存,缓存内容都是key-value格式:
                      key: 查询语句的hash码;
                      value: 查询的语句的执行result;   

           聚合函数:
                 AVG(), SUM(), MAX(), MIN(), COUNT();having对聚合结果做过滤。
          
           连接查询:
                cross join:笛卡尔积,
                 inner join:内连接
                 outer join:外连接,分为lift outer join左外连接和right out join右外连接
                SELECT US.user_name,x.FK_ROLE_ID FROM USER US LIFT JOIN USER_ROLE x on US.PK_ID = x.FK_USER_ID
                 natural join:等值连接

           常用语句:
               update tb5 set name=‘xxxx‘ where name=‘xj‘;     
               update tb5 set gender=‘f‘ order by name limit 1;:只修改排序后的第一条用limit 1。
               show global variables like ‘query_cache%‘;:查询缓存大小,只要大于0的值都为开启缓存,0表示缓存关闭
               SELECT @@GLOBAL.query_cache_size;:也可以查看缓存是否启用。
               select current_time();:显示时间。
               SELECT @@GLOBAL.query_cache_type;:查询后有三种值(demand、on、off)      
                         demand:按需进行缓存,由用户决定哪些语句需要缓存,
                         on:又mysql决定哪些查询语句结果需要缓存。

4、子查询、视图及EXPLAIN
         联合查询:
                   SELECT statement UNION SELECT statement:把多个查询结果联合在一起为一个结果,字段数必须一样。

         视图:VIEW,存储下来的select语句
                  create view view_name as select * from tabel_name ;

          explain :分析执行的sql语句。肯以更具分析结果优化数据库。
                       explain select * from tb5\G

上课笔记第三十天DDL、DML、子查询

标签:mysql

原文地址:http://5990383.blog.51cto.com/5980383/1662463

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!