您的位置:首页 > 数据库 > MySQL

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

2015-06-16 18:51 483 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql