数据库2

RDBMS:关系结构类型数据库:使用二位表格来存储数据
RDBMS=管理员(manager)+仓库(database)
database=N个table
table:
表结构:定义表的列名和列类型
表记录:一行一行的记录

sql语言分类:
1)DDL(Data Ddfinition Language):数据定义语言,用来定义数据库对象:库、表、列等;数据库或表的结构操作。
2)DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);对表的记录进行更新(增、删、改)。
3)DCL(Data Control Language):数据库操作语言,用来定义月访问权限和安全级别;对用户的创建,及授权。
4)DQL(Data Query Language):数据查询语言,用来查询记录(数据)。对表的记录和查询。

1>数据库:
    1)查看所有数据库:show databases;
    2)切换(选择要操作的)数据库:use 数据库名;
    3)创建数据库:create database [IF NOT EXISTS] mydb1 [CHARSET=utf8]
    4)删除数据库:drop database [IF EXISTS] mydb1;
    5)修改数据库编码:alter database mydb1 character set utf8;

2>数据类型(列类型):
int :整形
double:浮点型,例如double(5,2)表示最多5位,其中必须有两位小数,即最大值为999.99;
decimal:浮点型,在表单全方面使用该类型,因为不会出现精度缺失问题。
char:固定长度字符串类型:char(255)
varchar:可变长度字符串类型:varchar(65535),zahngsan
text(clob):字符串类型:
> 很小
> 小
> 中
> 大
blob:字节类型:
> 很小
> 小
> 中
> 大
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss;
timestamp:时间戳类型;
3>表
创建表:
create table [IF NOT EXISTS]表名(
列名 列类型,
列名 列类型,
。。。
);
查看当前数据库中所有表名称:show tables;
查看指定表的创建语言:show create table 表名;
查看当前表结构:desc 表名;
删除表:drop table 表名;
修改表:前缀:alter table 表名
>修改之添加列:
alter table 表名 add(
列名 列类型,
列名 列类型,
。。。
);
>修改之修改列类型(如果被修改的列以存在数据,那么新的类型可能会影响到已存在的数据):alter table 表名 modify 列名 列类型;
>修改之修改列名:alter table 表名 change 原列名 新列名 列类型;
>修改之删除列:alter table 表名 drop 列名;
>修改表名称:alter table 原表名 rename to 新表名;

数据:
1.插入数据:
insert into 表名(列名1 ,列名2 ,列名3.。。) values (列值1,列值2,列值3.。。);
>在表名后给出要插入的列名,其他没有指定的列等同插入null值。所以插入记录总是插入一行,不可能总是半行。
>在values后给出列值,值的顺序和个数必须与前面指定的列对应。
insert into 表名 values(列值1,列值2)
>没有给出要插入的列,那么表示插入所有列。
>指的个数必须是该表列的分数。
>值得顺序,必须与表创建时给出的列的顺序相同。
2.修改数据
update 表名 set 列名1=列值1,列名2=列值2,。。。(where 条件)
条件(条件可选的);
>条件必须是一个boolean类型的值或表达式:update student set gender=‘男’ ,age=age+1 where id=‘1’;
>运算符:=、!=、<> 、>、<、>=、<=、BETWEEN…AND、IN(…)、IS NULL 、NOT、OR、AND
3.删除数据
delete from 表名 (where 条件);
truncate table 表名:truncate是DDL语句,它是先删除drop该表,再create该表,而且无法回滚!!!
(在数据库中所有的字符串类型,必须使用单引,不能使用双引!如期类型也要单引)

DCL
一个项目创建一个用户!一个项目对应的数据库只有一个
这个用户只能对这个数据库有权限,其他数据库就不能操作了。
1.创建用户
create user 用户名@IP地址 identified by ‘密码’;
>用户只能在指定的IP地址上登录
create user 用户名@‘%’ identified by ‘密码’;
>用户可以在任意IP地址上登录
2.给用户授权
grant 权限1 , 。。,权限n ON 数据库,* TO 用户名@IP地址
>权限、用户、数据库
>给用户分派在指定的数据库上的指定的权限
>例如:GRANT CREATE , ALTER ,DROP , INSERT,UPDATE ,DELETE ,SELECT NO mydb1 . * TO user1@localhost
* 给user用户分派在mydb1数据库上的create、alter、drop、insert、update、delete、select权限
* GRANT ALL NO 数据库 .*TO 用户名@IP地址;
>给用户分派指定数据库上的所有权限
3.撤销授权
REVOKE 权限1,…,权限n ON 数据库 . * from 用户名@IP地址;
>撤销指定用户在指定数据库上的指定权限.
>例如:REVOKE CREATE ,ALTER, DROP ON mydb1. * from user1@localhost;
*撤销user1用户在mydb1数据库上的create、alter、drop权限
4.查看权限
*SHOW GRANTS FOR 用户名@IP地址
>查看指定用户的权限
5.删除用户
drop user 用户名@IP地址

