一 数据库基础

 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 视图名,删除视图

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