mysql-server

数据库

一个文件,存放数据的文件

命令

linux下安装mysql:

$:sudo apt-get install mysql-server (注意:安装数据库时一定要设置数据库密码)
.

运行退出数据库:

$:mysql -uroot -p (登录数据库)
mysql> quitexit 退出数据库
.

删除数据库:

$:sudo apt-get autoremove mysql* –purge
$:sudo apt-get remove apparmor
$:sudo rm /var/lib/mysql/ -R
$:sudo rm /etc/mysql/ -R
.

查看数据库

mysql> show databases;
.
.

使用数据库

mysql> use mysql;(mysql为数据库中已存在的文件)
.
.

显示数据库表

mysql> show tables;
.
.

创建数据库

mysql> create database 数据库名
.
.

创建数据库表(use 数据库名后的操作)(unique表示不能重复)(default表示默认值)

mysql> create table school(id int unique not null,
name varchar(32) unique not null,
address varchar(32) default “china”)
default charset ‘utf8’;
.

删除数据库表

mysql> drop table school;
.

插入数据

insert school(id,name,address) value(1001,”黄山学院”,”黄山”);
.
插入多条数据
insert school(id,name,address) values(1002,”北京大学”,”北京”),(1003,”清华大学”,”北京”);
.

查看数据库表插入的内容

mysql> select * from school
.
插入数据时需要设定一个id为主键,否则容易报错因为主键值不能改变不能重复
报错信息:Duplicate entry ‘20’ for key ‘age’
mysql> show create table school \G;(查看创建表的条件)
.
.

修改表结构:

增加一个字段
mysql>alter table school add level varchar(32) default “一本大学”;
修改一个字段
mysql>alter table school modify build date;(将build字段修改为date字段)
删除一个字段
mysql>alter table school drop build;
.
.

修改数据库表名

mysql> rename table school to newschool;
显示数据库表内前三行内容
mysql> select * from newschool limit 3;
.
.

更新数据库表内容

更改student 表中id为2013和2014的学生信息
mysql> update student set depart=”体育系” where id=2013 or id=2014;
.
.

条件查询(嵌套查询,一个查询条件结果作为另一个查询语句的条件)

找出与小明同一个系的学生(包括小明)
mysql> select * from student where depart = (select depart from student where name = “小明”)
找出与小明同一个系的学生(不包括小明)
mysql> select * from student where depart = (select depart from student where name = “小明”) and name != ‘小明’
找出与小明年龄性别都一样的学生
mysql> select * from student where age = (select age from student where name =’小明’) and sex = (select sex from student where name = ‘小明’) and name != ‘小明’;
按年龄从小到大排序
mysql> select * from student order by age asc;
按年龄从大到小排序
mysql> select * from student order by age desc;
显示人数
mysql> select count(*) from student;
查询计算机系有多少人
mysql> select depart,count(*) from student where depart = ‘计算机系’;
查询年龄最大是多少
mysql> select max(age) from student;
查询年龄最大的人
mysql> select * from student where age = (select max(age) from student);
查询年龄最大和最小的人
mysql> select * from student where age = (select min(age) from student) || age = (select max(age) from student);
mysql> select * from student where age in ((select min(age) from student),(select max(age) from student));
查询平均年龄为多少
mysql> select avg(age) from student;
查询小于平均年龄的人有多少个
mysql> select count(*) from student where age < (select avg(age) from student);
计算总年龄大小
mysql> select sum(age) from student;
分组查询
mysql> select depart,count(*) from student group by depart;
查询每个系的平均年龄
mysql> select depart,avg(age) from student group by depart;
统计每个年龄有多少人
mysql> select age,count(*) from student group by age;
这里写图片描述

分组查询后的条件判断

这里写图片描述

这里写图片描述

将同一系的学生分类在一起
这里写图片描述
.
.
.

查询音乐系的年龄并当年龄相同时去除重复
这里写图片描述
.
.
.
查询计算机系年龄大于音乐系最大年龄的人
这里写图片描述
或者
这里写图片描述
.
.
.
查询计算机系中大于音乐系中年龄的任意一个的人
这里写图片描述
等同于or的使用
方块改成some同样

主键与外键的使用

外键关联两个数据库表
这里写图片描述

分组查询
这里写图片描述

.
.
.
查询student表中id不在score中的人
这里写图片描述


创建两个数据库表,(小案例)

创建teacher数据库表
这里写图片描述

创建course数据库表
这里写图片描述

向teacher数据库表插入数据
这里写图片描述

向course数据库表插入数据
这里写图片描述

查询数据库表course的tecId,并使用distinct去重
这里写图片描述

查询没有课程号的老师
这里写图片描述

查询老师id与课程tecId相匹配的情况
这里写图片描述

查询只满足join on 关键字后面的条件的情况
这里写图片描述