DQL --数据查询语言
查询不会修改数据库表的记录;
一、基础查询
1.字段(列)控制
1)查询所有列
select * from 表名;
>其中 * 表示查询所有列
2)查询指定列
select 列1[ ,列2 ,…列n] from 表名;
3)完全重复的记录只查一次
当查询结果中的记录一模一样时,只显示一行。
select distinct * | 列1 [ ,列2 ,… 列n] from 表名;
> 保查询员工表的工资,如果存在相同的工资,只显示一次!
4)列运算
1>数量类型的列可以做加、减、乘、除运算
select sal*1.5 from emp;
select sal+comm from emp;
2>字符串类型可以做连续运算
select concat(‘$’ ,sal)from emp;
3>转换null值
有时需要把null转换为其它值,例如com+1000时,如果com列存在null值,那么null+1000还是null,而我们这时希望把null当成0来运算。
select ifnull(comm,0)+1000 from emp;
>ifnull(comm,0);如果comm为null值,那么当成0来运算。
4>给列起别名
当使用列运算后,查询出的结果集中的列名称不好看出,这时就需要给列起个别名,这样结果集中列名就显示
select ifnull(comm,0)+1000 as 奖金 from emp;
>其中as可以省略
2.条件控制
1)条件查询
与前面介绍的update和delete语句一样,select语句也可以使用where字句来控制记录。
select empno ,ename,sal,comm from emp where sal>10000 and comm is not null;
select empno,ename,sal from emp where sal between 20000 and 30000;
select empno,ename,job from emp where job in(’经理‘,’董事长‘);
2)模糊查询
当你想查询姓张,并且姓名一共两个字的员工时,这就可以使用模糊查询
select * from emp where ename like ’张 ‘;
>模糊查询需要使用运算符:like,其中匹配一个任意字符,注意:只匹配一个字符而不是多个。
>上面语句查询的是姓张,名字由两个字组成的员工。
select * from emp where ename like ’——‘; /姓名由3个字组成的员工/
如果我们想查询姓张,名字几个字都可以的员工的时候就要使用“%"了。
select * from emp where ename like ‘张%’;
>其中%匹配0~N个任意字符,所以上面语句查询的是姓张的所有员工。
select * from emp where ename like ‘%啊%’;
>千万不要认为上面语句是查询姓名中带啊字的员工,因为%匹配0~N个字符,所以姓名以啊开头有或结尾的员工也会查询到。
select * from emp where ename like ‘%’;
>这个条件等同于不存在,但如果姓名为null的查询不出来;

二、排序
1)升序
select * from emp order by sal asc;
>按sal排序,升序;
>其中asc是可以省略的
2)降序
select * from emp order by comm desc;
>按comm排序,降序;
>其中desc不可以省略。
3)使用多列作为排序条件
select * from emp order by sal asc,comm desc;

三、聚合函数
聚合函数用来做某列的纵向运算。
1)count
select count(*)from emp;
>计算emp表中所有列都不为null的记录的行数。
select count(comm)from emp;
>云计算emp表中comm列不为null的记录的行数。
2)max
select max(sal)from emp;
>查询最高工资
3)min
select min(sal)from emp;
>查询最低工资
4)sum
select sum(sal)from emp;
>查询工资和
5)avg
select avg(sal)from emp;
>求工资平均数

四、分组查询
分组查询是把记录使用某一列进行分组,然后查询组信息。
例如:查看所有部门的记录数。
select deptno ,count(*)from emp group by deptno;
>使用deptno分组,查询部门编号和每个部门的记录数
select job,max(sal)from emp group by job;
>使用job分组,查询每种工作的最高工资

组条件
以部门分组,查询每组记录数,条件为记录数大于3
select  deptno,count(*)from  emp  group  by  deptno  having  count(*)>3;
having 后置条件:分组后条件。

五、limit子句(mysql特有)
limit用来限定查询结果的起始行,以及总行数。
例如:查询起始行为第5行,一共查询3行记录
select * from emp limit 4, 3;
>其中4表示从第5行开始,其中3表示一共查询3行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值