guan

  博客园  :: 首页  :: 新随笔  :: 联系 ::  :: 管理

‘mysql’不是内部或外部命令,也不是可运行的程序或批处理文件。

解决:

  1.     配置坏境变量,指定mysql\bin目录
  2.     第次进入到mysql\bin目录,再运行mysql

 如何链接服务器

服务器地址(可用IP域名):端口(3306) 用户名   密码

Mysql -h localhost -u UserName -p password

    如: mysql -h localhost -u root -p 

           mysql -h localhost -u root -p 123456

           mysql -hlocalhost -uroot -p123456

-h如果不写,则默认连localhost

    如:mysql  -u root -p

 


 显示数据库 :show databases

information_schema 数据库的一些基本信息;mysql 关于用户的一些信息;performace_schema 性能优化的一些基本信息。

新建数据库:create database myDatabase chartset utf8

选中某个数据库:use myDatabase

  •  删除一个数据库:drop database test;  mysql的数据库名字不能修改
  • 显示表:show tables;
  • 新建一个表:create table class (ID int,name varchar(20),age tinyint(M),area varchar(20));
  • 删除一个表:drop database table1;
  • 修改一个表的名字:rename table oldName to newName; 
  • 显示表的所有字段:desc tableName;

\c退出当前语句

解决字符集问题:默认建表一般用utf-8,而我们在windows下窗口是GBK的,因些需要声音字符集:set names gbk

 给表插入一条数据:如 insert into msg (id,title,content) values (1,'标题","内容“);


 整型 

  • tinyint:默认是带符号位的(-128 到127);
  • tinyint unsigned: 不带符号位(0到255);
  • tinyint(M): 在0填充的时候才有意义, 只有在zerofill设置时才有意义,不影响数据泛微;
  • tinyint zerofill:0填充,默认无符号;
  • defalut:默认值;
  • not null:不能为空;

如:alert table msg add ages     tinyint(5)    zerofill    not null    default 0;

      creat table  msg (id tinyint(4) zerofill not null default 0,title varchar(20),content varchar(20)) charset utf8;


 浮点数

  • float(M,D):M代到总位数,D 代表小数位;
  • decimal(M,D):M代到总位数,D 代表小数位;decimal的精确度更高

如:float(4,2) 表示(99.99到 -99.99),float(4,2)unsigned 表示(0 到99.99);


 字符型 char、vachar、text

  • char(M):指定长M,
  • varchar(M):是变长M,最长为M;速度上char更快些;
  • text:文本类型,可以存比较大的文本段,搜索速度稍慢。text不用加时默认值,加了也没用。

 日期时间类型

  • year 年;(1901-2155年),如果输入2位,‘00-69’表示2000-2069,‘70-99’表示1970-1999
  • data类型:日期类型1000-01-01 到9999-12-31
  • time类型:典型格式 hh:mm:ss,日期类型范围:“-838:59:59”到“+838:59:59”
  • datatime类型:yyyy-MM-DD hh:mm:ss,范围:1000-01-01 00:00:00到9999-12-31 23:59:59
  • 时间戳:是1970-01-01:00:00:00到当前的秒数。一般存注册时间,商品发布时间等,羡慕不是用datetime存储,而是用时间戳。

注意:

在开发中,很少用日期时间类型来表示一个需要的精确到秒的列

原因:日期时间类型能精确到秒,而且 方便查看,但是不方便计算。用int存时间戳更方便计算

枚举类型enum(’男‘,’女‘);

id primary key auto_increment :主键、自动增长;


 左链接

select * from tba left join tbb on tba.catId=tbb.catId;左链接以左边表为主表,当不能在tbb表里面匹配到相关信息时,显示NULL.


 UNION

将两个表连接起来,要求连接的两个表列数一样,每列的类型一致。

select * from ta union select * from tb 


 视图

视图是表的查询结果,自然表的数据改变了,影响视图结果;

视图改变了,影响表,但是视图并不总是能增删改,只有当视图的数据与表的数据一一对应时才可以更改

注:插入视图时,视图必须包含表中没有默认值的列

  • 创建:create  algorithm= temptable view 视图名 as select 语句;
  • 使用: select * from 视图名;
  • 删除:drop view 视图名

视图的 algorithm=merge/temptable/undefined

  •  merge:当引用视图时,引用视图的语句与定义视图的语句合并。merge意味着视图只是一个规则,语句规则,当查询视图时,把查询视图的语句与创建时的语句where子句等合并,分析形成一条select语句。
  • templtable:当引用视图时,根据视图的创建语句建立一个临时表
  • undefined:未定义,自动、让系统帮你选。

字符集和校对集

某一个级别没有指定字符集则集成上一级的字符集。

  • 服务器,我给你发送的数据是什么编码的:set character_set_client=gbk;
  • 转换器,转换成什么编码:set character_set_connection=gbk;
  • 查询的结果是用什么编码:set character_set_results=gbk;

注:如果以上3者都为字符集N,则可以简写为set names N
出现乱码的情况:client声明与事实不符,results与客户端字符集不符的时候

校对集 collation 

create table tem(name varchar(10) ) charset utf8 collate utf8_bin;  指字符集的排序规则,一种字符集可以有一个或者多个排序规则。

注:声明的校对集必须是字符集合法的校对集

 


 触发器

四要素:监视地点、监视事件、触发时间、触发事件。

创建:create trigger triggerName after|before  insert|update|delete on 表名

           for each row       #行触发器,mysql里面是固定的

           begin   sql语句    end

注:    delimiter $      将结束符由‘;’改成‘$’符,修改语句不用加结束符

删除: drop trigger  triggerName;

查看: show triggers ;

  •  对于insert而言,新增的行用 new来表示,行中每一列的值用new.列名来表示。
  •  对于delete而言,删除的行用old来表示,行中的每一列的值用old.列名来表示。
  •  对于update而言,修改的行,修改前的用old来表示,修改后的值用new来表示。
delimiter $    //更改结束符为$,不用加结束符

create trigger tg1 after insert on goods      for each row

begin

update tb2 set num=num-1 where tb2.id=new.id;

end $

before例子:

create trigger tg2 befor insert on goods for each row

begin 

     if new.num >5  then

     set  new.much=5

     end if ;

     update g set num =num-new.muchh where id=new.gid;

end$

  

 


事务

事务指:一组操作,要么都成功执行,要么都不执行

事物的ACID特性:

  • 原子性(atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性;组成事务的所有查询必须:要么全部执行,要么全部取消(就像上面的银行例子)。
  • 一致性(consistency):指数据的规则,在事务前/后应保持一致。
  • 隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的。
  • 持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消。

存储引擎的种类和特点

显示所有的存储引擎:show engines;

指定存储引擎:create table tb (id int primary key auto_increment ) engine=innodb|myisam charset utf8;

 

 支持事务案例的数据库引擎才有事务

开启事务:start transaction ;  注意:两个start transaction,前面的那个就隐式的提交了

sql语句......

commit提交、 rollback回滚   //当一个事务commit\rollback就结束 了


 备份与恢复

增量备份、整体备份

系统自带的备份工具:mysqldump.exe,可以导出库也可以导出表

  • 导出一个库下面的所有表:mysqldump -u 用户名 -p 密码  库名> 地址/备份的文件名称 
  • 备份多个库的方法:mysqldump -u 用户名 -p 密码  库名1 库名2  库名3 > 地址/备份的文件名称 

如:mysqldump -uroot -p111111 mydatabase goods > D:\\goods.sql    // 导出mydatabase数据库下的goods表,会在D盘下生成一个SQL文件

  •  执行恢复:source    D:\\mydatabase.sql;
  • 对于表级的备份:use 库名  --------source 备份的文件地址

 


 

索引

  • 好处:加快了查询速度;
  • 坏处:降低了增、删、改的速度,增大了表的文件大小(索引文件甚至可能比数据文件还大)。

注意:大数据处理办法:先去掉索引,再导入,最后再统一加索引。

  1. 不能过度索引;
  2. 索引条件列(where 后面最频繁的条件比较适宜索引)
  3. 索引散列值,过于集中的值不要索引;如性别加索引,意义不大;

索引的类型:

  • 普通索引(index):仅仅是加快查询速度;
  • 主键索引(primary key):不能重复;主键必唯一,唯一索引不一定是主键,一张表只能有一个主键,可以有一个或多个唯一索引
  • 唯一索引(unique):行上的值不能重复;
  • 全文索引(fulltext)

查看索引:

        show index from 表名;

        show index from 表名 \G         //用另一种格式显示

建立索引:

        alter table 表名   add index|unique|fulltext【索引名】(列名);

         alter table 表名   add primary key   (列名);   //添加主键索引

 删除索引:

        alter table  表名  drop index 索引名;

        alter table 表名 drop primary  key; //删除主键

查询索引:

        select * from member where match (pro) against ("china");

        

        查询匹配度  select  id,email,   match (pro ) against ("china") from member;

        

        注:全文索引不针对非常频繁的词做索引,全文索引对中文意义不大


 

存储过程

     概念类似于函数,就是把一段代码封装起来,在封装语句里面,可以用if/else,case,while等控制结构,可以进行sql编程。

  • 查看:show procedure status 或 show procedure status \G;
  • 删除:drop procedure 存储过程名字 ;
  • 使用:call 存储过程名字;
delimiter $
create procedure p(n int)
    begin
declare i int;
declare s int;
set i=1;
set s=0;
while i<=n do
set s=s+i;
set i=i+i;
end while;
select s;
end$
call p(5)$ //调用

 

 

posted on 2019-02-12 16:00  麦田里的包米  阅读(10787)  评论(0编辑  收藏  举报