mysql数据库

@[toc]目录

一、数据库和SQL语言的定义

1.数据库的结构

2.SQL语言分类

二、常见SQL语句

三、表里记录的常见操作

1.新增 

2.删除

3.修改

4.查询

四、六大约束

1.主键约束

2.非空约束

3.唯一约束

4.外键约束

5.默认约束

6.检查约束

五、Mysql 的基础函数

六、条件查询

七、聚合函数

 八、事务

1.概述

2.事务的隔离级别

3.事务的处理

九、索引

1.概述

2.创建索引

十、视图

1.概述

2.使用

十一、多表联查

1.笛卡尔积

2.表连接

3.子查询


#一、数据库和SQL语言的定义

#1.数据库的结构

数据库-表-字段的名字和字段的值

#2.SQL语言分类

DML:数据操纵语言,指对数据的操作,CRUD

DDL:数据定义语言,创建库,创建表

DCL:数据控制语言,分配具体操作数据的权限

DQL:数据查询语言,主要是指对数据的查询

#二、常见SQL语句

查询库 : show  databases ;

新增库: create  database  cgb2105 ;

删除库: drop  database  cgb2105 ;

使用数据库:  use  cgb2105;

创建表: create  table  abc ( id  int(3), name  varchar(10),  age  int(3) );

查询表: show  tables ;

删除表: drop  table  abc ;

增加表字段 : alter table tb_door add  column  addr  varchar(100) ;

注 : 默认添加在最后  1.如果末尾加first就添加在首位  2.如果末尾加after name就放在name后面

修改表名: rename  table  person  to  p;

删除表字段: alter table  p  drop   name ;

修改表字段: alter  table  p  change  age  id   int  (age原名,id新名,int 新类型)

描述表: desc  tb_door ;

#三、表里记录的常见操作

#1.新增 

insert  into  表名  values ("字段1的值" ,"字段2的值")

例:insert  into  tb_door  values (10000,"first","010-666888",'bj');

       insert  into  tb_door(name)  values('lilei'),('hanmeimei');

#2.删除

delete  from  表名

例:delete    from  tb_door  where   age<10;   

#3.修改

update  表名  set  字段名=字段的新值

例:update  tb_door  set   addr="shanghai"  where  name='zhangsan';

#4.查询

 select   字段名  from   表名

例: select * from  tb_door;

#四、六大约束

#1.主键约束

id的值不能重复,不能是null 。primary  key

(通常与自动递增auto_increment一起使用,组成逐渐递增)

例:create  table  a ( id int  primary  key  auto_increment);

#2.非空约束

 被约束字段的值不能为空  not  null

例:create  table  a ( name  varchar(10)   not  null)

#3.唯一约束

 字段的值不能重复  unique

例:create  table  a(name  varchar(10)  unique )

#4.外键约束

把两张表之间的关系,通过两个表的主键来表示

#外键约束
create table tb_user(
	id int primary key auto_increment,
	name varchar(20),
	age int
)
create table tb_user_addr(
	user_id int primary key auto_increment,
	addr varchar(200) ,
	#描述了两张表之间通过哪个字段关联着--外键约束
	#  外键    (子表的字段)   参考      主表名称(主表的字段)
	foreign key(user_id)    references   tb_user(id)
)

#5.默认约束

给指定的字段设置默认值   (default 设置默认值)

例:create  table  h( sex  char(3)  default  '女' );

#6.检查约束

给字段增加检查条件,符合才能操作,不符合不能操作  (check)

例:create  table  a( age  int , check ( age > 0 and  age<=150 ) ) ;

#五、Mysql 的基础函数

lower :  全转小写            select   dname,lower(dname)  from   dept;

upper : 全转大写             select   dname,upper(dname) from    dept;

length : 求长度                select  length(dname) from  dept;

concat: 拼接串                select  concat(dname , 'hello') from dept;

substr: 截取字符串          select  substr(dname,2,5) from dept;

replace: 替换字符串        select  replace(dname,'a','666') from dept;

ifnull: 对null元素的替换   select  ifnull(comm,0) from  emp;

round: 对小数四舍五入   

ceil: 对小数向上取整

floor: 对小数向下取整     select  comm,round(comm),ceil(comm),floor(comm) from emp;

now: 获取当前的年月日时分秒       select  now();

year:获取当前日期里的年

mouth-月    day-日     hour-时       minute-分      second-秒

select now(),year(now()),mouth(now()),day(now()),hour(now()),minute(now()),second(now());

