一 数据库基础
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 视图名,删除视图
视图的增删改时同时也对基表进行了修改;如不能识别基表对应的值则不能修改基表,如用了分组、算术运算、函数等的视图的加工后的列值,无法找到对应基表数据进行修改;