查询右边数据库表只满足join on 关键字后面的条件的情况(左边不需要满足条件)
这里写图片描述

查询左边数据库表只满足join on 关键字后面的条件的情况(右边不需要满足条件)
这里写图片描述

向score数据库表中插入数据
这里写图片描述

这里写图片描述

查询没有成绩的课程
这里写图片描述

关联三个表查询学生课程分数信息
这里写图片描述

分组查询student数据库表中学生的总分
这里写图片描述

降序排序学生总成绩
这里写图片描述

关联student,score,course,teacher四个数据库表查询学生课程老师分数信息
这里写图片描述

like条件查询

字符串部分查询
这里写图片描述

关于’%%’中的下划线_匹配规则,匹配到字符串结束方可匹配成功
这里写图片描述

空和null的区别,空表示有这个实体没数据,null表示没有这个实体
这里写图片描述

这里写图片描述

这里写图片描述

更新表内容语句
这里写图片描述

这里写图片描述

这里写图片描述

删除表内容语句
这里写图片描述

组合查询,将各个值都查询出来然后组合起来

这里写图片描述

组合查询,union all 不会去重(去重 不写 all即可)

这里写图片描述

视图
这里写图片描述

这里写图片描述

这里写图片描述

存储过程

事先写好的语句
delimiter // 设置新的语句结尾,此时语句结束要以//结尾

创建存储过程 create procedure …()
->begin 存储过程的开始
->end 存储过程的结束
这里写图片描述

调用存储过程
这里写图片描述

展示存储过程的创建

这里写图片描述

删除存储过程
这里写图片描述

创建一个存储过程 ,将数据传进去

mysql> create procedure stuInfo(in id int)
    -> begin
    -> select s.id,s.name,c.name,m.mark from student as s,
    -> score as m,course as c where s.id=m.stuId and m.courseId = c.id and s.id = id;
    -> end
    -> //

mysql> call stuInfo(2001) //

这里写图片描述

定义变量 必须加上@符号,表示全局变量

这里写图片描述

这里写图片描述

关于存储过程的传参与返回值

这里写图片描述

这里写图片描述

创建一个存储过程实现个人所得税的计算


mysql> create procedure protax(in base float)
    -> begin
    -> select id,name,salary,(salary-base)*0.04 as tax from teacher where salary > base;
    -> end
    -> //




mysql> call protax(20000)
    ->//

+------+--------+--------+------+
| id   | name   | salary | tax  |
+------+--------+--------+------+
| 3001 | 孔子   |  90000 | 2800 |
| 3004 | 季     |  80000 | 2400 |
+------+--------+--------+------+
2 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)


存储过程内的条件判断

这里写图片描述

这里写图片描述

条件判断

这里写图片描述




游标

用于遍历结果集

这里写图片描述

游标cur指向 select name,age from student;
打开游标 open cur
repeat 开始遍历
end repeat; 结束遍历

触发器

当student数据库表插入数据时打印返回值

这里写图片描述

这里写图片描述

这里写图片描述

关于表teacher 触发器小案例

mysql>create trigger addc
    ->after insert on course
    ->for each row
    ->update teacher set salary=salary+1000
    ->where id=new.tecId;
    ->//

Query OK, 0 rows affected (0.01 sec)

mysql> insert course(name,tecId) value('编译原理',3003) //

+------+-----------+--------+
| id   | name      | salary |
+------+-----------+--------+
| 3001 | 孔子      |  90000 |
| 3002 | 孟子      |   8000 |
| 3003 | 谭浩强    |   5000 |
| 3004 | 季        |  80000 |
| 3005 | 张纪忠    |   3000 |
+------+-----------+--------+
5 rows in set (0.00 sec)


+------+-----------+--------+
| id   | name      | salary |
+------+-----------+--------+
| 3001 | 孔子      |  90000 |
| 3002 | 孟子      |   8000 |
| 3003 | 谭浩强    |   6000 |
| 3004 | 季        |  80000 |
| 3005 | 张纪忠    |   3000 |
+------+-----------+--------+
5 rows in set (0.00 sec)


#

将自动提交设置为False 方便修改数据后回滚roll 恢复数据
mysql> rollback; 回滚恢复数据
mysql> commit; 提交数据后不能恢复

这里写图片描述



mysql> delimiter //
mysql> create procedure sendMoney()
    -> begin
    -> declare A int;
    -> set A = 90000;
    -> declare B int;
    -> set B = 1000;
    -> set A=A-1000;
    -> declare send int;
    -> set send = 1000;
    -> set send = -1000
    -> ;
    -> if send < 0 then
    -> rollback
    -> else then
    -> set B = B + send;
    -> commit
    -> end if;
    -> end
    -> //


猜你喜欢

转载自blog.csdn.net/qq_39469688/article/details/81866435