sql(Structure Query Language)结构化查询语言

sql语句划分为以下三类
DDL(data definition languages)数据定义语言  定义不同的数据段,表,列,索引,关键字包括create,drop,alter;
DML(data manipulation language)数据操作语句   用于添加,删除,更新和查询数据库记录并检查数据完整性,关键字包括insert,delete,update,select;
DCL(data control language)数据控制语句    控制不同数据段直接的许可和访问级别的语句,这些语句定义了访问权限和安全级别,关键字包括grant,revoke.

create database test1;   创建数据库test1
show databases;          显示数据库
#其中里面infomation schema:主要存储一些数据库对象信息,如表信息,权限信息,字符集信息等
 duster:存储了系统集群信息
 mysql:存储了系统用户权限的信息
use test1;     打开数据库test1
show tables;     显示表test1
drop database test1;     删除数据库test1

create table emp (ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));  创建表emp
desc emp;         显示表
show create table emp \G;   查看表的定义,查看表的存储引擎,字符集信息
drop table emp;   删除表emp

alter table emp modify ename varchar(20);   修改表的ename字段
alter table emp add column age int(3);      增加age字段
alter table emp drop column age;        删除age字段
alter table emp change age age1 int(4);     字段改名age 改为age1
alter table emp rename epm1;       表改名emp改为emp1
insert into emp (ename,hiredate,sal,deptno) values('zzx1','2003-02-01','3000',2);   插如表的字段
update emp set sal=4000 where ename='lisa';      将ename为lisa的薪水sal从3000改为4000
delete from emp where ename='dony';    将名为dony的记录全部删除
select * from emp;     查询表里所有记录
select * from emp order by sal limit 1,3;   显示表中按照sal排序后从第二条记录开始,显示三条记录
聚合操作
fun_name表示要做的聚合操作,聚合函数常用的有sum(求和),count(*)记录数,max,min
group by 表示要进行分类聚合的字段
with rollup 表明是否对分类聚合后的结果进行再汇总
having 表示对分类后的结果再进行条件的过滤
select count(1) from emp;      emp表中统计公司的总人数
select deptno,count(1) from emp group by deptno;    统计各个部门的人数
select deptno,count(1) from emp group by deptno having count(1)>1;  统计人数大于1的部门
select sum(sal),max(sal),min(sal) from emp;    统计公司所有员工薪水总额,最高和最低薪水
子查询
用于子查询的关键字包括in,not in,=,!=,exists,not exists
select * from emp where deptno in(select deptno from dept);   从emp表中查询出所有部门在dept表中的所有记录
记录联合
将emp和dept表中的部门编号的集合显示出来
mysql>select * from emp;
mysql>select * from dept;
mysql>select deptno from emp
    →union all
    →select deptno from dept;

创建一个数据库用户z1,具有对sakila数据库中所有表的select/insert权限
grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';
权限变更,需要将z1的权限变更,收回insert,只能对数据进行select操作
#mysql -uroot
#revoke insert on sakila.* from 'z1'@'localhost';
show variables like 'table_type';       查看当前的默认存储引擎
两种方法查询当前数据库支持的存储引擎
1.SHOW ENGINES \G
2.SHOW VARIABLES LIKE 'have%';

在创建新表的时候,可以通过增加engine关键字设置新建表的存储引擎,如下面,表ai就是MyISAM存储引擎的,而country表就是InnoDB存储引擎的
CREATE TABLE ai (i bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY(i)) ENGINE=MyISAM DEFAULT CHARSET=gbk;
CREATE TABLE country (country_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,country VARCHAR(50) NOT NULL,last_update TIMESTAMP NOT NULL DEEAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (country_id))ENGINE=InnoDB DEFAULT CHARSET=gbk;
MyISAM
是默认的存储引擎,不支持事务,也不支持外键,优势是访问的速度快
每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,但扩展名分别是
.frm(存储表定义);      .MYD(MYData,存储数据);         .MYI(MYIndex,存储索引)
InnoDB
它提供了具有提交,回滚和崩溃恢复能力的事务安全,但是对比myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引      
InnoDB存储表和索引有两种方式,使用共享表空间存储,这种方式创建的表的表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件

#############################################################################################################

数据库备份
备份所有的数据库mysqldump -uroot -p --all-database > all.sql
备份数据库test:mysqldump -uroot -p test > test.sql
备份数据库test下的表emp:mysqldump -uroot -p test emp dept > emp_dept.sql
备份数据库test下的所有表为逗号分割的文本,备份到/tmp:  mysqldump -uroot -T /tmp test emp --fields-terminated-by','
注意:
为了保证数据备份的一致性,MyISAM存储引擎在备份的时候需要加上-l参数,表示将所有的表加上读锁,在备份期间,左右的表将只能读不能进行数据更新,但是对于事务存储引擎(InnoDB和BDB),可以采用更好的选项--single-transaction,此选项将使得InnoDB存储引擎得到一个快照(Snapshot),使得备份的数据能够保证一致性

############################################################################################################