当前位置:Gxlcms > 数据库问题 > MySQL笔记

MySQL笔记

时间:2021-07-01 10:21:17 帮助过:3人阅读

一 数据库基础

 oracle,mysql,sqlserver是三大关系型数据库;

  基本元素:数据库,表,列和数据类型(数值,字符,日期,文本),行,主键(必须有一个主键,每行主键值不相同,主键值不能为空),外键(是另一个表的主键,表示这是那个表的从键,数值要保持一致)

  mysql是C/S架构:客户端起到服务端与用户之间的桥梁作用,将用户操作的请求给服务端,将服务端的处理结果返回给用户;

  开关mysql服务:控制面板的服务中进行开关,或者cmd中net start mysql;net stop mysql;//windwos, service mysql start; service mysql stop//linux;

  连接数据库:workbench--database--connect to database, cmd--切换安装bin目录--mysql -uroot -p123;

二 数据库语言

 数据库定义和操作语言:

 show databases; //查看有哪些数据库;

 create database 数据库名; //创建数据库

 use 数据库名;//使用数据库

 drop database 数据库名;//删除数据库

 

 show tables; #查看数据库所有的表

 create table 表名 #创建一个表

 (

  列名 数据类型 约束;

  ...

  );

 show create table 表名;#查看创建此表的脚本语句

 desc 表名;#查看表结构

 rename table 旧表名 to 新表名;#修改表名

 列操作:

 alter table 表名 add 列名 类型 参数;#增加表中列

 alter table 表名 modify 列名 新类型 新参数; #修改列类型或参数;

 alter table 表名 change 旧列名 新列名 新类型 新参数;#修改列名或类型或参数; 

 alter table 表名 drop 列名; #删除列;

 alter table 表名 add index 索引名 列名:#为一个或多个列创建索引

 alter table 表名 add constraint 约束名 Foreign Key(列名)references 主表名(主表列名);#创建某列为外键 


 行操作:

 select 列名,。。from 表名 where 条件; #按条件查询

 insert into 表名(列名1,..)values(列值); #插入一条记录,指定列名赋值

 upate 表名 set 列=列值 where 条件 #按条件修改行的某列对应值

 delete from 表名 where 条件;#按条件删表记录

 truncate table 表名;#删除表后重建表架构

 drop table 表名;#删除表

 

 数据库控制语言:

 show status; #查看mysql数据库状态

 show grants; #查看用户权限,show grants for 用户名

 show errors; #查看错误信息

 show warnings;#查看报警信息

 

