DDL,Data Definition Language,数据库定义语言
用于定义和管理数据库所有对象的语言,包括:CREATE,ALERT,DROP,TRUNCATE
DML,Data Manipulation Language,数据库操作语言
SQL中处理数据等操作,包括:
SELECT,INSERT,UPDATE,DELETE,CALL,EXPLAIN PLAN,LOCK
DCL,Data Control Language,数据库控制语言
用来授予或回收访问数据库和某种特权并控制数据库操纵事务发生的时间及效果,对数据库实行监控,包括:
COMMIT,SAVEPOINT,ROLLBACK,SET TRANSACTION
MySQL c/s模式: 客户端服务器模式
1.开启数据库
[root@localhost ~]# systemctl start mysqld.service
//service mysqld start
2.查看MySQL运行状态
[root@localhost ~]# systemctl status mysqld.service
3.登录数据库
[root@localhost ~]# mysql -uroot -p
mysql>
show databases; //数据库 DB
use mysql; //选库
show tables;//选表
select user,host,password from user;
//DDL 数据定义语句
//库结构 database
show databases;
create YZ98; //创建 库
// create database if not exists YZ98;
show create database YZ98; //查看创建信息
drop database YZ98;
//drop database if exists YZ98;
//表结构 属性 table
//先选库 use YZ01;
表名
字段
create table student
(
id char(15),
name varchar(15), //字符串
sex enum("man","woman"), //枚举
age int
);
char(10) 固长类型
varchar(10) 变长类型 10为最大长度 不可逾越的界限
//属性的细节 学号不重复 姓名不为空 年龄区间......
// 字段的 约束
1.主键约束 不能为空 也不能重复
2.外键约束 本表的字段信息必须是另一表主键已存在的字段信息
3.唯一约束 键不允许重复 但可以为空
4.非空约束 数值不能为空
5.默认约束 给每个字段一个默认值
create table student
(
id char(15) primary key, //主键约束
name varchar(15) not null, //非空约束
sex enum("man","woman"),
age int default 18 //默认约束
);
//注释 COMMENT
create table student
(
id char(15) primary key COMMENT "学生学号", //主键约束
name varchar(15) not null COMMENT "学生姓名", //非空约束
sex enum("man","woman") COMMENT "学生性别",
age int default 18 COMMENT "学生年龄" //默认约束
);
//desc 后可以直接加表明 查询的是对应的字段信息;
desc student; //查看表
show create table student; //查看表的创建信息
//举例
学生成绩表
学号 外键约束
课程号
成绩
create table student
(
id char(15) primary key COMMENT "学生学号",
name varchar(15) not null COMMENT "学生姓名",
sex enum("man","woman") COMMENT "学生性别",
age int default 18 COMMENT "学生年龄"
);
/*
create table score
(
id char(15) COMMENT “学生学号”,
class_id char(15) COMMENT “课程号”,
score int COMMENT “成绩”
);
*/
create table result
(
id char(15) COMMENT “学生学号”,
pid varchar(15) COMMENT “课程编号”,
grade float default 0 COMMENT “学生成绩 默认为零”,
foreign key (id) references student (id) //当前id数据引用student_id数据;
);
//创建表 格式
create table table_name
(
字段名称+字段类型+字段约束+注释,
);
//删除表
drop table table_name;
//修改表
1.修改表结构的 字段类型 modify
alter table table_name modify 修改字段名 varchar(20);
2.修改表结构的 字段名称 change (可以修改字段类型)
2.1 alter table table_name change 被修改字段名称 修改新的字段名称 enum(“man”,“woman”);
2.2 alter table table_name change name name varchar(15);
3.修改表结构 添加字段 add
//alter table table_name add 新的字段名+字段类型+字段约束
alter table table_name add id_card char(18) unique;
4.修改表结构 添加字段并确定位置 add after first
alter table table_name add id_card char(18) unique after id;
alter table table_name add id_card char(18) unique first;
5.修改表结构 删除字段 drop
alter table table_name drop 将删除字段名;
6.修改表结构 修改表名 rename 例如 student->stu
alter table table_oldname rename table_newname;
// DML 语句 数据操纵语句
只能针对表
1.insert 添加数据 0存储在磁盘区
001 zhangsan man 19
002 lisi woman 20
003 wangwu man 17
004 zhaoliu man 21
//操作 流向 表名 数据集
insert into table_name values('001',"zhangsan","man",19);
insert into table_name values("002",'lisi','woman'); // ? error
insert into table_name (id,name,ssex)("002",'lisi','woman'); // √
//批量插入操作
insert into table_name values
('001',"zhangsan","man",19),
('002','lisi','woman','20'),
('003','wangwu','man','17'),
('004','zhaoliu','man','21');
//大批量操作
load
insert into result values
('001',"A",19),
('001','B',100),
('002','A',59.5),
('002','B',32),
('003','A',66),
('003','B',48);
2.delete
//操作 流向 表名 数据集
delete from table_name where id = ‘002’;
//先进行条件过滤、然后进行操作 满足条件才删除
delete from table_name; // ? true 没有条件即所有的条件都满足
//拷贝文件 慢 删除文件 快
删除文件时不会操作硬盘只是将硬盘数据标记为可用,
拷贝文件则需要对硬盘进行写入,占用时间;
删除后 1.内存是否被重新分配?
2.数据是否发生变化?
数据库通过日志系统管理,即每次的删除操作都会保存在日志系统;
3.update
//操作 表名 设置 字段 位置
update table_name set ssex = ‘woman’ where id = ‘006’;
4.select
读密集型数据库
数据已经存储好的前提下提取数据处理;
写密集型数据库
数据的采集、整理放入数据库;
select * from table_name; // * 代表匹配所有 隐私性不好 如果程序存在漏洞即造成信息泄露
√ select id,name,ssex,age from table_name;
select * from table_name where id > '002';
√ select id,name,ssex,age from table_name where id > '002';
2.去重查询 distinct
2.1 查询某款游戏对应的用户年龄区间
//select age from table_name;
select distinct age from table_name;
3.排序查询 order by 升序
select distinct from table_name order by age;
desc 降序
asc 升序
select distinct from table_name order by age desc;
4.分组查询 group by
计算成绩表中每个人的总成绩
select id,SUM(grade) from result group by id;
***************************单表↑查询***************************
***************************多表↓查询***************************
5.等值查询 笛卡尔乘积 n*m 效率低
// 年龄小于20的学生 不及格成绩
// 学号 成绩
select stu.id,grade from stu,result
where stu.id=result.id and
age < 20 and
grade < 60;
* 6.连接查询
先按要求缩小查询表的查询范围,基于缩小的范围结果进行笛卡尔乘积;
外连接查询;
左外连接查询;
//左边为基础自右边开始匹配,结果中出现所有的左值,右值不满足为空;
/*
select a.id,grade
from
(select id from student where age < 20) a
left join
(select id,grade from result where grade < 60) b
on a.id = b.id;
*/
右外连接查询;
//和左相反
/*
select a.id,gradefrom
(select id from student where age < 20)a
right join
(select id,grade from result where grade < 60)b
on a.id = b.id
where a.id is not null;
*/
全外连接查询;
/*
select a.id,grade
from
(select id from student where age < 20) a
full join
(select id,grade from result where grade < 60) b
on a.id = b.id;
*/
内连接查询;
内连接查询:只要求匹配项
/*
select a.id,grade
from
(select id from student where age < 20) a
inner join
(select id,grade from result where grade < 60) b
on a.id = b.id;
*/
7.联合查询 union 去重查询
union all 不去重
create table teacher
(
tid char(15) primary key COMMENT '教师学号',
name varchar(15) not null COMMENT '教师姓名',
tsex enum('man','woman') COMMENT '教师性别',
age int default 18 COMMENT '教师年龄默认18'
);
insert into teacher values('t01','yangheping','man',30);
//查询全校师生信息
select tid,name,sex,age from teacher
union
select id,name,ssex,age from student;
select tid,name,sex,age from teacher
union all
select id,name,ssex,age from student;
常见的聚合函数
SUM 相加
COUNT 统计
AVG 求平均值
/*
1.求前三名学生的id
2.求每个学生的总成绩
select result.id,pid,score
from
(select id,SUM(score) all_score
from result
group by id
order by all_score desc
limit 3)a
left join
result b
on a.id=b.id;
select result.id,pid,score
from
(select id
from result
group by id
order by SUM(score) desc
limit 3)a
left join
result b
on a.id=b.id;
*/
DCL 语句
权限
create user '0804';
create user "0513"@'localhost' identified by '密码';
#该用户只能在我的当前ip地址上登录
CREATE USER 'aaa'@'localhost' IDENTIFIED BY 'aaa';
#创建一个不受ip地址限制的用户
CREATE USER 'bbb'@'%' IDENTIFIED BY 'bbb';
grant 授权
grant select,delete on YZ98.* to 0804;
#把test数据库的查看权限赋予给aaa用户
GRANT SELECT ON test.* TO 'aaa'@'localhost';
#把test数据库的插入权限赋予给bbb用户
GRANT INSERT ON test.* TO 'bbb'@'localhost';
revoke 回收权限
revoke delete on YZ98.* from user0803;
自主权限管理
使用时才对于用户分配一定的权限;
强制权限管理
划分严格的管理等级,进行权限等级分配;
数据库不允许返祖情况。
root u1 u2 u3 u4 后一个只能由分配给他权限的前一个回收!