数据库:按照数据结构来组织、存储、管理数据的仓库
好处:可以存储大量的数据、安全
常见的数据库有哪些:oralce 数据库 oralce公司
sql-server 数据库 微软公司
mysql 数据库 oralce 公司
权限
dba:数据库管理员(Database Manager admin)
DCL(Data Control Language):数据库控制语言,用来定义访问权限和安全级别
如何创建用户:create user 用户名@地址 identified by '密码';
地址:给的是电脑IP地址
如何查看电脑的IP地址:cmd命令 ipconfig
本机地址为 localhost
如何查看数据库中有哪些用户
进入系统数据库中:use mysql;
查看用户表:select host,user from user;
给用户权限
grant 权限1,权限2,... on 数据库名称.* to 用户名@地址;
查看用户的权限
show grants for 用户名@地址;
删除用户名的操作
drop user 用户名@地址;
管理数据库:
1.登录
2.操作数据库:
查看有哪些数据库: show databases;
创建数据库: create database 数据库名称;
删除数据库: drop database 数据库名称;
使用数据库: use 数据库名称;
查看当前数据库名称:select database();
查看数据库中的编码:status;
修改数据库中的编码:alter database 数据库名称 character set gbk;
查看表中的编码: show create table 表名;
修改表的编码: alter table 表名 character set gbk;
修改表中字段的编码:alter table 表名 change 字段 字段 数据类型 character set gbk;
3.数据库中操作表
常用的数据类型
日期:date 年-月-日(3个字节)
时间:time 时:分:秒(3个字节)
日期+时间:datetime 年-月-日 时:分:秒(8个字节)
整型:int (4个字节,正负21亿)
浮点型:
float(m,d)(4个字节,单精度,m总个数,d小数位)
double(m,d)(8个字节,双精度,m总个数,d小数位)
字符串:varchar(n)(n设置字符的长度)
注:定义表的时候告诉字段只能放什么数据
查看数据库中有哪些表: show tables;
创建表: create table 表名(字段名称1 数据类型1,字段名称2 数据类型2);
删除表: drop table 表名;
查看表的信息: desc 表名;
添加字段: alter table 表名 add 字段名称 数据类型;
删除字段: alter table 表名 drop 字段名称;
修改字段: alter table 表名 change 修改的字段 新的字段 数据类型;
修改字段类型: alter table 表名 modify 字段 数据类型;
修改表的名称: alter table 旧的表名 rename to 新的表名;
4.往表中操作数据
添加数据: insert into 表名(字段1,字段2,...) values(值1,值2,...);
可以添加多条数据
insert into 表名(字段1,字段2,...) values(值1,值2,...),(值1,值2,...);
可以只添加一个字段(没有添加的字段数据默认为null)
注:字符串数据要用''引起来
修改数据: update 表名 set 修改的字段1='值1',字段2='值2' where 条件;
删除整行数据: delete from 表名 where 条件;
5.select 基本查询
查询所有的列: select * from 表名;
查询指定的列: select 列名1,列名2 from 表名;
6.where 条件查询
运算符的查询
= 、 != 、 <> 、 < 、 > 、 <= 、 >=
select * from 表名 where 条件;
连接查询
and
select * from 表名 where 条件1 and 条件2;
区间查询
between ... and ...;
select * from 表名 where 列名 between 值1 and 值2;
逻辑查询
1.or 或者
select * from 表名 where 条件1 or 条件2;
2.in 在...里面(领域范围)
select * from 表名 where 列名 in(值1,值2,...);
3.not in 不在...里面
select * from 表名 where 列名 not in(值1,值2,...);
4.is null 是空的
select * from 表名 where 列名 is null;
5.is not null 不是空的
select * from 表名 where 列名 is not null;
模糊查询:模糊查询用like(相似)
其中"_"为一个空格占一个位置(一个位置一个字符)
其中"%"占多个位置)(多个字符)
1.select * from 表名 where 列名 like"_h%";
查询第二个字母为"h"的...
2.select * from 表名 where 列名 like"zhang%";
查询姓"zhang"什么的...
3.select * from 表名 where 列名 like"%a%";
查询什么中包含"a"的...
7.去除重复
去除重复 distinct
select distinct 列名 from 表名;
8.取别名
取别名 as(可以省略,但是不建议省略)
列取别名
select 列名 as '别名' from 表名;
表取别名
select e.ename,e.empno from emp as e;
9.排序
排序(不管做什么操作都是查询结果后排序)
order by asc(升序)
desc(降序)
select * from 表名
order by 列名 asc/desc;
10.聚合函数
聚合函数
count(统计)
select count(列名) from 表名;
select count(distinct 列名) from 表名;
sum(求和)
select sum(列名) from 表名;
avg(平均数)
select avg(列名) from 表名;
max(最大值)
select max(列名) from 表名;
min(最小值)
select min(列名) from 表名;
11.分组查询
分组查询(有重复的数据才可以分组)
select 列名1,列名2 from 表名
group by 列名1;
12.having 子句
having 子句
having 是对“分组后”数据的约束
select 列名1,列名2 from 表名
group by 列名1
having 条件;
13.分页查询
分页查询
limit
select * from 表名 limit 值1(从哪里开始),值2(查询多少条数据);
14.连接查询
内连接:都满足条件就给查出来
select e.ename,e.deptno,d.dname,d.loc
from emp as e join dept as d on e.deptno=d.deptno;
外连接:查询出的结果存在不满足条件的可能
左连接:先查询出左表,然后查询右表,右表中满足条件的显示出来,不满足条件的显示null
select e.empno,e.ename,e.deptno,d.dname,d.loc
from emp as e left join dept as d on e.deptno=d.deptno;
右连接:先查询右表,然后查询左表,左表中满足条件的显示出来,不满足条件的显示为null
select e.empno,e.ename,d.deptno,d.dname,d.loc
from emp as e right join dept as d on e.deptno=d.deptno;
子查询:嵌套查询,即select 中包含 select
单行单列 (用于条件)
单行多列 in (用于条件)
多行单列 all,any (用于条件)
多行多列 作为临时表(用于表)
表的约束
完整性约束是为了表的数据的正确性,如果数据不正确,那么一开始就不能添加到表中
主键:唯一约束
主键列的值不能为null,也不能重复
每张表最好只能有一个主键,指定主键约束使用 primary key 关键字
not null 如果给空是不能插入数据的
primary key 如果主键有重复的不能插入数据
primary key 主键
auto_increment 自动递增
外键约束
主外键构成表与表关联的唯一途径
外键是另一张表的主键
constraint fk_约束名称 foreing key(外键字段) references 关联的表(关联的字段);
简单的存储过程
概念类似于函数,就是把一段代码封装起来
当要执行这段代码的时候,可以通过调用该存储过程来实现
create procedure 程序名称()
begin
sql语句
end;
调用存储过程
call 程序名称();
带参数的存储过程
create procedure 程序名称(参数)
begin
sql语句
end;
调用存储过程
call 程序名称(参数);
索引:主要思想是将数据分段,从而减少查询时的无效数据,提高查询效率
什么是视图:视图是有查询结果形成的一张虚拟表
什么时候要用到视图:某个查询结果出现的非常频繁,也就是要经常拿这个查询结果来做子查询
create view 视图名 as select 语句;
可以用视图名这个临时表来使用