发布时间:2026-07-21阅读(1)
安装
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
DBMS (DataBaseManagementSystem): 关系数据库管理系统(数据库软件)
常见的几种DBMS:
SQL(Structured Query Language)
结构化查询语言, 通过此语言让程序员和数据库软件进行交流
如何连接数据库执行SQL语句
执行SQL语句需要先和数据库软件建立链接之后
[MariaDB为例]从开始菜单中找到MariaDB或MySQL,然后打开找到里面的MySQL Client 打开 , 然后输入密码后回车
//登录[root@host]# mysql -u root -pEnter password:******//退出mysql> exitBye
SQL语句格式:
数据库相关的SQL语句
查询所有数据库 格式: show databases;
创建数据库 格式: create database 数据库名 charset=utf8/gbk;
查看数据库信息 格式: show create database 数据库名;
删除数据库 格式: drop database 数据库名;
使用数据库
//创建 mydb1数据库 字符集分别为utf8create database mydb1 charset=utf8;//查询所有数据库检查是否创建成功show databases;//检查数据库的字符集是否正确show create database mydb1;//使用 use mydb1;//删除数据库drop database mydb1;
表相关的SQL语句
执行表相关的SQL语句必须已经使用了某个数据库 use db1;
//创建一个员工表emp 保存名字,工资和工作 create table emp(name varchar(50),salary int,job varchar(20));
添加表字段
删除表字段 格式: alter table 表名 drop 字段名;
修改表字段 格式: alter table 表名 change 原名 新名 新类型;
//创建表 create table t1(name varchar(20),age int) charset=utf8/gbk;//查询所有表 show tables;//查询表信息 show create table t1;//查询表字段 desc t1;//删除表 drop table t1;//修改表名 rename table t1 to t2;//添加表字段 alter table t1 add age int first/after xxx;//删除表字段 alter table t1 drop age;//修改表字段 alter table t1 change 原名 新名 新类型;
数据相关SQL
操作数据必须保证已经使用了某个数据库并且已经准备好了保存数据的表
(1)往表中插入数据(添加)
(2)查询数据 格式: select 字段信息 from 表名 where 条件;
(3)修改数据 格式: update 表名 set 字段名=值 where 条件;
(4)删除数据 格式: delete from 表名 where 条件;
//1. 创建数据库day1db 字符集utf8并使用create database day1db charset=utf8;use day1db;//2. 创建t_hero表, 有name字段 字符集utf8create table t_hero(name varchar(50))charset=utf8;//3. 修改表名为herorename table t_hero to hero;//4. 最后面添加价格字段money, 最前面添加id字段, name后面添加age字段alter table hero add money int;alter table hero add id int first;alter table hero add age int after name;//5. 表中添加以下数据: 1,李白,50,6888 2,赵云,30,13888 3,刘备,25,6888 insert into hero values(1,李白,50,6888),(2,赵云,30,13888),(3,刘备,25,6888);//6. 查询价格为6888的英雄名 select name from hero where money=6888;//7. 修改刘备年龄为52岁update hero set age=52 where name=刘备;//8. 修改年龄小于等于30岁的价格为5000update hero set money=5000 where age<=30;//9. 删除价格为5000的信息delete from hero where money=5000;//10. 删除表, 删除数据库drop table hero;drop database day1db;
主键约束
主键约束 自增
自增规则: 从历史最大值基础上 1
SQL语句分类
数据类型

数据类型
ZEROFILL : 0填充,(如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性),如果指定了ZEROFILL只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可。

取值范围
create table t3(age int(5) zerofill);insert into t3 values(18);select * from t3;
create table t5(price double(5,3));insert into t5 values(23.32123);insert into t5 values(233.32123); //报错

区分

日期
①create table t6(t1 date,t2 time,t3 datetime,t4 timestamp);②insert into t6 values("2022-5-15",null,null,null);③insert into t6 values(null,"14:20:25","2011-10-22 10:20:30",null);
导入*.sql批处理文件