三、注意点:

 1.select distinct 列1,列运算或函数 as 别名 from 表名 where 运算或函数 group by 条件 having 条件 order by 列1,列2 desc/asc limit(n,m); # group by与having配套是按组查询,where是按行查询,order默认是升序asc,最大值除max()外还可以 order by desc limit 1降序取1条即为最大值的一条记录,最小值除min()外还可以order by asc limit 1 升序取1条即为最小的一条记录;

 2.如果一个查询的结果作为另一个查询的条件,可以用子查询嵌套。一般是主从表之间的关联查询,视图,索引,自连接比多表查询效率高

 3.where条件支持的操作符:=,>,<,>=,<=,<>,!=,between and ,and,or,(),is null,in,not between and,is not null,not in,like,regexp;#in比between and的效率高

 4,通配符:

  like:%指代0个或多个字符,_指代1个字符; 

 5.regexp:

 ‘200|100‘,200和100任取一个串

 [],中括号内任匹配一个字符,

 [^]不匹配中括号内任一字符,

 [0-9],[a-z]匹配一个范围,

 \\,特殊字符转义符,如小数点,\\.

 字符集:[:alnum:][:alpha:][:blank:][:digit:][:xdigit:][:upper:][:lower:],

 [:xdigit:]代表任意16进制数;

 *,0个或多个,+,1个或多个,?,0或1个,{n},n个,{n,}n个或以上,{n,m},n个到m个;

 ^,文本开始如^a以开始的文本,^放中括号里面就是取反外面就是文本开始,

 $,文本结束如5$以5结束,

 [[:<:]]词的开始,[[:>:]]词的结尾,

 6.like与regexp的区别:

 like是对整个字符串的匹配,regexp只需要匹配包含的部分;

 like匹配内容来自于表,regexp的匹配内容可以不来自表可以是其他指定文本内容;

 7.group by主要是用来做集合统计,别名的作用是简化查询或进行列运算;

 8.函数:concat(列1,列2,列3,...)字符拼接,=,-,*,/

  聚集函数:max(),min(),avg(),sum(),count();

  流程函数:if(value条件,ture值,false值),value条件为真取真值,为假取假值;

        ifnull(value1,value2);

        case when then else end;

  文本函数:right(),left(),返回右边或左边几个字符,

        length(),返回字符串长度;

        Rtrim(),Ltrim(),去掉右边或左边的空格

        upper(),lower(),转成大写或小写字母;

       locate(),返回子串位置

 日期与时间函数:  adddate(),addtime(),year(),month(),day(),hour(),minute(),second(),date(),time(),dayofweek  () ,curdate(),curtime(),datediff(),日期之差,date_format(),以yyyy-mm-dd格式返回日期,

 算术函数:ads()取绝对值,sqrt()平方根,mod()取余数,exp()取指数,sin()cos()取  角sin/cos值,rand()随机数,pi()取圆周率,

 9.表连接:是有外键关联的两个表的连接,没有外键关联的将做笛卡尔乘积次匹配连接;

 内连接(等值连接)inner join on:值相等匹配才连接,

 外左连接:左表全显示,表a left join 表b on 条件

 外右连接:右表全显示,right join on

 自连接:用别名在同一个表中做连接;将两条查询语句用自连接效率高于子查询嵌套

 联合查询:union,选择的是同样的列,是结果的合并;

 10.视图:是虚拟表,没有数据,只是一个存储方式,视图名字唯一,来源可以是一个或过个表,也可  以是一个或多个视图,可以和表一起用,可以order by,必须要先开视图权限,不能索引,不能触发  器,不能默认值;

   create view 视图名 as 条件;

   show create view 视图名,#查看创建视图的脚本语句

   show table status where comment=‘view‘,查询视图信息,或show tables的结果中也包含视图,

   无更新视图,需先删视图再创建视图来达到修改的目的;

   drop view 视图名,删除视图

   视图的增删改时同时也对基表进行了修改;如不能识别基表对应的值则不能修改基表,如用了分组、算术运算、函数等的视图的加工后的列值,无法找到对应基表数据进行修改;

  11.存储过程:让用户自定义函数完成特定功能,模块化调用,简单,安全,高效,相当于批处理;

    delimiter //  临时将分界符:转义为//

   create procedure(in 变量名 类型,out 变量名 类型,inout 变量名 类型) #in,out参数不用@

    begin

    end;

    delimiter ;  恢复分界符定义

    调用: call 存储名()

    删除:drop procedure 存储名()

   查看存储:show procedure status where db =‘数据库名‘;

   mysql里面变量要用@,定义变量 declare 变量名 类型,设置变量 set @变量名 = 值,显示变量 select @变量名;

  12.游标:存储过程中使用的一个查询结果集,应用程序可以根据需要滚动或浏览其中数据,用于交互式应用中;存储过程结束游标消失

 申明 declear cursor for select from where  

 打开 open 游标名

 使用 fetch 游标名 into 变量名 # 每fetch一次取得一个数据,多个数据需要多次fetch,                     read_loop:loop #此处没有分号

                 end loop;

 关闭 close 游标名

 13.触发器:用来监控insert,update,delete三个操作的响应器,before和after都可以设置触发器,故共6种触发器;

  创建,前或后触发器,所在表,每行插入/更新/删除:create trigger tg1 before insert on 表名 for each row 三种语句 ;

  触发器只针对表不针对视图,不返回记录必须赋值给变量:

 select into @result;#查询的返回值赋给result变量

 insert NEW.列名 into @result,select @result;#插入的值赋给result变量

 delete OLD.列名 into @result;select @result;#删除的值赋给result变量

 insert into s valuse(@result); select * from s; #将结果记录生成一个新表s,显示插入记录;

 查看触发器:show triggers;

 14.事务:原子性,一致性,持久性,隔离性;要么成功要么失败不允许插入其他事务和异常结果;

 只支持innoDB,不支持ISAM数据库引擎;

 (innoDB比ISAM的查询速度慢,但是支持事务、外键、锁比ISAM功能强大)

 申明事务开始:start transaction;

 自动提交设置:set_autocommit =0禁止自动提交, set _autocommit=1;开启自动提交

 回滚:rollback; rollback to savepoint1;

 提交:commit;

 保留点:savepoint 保留点;

 15.索引:用于快速按照条件定位到查询记录,用在where子句;分普通索引,唯一索引,主键索引,单列或多列索引;经常用来被查询的放在where子句里面的列适合做索引,不经常被查的不适合做索引,like ‘%abc’太泛泛了不适合做索引,like ‘abc%‘适合做索引

 普通索引:create index 索引名 on 表名;alter table 表名 add index 索引名,在创建表时申明index(列名1,..)

 唯一索引:所有值只能出现一次不能重复,unique index,其他语句语法与普通索引一样;

 主键:是一种唯一索引,alter table 表名 add primary key(列名);创建表时申明主键; 

 单列索引:申明一列索引,多列索引:申明多列组合为一个索引;

 16.用户管理:

 创建用户:create user jack@localhost identified by ‘123’;‘jack‘@‘%‘表示任何IP地址访问

 重命名用户:rename user jack@localhost to peter@localhost;

 修改用户密码:(1)update user set password=password(‘‘) where user=‘jack‘;

           (2) set password for jack@localhost=password(‘’);

 删除用户:drop user ‘Jack’@‘%’;

 查看用户及权限:show grants for ‘jack‘@‘%‘;

 授予权限:grant select on crashcourse.* to jack@localhost;

 撤销权限:revoke select on crashcourse.* from jack@localhost;

 grant all on to ; revoke all on from;

 权限层次:可对数据库、表,列,存储过程授权,

 17、数据库维护:

 备份:mysqldump -uroot -p 数据库名>备份文名;

 恢复:use 数据库;source 备份文名;

 检查表键是否正常:analyze table 表名;

 优化表空间收回被清空的空间:optimize table 表名;

 windows下my.ini文件中设置日志的位置和开关,linux下/etc/my.cnf文件中配置日志路径和开关;

MySQL笔记

标签:mysql   基础   

人气教程排行