MySql高级二

一、库的创建及修改:

create database [if not exists] db_anme [default] [character set=''] [collate=''];


drop database if exists db_name;


alter database db_name [default] [character set=''] [collate=''];



二、表创建:

1、第一种:

create table [if not exists] tbl_name (col_name type/constraint...) 


[options如 engine=MyISAM/InnoDB,character set='',collate='',comment='注释']


如:

create table t2 (name varchar(50) not null ,age int unsigned not null ,primary key (name,age));

create table t2 (name varchar(50) not null ,age int unsigned not null) 

     engine='InnoDB',character set='utf8',comment='学生表';


2、第二种(复制表数据):

create table [if not exists] tbl_name  select语句。

这种方式创建的表会将select语句查询的结果数据插入到新创建的表tbl_name中,

但无表结构的属性定义(desc表即可看到)。


3、第三种(复制表结构):

create table [if not exists] tbl_name like old_tbl_name;

这种方式创建的表会将表结构的属性定义完全复制到新表,即新表和老表的结构完全一致,但不复制数据。


三、mysql数据库目录以及数据目录:


1、MyISAM表:每张表有三个文件,都位于数据库目录中:

tb_name.frm:表结构定义。

tb_name.MYD:数据文件。

tb_name.MYI:索引文件。


2、InnoDB表:有两种存储方式。


(2.1)、默认:每表有一个独立表结构定义文件和一个多表共享的表空间文件。

tb_name.frm:表结构定义文件,位于数据库目录中。

ibdata#:共享的表空间文件(存储所有库的数据文件),默认位于数据目录中(datadir中)

(2.2)、独立的表空间,推荐使用这种存储方式,这样方便对某个单独的库进行备份、恢复等。

tb_name.frm:每表有一个表结构文件。

tb_name.ibd:一个独立的表空间文件。

注:启用独立的表空间方法,在vi /etc/my.cnf 中的[mysqld]段加InnoDB_file_pre_table=ON即可。

对于使用InnoDB最好在 /etc/my.cnf 添加此项。



四、Mysql连接查询、子查询联合查询

1、交叉连接(笛卡尔积,无任何条件,效率低下很少使用,联结后的记录数=A表记录数*B表记录数)

select * from A ,B

2、内连接(自然连接):

等值连接:

只显示A.ID=B.ID相等的记录,select * from A ,B where A.ID=B.ID

条件比较:

3、外连接:

左外连接

右外连接

4、自连接:顾名思义,自己连接自己。


5、子查询:在查询中嵌套的查询。


6、联合查询 union:

把两个或多个语句的查询结果合并为一个结果输出

(前提是各个语句的查询结果的字段个数和类型要一致)。


五、视图:存储下来的select语句。


1、创建视图:create view view_name as select 语句。


2、删除视图:drop view view_name;


六、用户、权限管理:


1、创建用户:create user  '用户名'@'主机' [identified by '密码'];

也可以用insert sql往mysql.user中插入数据。


2、修改用户名:rename user '用户名1'@'主机' to '用户名2'@'主机';

也可以用update sql语句修改mysql.user表中的数据。


3、删除用户:drop user '用户名'@'主机';

也可以用delete sql语句删除mysql.user表中的数据。


4、设置密码:set password for '用户名'@'主机'=password('密码');


5、授权:

grant 权限类型 on 库.表/函数/存储过程 to '用户名'@'主机' [ identified by 'testpass'];

如:

将mydb库的students表对testuser授权:

grant all on mydb.students to 'testuser'@'192.168.*.*' identified by 'testpass';

将所有库的所有表/函数/存储过程 对testuser授权:

grant all on *.* to 'testuser'@'192.168.*.*' identified by 'testpass';

备注--权限类型:

(1)、管理类权限:create user,file,show databases,super,

  reload,shutdown,processlist,replication slave,

  replication client,lock tables;

(2)、库级别和表级别权限:alter,create,create view,drop,execute,

index,grant,show view

(3)、数据操作(表级别):select,insert,update,delete