常用关键词
去重distinct
is null和is not null
and 和 or
比较运算符 > < >= <= = !=和<>
between x and y 两者之间
查询工资在2000到3000之间的员工信息
in关键字
查询工资等于5000,1500,3000的员工信息
//查询1号部门有哪几种不同的工作select distinct job from emp where dept_id=1;//查询1号部门中有上级领导的员工信息select * from emp where dept_id=1 and manager is not null;//查询工作是程序员,销售和人事的员工信息select * from emp where job in("程序员","销售","人事");//查询工资不在1000-2000之间的员工信息select * from emp where sal not between 1000 and 2000;//查询有奖金的员工信息 select * from emp where comm>0;
模糊查询like
//查询名字姓孙的员工信息select * from emp where name like "孙%";//查询工作第二个字是售的员工姓名和工作select name,job from emp where job like "_售%";//查询名字中包含僧并且工资大于2000的员工姓名和工资select name,sal from emp where name like "%僧%" and sal>2000;
排序order by
格式: order by 字段名 asc(升序默认)/desc(降序)
//查询所有员工姓名和工资并按照工资升序排序select name,sal from emp order by sal;select name,sal from emp order by sal asc;//查询所有员工姓名和工资并按照工资降序排序select name,sal from emp order by sal desc;
分页查询
//查询工资最高的员工信息select * from emp order by sal desc limit 0,1;//查询按照工资降序第2页的5条数据select * from emp order by sal desc limit 5,5;
别名
聚合函数
通过聚合函数可以对查询的多条数据进行统计查询,统计查询的方式包括:求平均值, 求最大值,求最小值,求和,计数
//平均值avg(字段名)查询1号部门的平均工资select avg(sal) from emp where dept_id=1;//查询销售的平均工资select avg(sal) from emp where job="销售";//最大值max(字段名)查询程序员的最高工资select max(sal) from emp where job="程序员";//最小值min(字段名)查询3号部门的最低工资select min(sal) from emp where dept_id=3;//求和sum(字段名)查询2号部门的工资总和select sum(sal) from emp where dept_id=2;//计数count(*)查询程序员的数量select count(*) from emp where job="程序员";
数值计算 - * / %
//查询每个员工的姓名,工资和年终奖(年终奖=5个月的工资)select name,sal,sal*5 年终奖 from emp;//给3号部门的员工每人涨薪5块钱update emp set sal=sal 5 where dept_id=3;
分组查询 group by
格式: group by 分组的字段名
//查询每个部门的平均工资select dept_id,avg(sal) from emp group by dept_id;//查询每个部门工资高于2000的人数select dept_id,count(*) from emp where sal>2000 group by dept_id;//查询每个部门有领导的员工的人数select dept_id,count(*) from emp where manager is not null group by dept_id;
having
//查询每个部门的平均工资要求平均工资高于2000select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;//查询每种工作的人数,只查询人数大于1 的select job,count(*) from emp group by job having count(*)>1;select job,count(*) c from emp group by job having c>1;//查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400select dept_id,sum(sal) s from emp where manager is not null group by dept_id having s>5400;//查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的select dept_id,avg(sal) a from emp where sal between 1000 and 3000 group by dept_id having a>=2000;
UTF8字符集
中文问题

mysql编解码图
//--1.语法错误:SQL syntax[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (`sno`,`con`,`degree`) at line 1//--2.未知列:查看表中是否存在con该字段[Err] 1054 - Unknown column con in field list//--3.超过列的值的范围:degree列的长度超了[Err] 1264 - Out of range value for column degree at row 1//--4.值数量与字段数量不匹配:[Err] 1136 - Column count doesnt match value count at row 1//--5.存在重复的主键列[Err] 1062 - Duplicate entry 3-105 for key PRIMARY//--6.定义了多个主键[Err] 1068 - Multiple primary key defined//--7.该表已存在[Err] 1050 - Table grade already exists//--8.找不到该表(该表不存在)[Err] 1051 - Unknown table grade//--9.数据库已存在,无法创建[Err] 1007 - Cant create database user; database exists//--10.数据库不存在,不能删除[Err] 1008 - Cant drop database school; database doesnt exist//--11.在where 语句中,6-166字段是未知的[Err] 1054 - Unknown column 6-166 in where clause//--12.日期格式不正确:取值范围:月:1-12 日:1-31[Err] 1292 - Incorrect datetime value: 1100-02-80 for column tbirthday at row 1//--13.子查询中返回字段数不唯一。[Err] 1241 - Operand should contain 1 column(s)//-- 错误13示例:子查询中只需要查询sid的值,实际查询了sid 和 sname的值select sname,sid from student where sid in(select sid,sname from sc where score is not null and score !="");//-- 14.子查询返回值不唯一[Err] 1242 - Subquery returns more than 1 row--错误14示例:子查询中sid返回的结果值不唯一,父句中的where条件后的sid不能用=连接,应用inselect sname,sid from student where sid = (select sid from sc where score is not null and score !="");//-- 注意,13和14的两种错误是不一样的。//--15.未选择数据库[Err] 1046 - No database selected//--16.该列的列类型使用的约束或其他有问题。例如自增不能用于varchar类型的数据[Err] 1063 - Incorrect column specifier for column id
学习记录,如有侵权请联系删除。
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图