转义字符: \   ’      select  'xi \' an'    ==  select  “xi ' an”

#六、条件查询

1.distinct :去掉重复结果     where: 用来过滤数据也就是条件( 条件可以用and或者or连接)

例:select  distinct  dname  from  dept  where  deptno=1  and  loc='一区';

2.like : 模糊查询  %为占位符

例:select * from  dept  where   dname  like   '%a%';

3.null :  is  null  /  is  not  null   查询条件为空或者不为空

例:select * from  emp  where   comm  is   null;

4.between  and (条件在什么之间)/ limit (分页)/order  by(排序,asc升序默认的,desc降序)

例:select *  from emp  where  sal  between  5000  and   10000  order by  sal  desc  limit 2;

5.in: 条件在几个选择之间  

例:select * from emp where sal in(3000,5000,7000); 

#七、聚合函数

1.max-最大值   min-最小值    sun-求和    avg-平均数   count(*)/count(1)-总数

例:select  count(comm), max(sal), min(sal), sum(sal), avg(sal)  from  emp;

2.group by  分组查询  ,使用having 在分组后的结果上继续添加过滤条件

例: 查询每个部门平均工资大于10000的部门以及它的平均工资

select  deptno , avg(sal)  from  emp  group  by  deptno  having  avg(sal) >10000;

 #八、事务

#1.概述

能保证多条SQL要么全成功要么全失败

4个特性:

 原子性:多个SQL处于同一个事务里,要么全成功要么全失败

一致性:保证数据在不同的电脑里是一致的

隔离性:数据库支持并发访问,保证事务间是隔离的,互不影响

持久性:对数据库的操作是永久的

#2.事务的隔离级别

读未提交:性能最好,数据的安全性最差
读提交:Oracle的默认的隔离级别 – 性能较好,安全性较差
可重复读:Mysql的默认的隔离级别 – 性能较差,安全性较好
串行化:安全性最高,但是表级的锁,效率低 

#3.事务的处理

begin;#开启事务
insert into dept values(null,'java开发部','北京');
insert into dept values(null,'php开发部','上海');
commit;#提交事务--会对数据库产生持久影响
#rollback;#回滚事务--不会对数据库产生持久影响

#九、索引

#1.概述

好处:给加完索引的列,提高查询效率
坏处:索引本质上就是一张表,如果表的体积太大,比较占内存
主键本身就有索引、
分类:
单值索引(一个索引只包含着一个列)
复合索引(一个索引包含着多个列)
唯一索引(一个索引只包含着一个列,但是要求列的值不能相同)

#2.创建索引

经常被查询的字段建议加索引!!!
1. 创建 普通索引: create index 索引名 on 表名(字段名)
create index dname_index on dept(dname)

2. 查看索引(观察三列:表名/字段名/索引名)
show index from dept
3. 使用索引,按照索引列查的快
explain
select * from dept where dname like '%a%'
4. 创建 唯一索引:alter table 表名 add unique(字段名)
alter table dept add unique(dname)
5. 创建 复合索引:给多个字段加一个索引
alter table dept add index fuhe(dname,loc)
6. 删除 索引 :alter table 表名 drop index 索引名
alter table dept drop index dname_index

       注:1.复合索引使用时要遵循最左特性    2.模糊查询,or条件查询 索引失效

#十、视图

#1.概述

本质上就是缓存了 查询的结果,作为一个表体现

#2.使用

视图:把一个查询语句的结果缓存起来存入视图中
好处:提高查询效率
坏处:占用了内存,无法进行SQL优化,当更新了数据时视图也需要时间更新
1. 创建视图 create view 视图名 as SQL语句 
create view empView as 
select * from emp where ename like '%a%' #把SQL执行的结果存入视图

2. 使用视图,就当做一张表来用
select * from empView

#十一、多表联查

#1.笛卡尔积

通过逗号隔开多个表,写在from后面。where 后连接表之间的关联关系

例:select  b.loc  from  emp  a , dept  b  where  a.deptno=b.deptno  and   a.ename='tony';

#2.表连接

通过join连接多个表,分为内连接和外连接。通过on描述表关系,where后写过滤条件

例:select  b.ename  from  dept  d  join  emp  e  on  d.deptno=e.deptno   where  d.loc='二区' ;

#3.子查询

把上一次的查询结果,作为条件继续使用(嵌套查询)

例:select  *  from  dept  where  deptno=(select  deptno  from  emp  where  ename='tony');

上一篇:Oracle数据库scott用户等值连接


下一篇:Effective C++ 第二章 构造/析构/赋值运算