1.数据库概念
1.数据库的出现是为了解决文件存储的弊端 比如你要存一句话到一个1tb的文件你必须要将这itb的文件调用到内存中这是不可能的
2.DBMS 指大型数据库管理软件 如mysql DB指单个数据库
3.常见的DBMS oracle 大型收费 mysql 中小型开源免费数据库 SQLsever 微软独占中型数据库
4.SQL 指操作关系型数据库的结构化查询语言 定义操作所有关系型数据库的统一标准
2.MySQL
1.在官网 下载压缩包解压后的文件夹就是MySQL软件本体了 具体配置看b站
2.在cmd上操作要使用管理员权限 登录mysql -u用户名 -p密码 退出exit
3.创建一个数据库使用 create database db1; 对应在data目录下就多一个文件夹
4.db.frm
是表结构文件,db.MYD
是存数据的文件,通过这两个文件就可以查询到数据展示成二维表的效果。
3.SQL
1.语法以分号结尾无论单双行 无论怎么敲回车只要没有分号 不区分大小写!
2.建议关键字开头大写
3.单行注释: – 注释内容 或 #注释内容(MySQL 特有) 多行注释: /* 注释 */
4.SQL语句分类
DDL简单理解就是用来操作数据库,表等
DML简单理解就对表中数据进行增删改
DQL简单理解就是对数据进行查询操作
DCL用来定义数据库的访问权限和安全级别,及创建用户
4.DDL
1.DDL操作库
1.查询所有数据库 SHOW DATABASES;
2.创建数据库
CREATE DATABASE 数据库名称;
CREATE DATABASE IF NOT EXISTS 数据库名称; 如果没有存在就创建
3.删除数据库
DROP DATABASE 数据库名称;
DROP DATABASE IF EXISTS 数据库名称; 如果存在此数据库就删除
4.使用数据库 use 数据库名称;查看当前使用的数据库SELECT DATABASE();
2.DDL操作表
对表进行增(Create)删(Delete)改(Update)查(Retrieve)。
1.查询当前数据库下所有表 SHOW TABLES; 查询表的结构 DESC 表名称;
2.创建表
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
3.数据类型
一个数字的用tinyint 多个数字的用int
小数用double(总共最长几位,小数点后有几位)如score double(5,2)
日期用 date 只包含年月日 datetime 还包含秒
char (长度)定长 存储性能高但浪费空间 如学号 性别等确定位数的
varchar(最高长度)不定长 存几个就占几个空间 但浪费时间 如姓名 住址等
4.删除表 DROP TABLE 表名;或DROP TABLE IF EXISTS 表名;
5.修改表
修改表名 ALTER TABLE 表名 RENAME TO 新的表名;
添加一列 ALTER TABLE 表名 ADD 列名 数据类型;
修改数据类型 ALTER TABLE 表名 MODIFY 列名 新数据类型;
修改列名和数据类型 ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
删除列 alter table 表名 drop 列名;
5.Navicat
1.是一个相当于java idea的软件 用于替代cmd更简便的使用mysql
2.使用 点击链接 mysql 填写关键信息 主机名就localhost 端口3306
3.操作 右键表名 设计表 可以直接修改字段名 类型等
4.编写sql语句 点击 查询 新建查询 在查询编辑器编写 点击运行运行全部或右键sql语句运行
5.为什么一定要使用sql语句而不直接用Navicat 当你用linux时就知道了 还有编写java连接数据库时也要使用
6.字段 就是一列属性的描述 如姓名 zcy zcy2
记录(也叫元组)就是一行属性的具体描述 如 zcy 21 43022…
7.当表格中出现两个一模一样的 zcy 21时 这种情况叫做冗余 而唯一标识的编号就叫主键
外键 再新建一个表来标识 主表中的关键信息 避免主表中出现过多重复信息
6.DML
1.添加数据
给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
直接给所有列添加数据 相当于添加一行数据 INSERT INTO 表名 VALUES(值1,值2,…);
批量添加数据INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
也可省略列名 INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
2.修改数据
将张三的性别改为女 update 表名 set sex = ‘女’ where name = ‘张三’; 一般用主键
将张三的性别改为女 年龄概为30 update 表名 set sex = ‘女’,age=30 where name = ‘张三’;
注意:如果update语句没有加where条件,则会将表中所有数据全部修改!
删除记录一行 delete from 表名 where name = ‘张三’; 删除所有 delete from 表名;
7.DQL 查询
将数据库表中的部分数据展现出来就叫查询,这是数据库最重要的操作
1.基础查询
1.语法 查 询字段 SELECT 字段列表 FROM 表名; 可以用*号表示所有字段列 SELECT * FROM 表名 就相当于把整张表展示了
2.去除重复 如去除有重复地址的行 select distinct address from stu;
3.查询并起别名 select name,math as 数学成绩,english as 英文成绩 from stu; as可以省略
2.条件查询
1.语法 SELECT 字段列表 FROM 表名 WHERE 条件列表; 条件可以使用大于小于 不等于 or and not is null等
如查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息 select * from stu where age >= 20 && age <= 30;
也可以使用 between … and 来实现上面需求 select * from stu where age BETWEEN 20 and 30;
查询英语成绩为空的 select * from stu where english is null; 必须要用is null不能用=
2.模糊查询 使用like关键字
_ : 代表单个任意字符 % : 代表任意个数字符
如查询姓马的同学 SELECT * FROM stu WHERE name like’马%’;
查询第二个字是花的SELECT * FROM stu WHERE name like’_花%’;
查询名字中包含 ‘德’ 的学员信息 select * from stu where name like ‘%德%’;
3.排序查询
1.语法 order by
- 排序方式有 ASC : 升序排列 **(默认值可不写)**DESC : 降序排列
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
2.例查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc , english asc ;
4.聚合函数
用函数来筛选列中的一个 或对整列进行求和 等
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
语法
SELECT 聚合函数名(列名) FROM 表;
5.分组查询
将一个字段中的不同属性分组并使用聚合函数查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
1.查询男同学和女同学各自的数学平均分以及各自人数要求:分数低于70分的不参与分组
select sex, avg(math),count(*) from stu where math > 70 group by sex;
6.分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
索引从0开始 0表示第一条 2 要确定每页显示多少条即查询条目数
例:每页显示3条数据,查询第2页数据 (第二页数据从3开始)
select * from stu limit 3 , 3;
由此可得 起始索引 = (当前页码 - 1) * 每页显示的条数