(4)、字段级别:select(col1,...),insert(col1,...),update(col1,...)

6、查看某个用户的权限:

   show grants for '用户名'@'主机';


7、收回权限:revoke 权限类型 on 库.表/函数/存储过程 from '用户名'@'主机';

如:将收回用户'testuser'@'localhost'所有权限。

revoke all on *.* from 'testuser'@'localhost';


8、mysql库中与用户授权相关的表:

db:库级别的权限。

tables_priv:表级别的权限。

colomns_priv:列级别的权限。

procs_priv:存储过程和存储函数相关的权限。

proxies_priv:代理用户相关的权限。



七、truncate:

删除表中所有数据后,恢复自动增长字段为0的方法:truncate tb_name


八、存储引擎:


1、存储引擎:表级别的类型


2、查看表存储引擎的方法:

(1)、mysql> show table status in mydb where name='classes'\G;

*************************** 1. row ***************************

 Name: classes 表名

 Engine: InnoDB  存储引擎

 Version: 10      表的当前版本(多版本并发)

 Row_format: Compact 行格式

 Rows: 4       表中的数据行数

 Avg_row_length: 4096    平均每行包含的字节数

 Data_length: 16384   表中数据的总字节数

 Max_data_length: 0 表能够占用的最大空间,单位字节

 Index_length: 0 索引的大小,单位字节

 Data_free: 8388608  

 Auto_increment: 5  下一个Auto_increment值

 Create_time: 2015-12-24 18:35:10 表的创建时间

 Update_time: NULL 表数据最近一次的修改时间

 Check_time: NULL 使用check table 或 myisamchk最近一次检测表的时间

 Collation: utf8_general_ci 排序规则

 Checksum: NULL  

 Create_options: 创建表时指定的选项。

 Comment: 表的注释

(2)、mysql>use mydb;

  mysql> show table status like 'classes'\G;

*************************** 1. row ***************************

  Name: classes

  Engine: InnoDB

  Version: 10

  Row_format: Compact

  Rows: 4

  Avg_row_length: 4096

  Data_length: 16384

  Max_data_length: 0

  Index_length: 0

  Data_free: 8388608

  Auto_increment: 5

  Create_time: 2015-12-24 18:35:10

  Update_time: NULL

  Check_time: NULL

  Collation: utf8_general_ci

  Checksum: NULL

  Create_options: 

  Comment: 

3、InnoDB存储引擎的特性:

(1)、支持事务:事务日志。

(2)、支持外键

(3)、MVCC

(4)、支持聚簇索引也叫聚集索引,因聚簇索引的索引文件和数据文件放置到一起,因此聚簇索引只能有一个,

  一般用主键做聚簇索引。那么,其他非聚簇索引通常称为辅助索引

  (辅助索引的索引文件和数据文件不放置到一起),辅助索引可以有多个。

(5)、支持热备份,前提是表存储时使用独立表空间。

(6)、支持行级锁。

4、MyISAM存储引擎的特性:

(1)、不支持事务。

(2)、不支持外键。

(3)、不支持行级锁,支持表级锁。

(4)、支持全文索引。

(5)、适用场景:读多写少、数据较小的表;能容忍崩溃后的修改操作和数据丢失。

5、ARCHIVE存储引擎的特性:

(1)、仅支持insert和select,支持很好的压缩功能。

(2)、适用于存储日志信息或者其它按时间序列实现的数据采集类的应用。

(3)、不支持事务和索引。

6、第三方的存储引擎:

(1)、XtraDB:增强版的InnoDB,由Percona提供;

    编译安装时,下载XtraDB的源码替换为Mysql存储引擎中的InnoDB的源码。

(2)、TokuDB:使用Fractal Trees索引,性能很高,特别适用于存储大数据的表,

  已被引入到新版的MariaDB中。

(3)、PBXT:MariaDB自带此存储引擎,对SSD硬盘提供适当的支持,

   支持事务、MVCC、外键约束等,性能也比较高。


你可能感兴趣的:(mysql)