软件安装
- MySQL安装过程的步骤:按照上述链接一步一步安装即可
- MySQL端口号是:3306
- 管理员名字:root
-
采用cmd窗口命令登录
打开cmd窗口,使用mysql命令,使用root用户登录 mysql -uroot -pxxx
- 使用root用户,以ip地址形式登录数据库 mysql -h 127.0.0.1 -u root -pxxxx
SQL语句分类
```plsql SQL特点 sql语句是一个非过程性的语言,每一条sql执行完都会有一个具体的结果出现。多条语句之间没有影响过程性语言:例如java。 int a = 10; int b = 23; int sum = a + b; SQL的作用 sql语句主要是操作数据库,数据表,数据表中的数据记录 - DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create drop alter truncate(清空数据记录) show等
- DML(Data Manipulation Language)数据操作语言★★★ 在数据库表中更新,增加和删除记录。如 update(更新), insert(插入), delete(删除) 不包含查询
- DQL(Data Query Language) 数据查询语言★★★★★ 数据表记录的查询。关键字select。
- DCL(Data Control Language)数据控制语言(了解)
是用来设置或更改数据库用户或角色权限的语句,如grant(设置权限),revoke(撤销权限),begin transaction等。这个比较少用到。
<a name="DaHTI"></a>#### sql字段类型<br /> 1.数据型<br /> 1.Java<br /> 整型byte short int long(1 2 4 8)字节<br /> 浮点型 float double<br /> 2,sql<br /> 整型 tinyint smallint int bigint (1 2 3 4 8 )字节<br /> 浮点型(int double)<br /> 常用(int double)<br /> 2.字符型<br /> 1.Java<br /> char:2个字节<br /> String:字符串<br /> 2.sql<br /> char:字符 name char(10) 表示字符长度固定为10 ,如果不足自动用空格补足<br /> varchar:可变的字符variable char, name varchar(10) 表示字符长度最大为10,按实际占用计算<br /> varchar 省存储空间,但是char效率更高一些<br /> (varchar常用 char 可能用到)<br /> 3.日期型<br /> 1.date:年月日<br /> 2.time:时分秒<br /> 3.datetime:年月日时分秒<br /> 4.timestamp:年月日时分秒系统当前时间<a name="LJlQC"></a>#### 练习:<a name="zS78f"></a>#### 创建数据库练习```sql# 0.创建数据库练习# 1.直接创建数据库db3create database db3;# 2.判断是否存在并创建数据库db4create database if not exists db4;# 查看仓库的创建语句show create database db4;# 3.查看所有的数据库show databases ;# 4.删除db3数据库 remove delete drop truncatedrop database db3;# 5.查看正在使用的数据库select database();# 6.使用db4数据库use db4;
创建表练习
- 需求:设计一张学生表,请注重数据类型、长度的合理性
1.编号
2.姓名,姓名最长不超过10个汉字
3.性别,因为取值只有两种可能,因此最多一个汉字
4.生日,取值为年月日
5.入学成绩,小数点后保留两位
6.邮件地址,最大长度不超过 64
7.家庭联系电话,不一定是手机号码,可能会出现 -
8.学生状态(用数字表示,正常、休学、毕业…)create table student(id int,name varchar(10),sex char(1),birthday date,score double,email varchar(64),tel varchar(20),status int);

相当于class Student {
private int id;
private String name;
}更改表练习
```sql— 1.修改student表名为stu
alter table student rename to stu;— 2.给学生表添加一列remark,类型为varchar(20)
alter table stu add remark varchar(20);— 3.修改remark列的类型是varchar(100)
alter table stu modify remark varchar(100);— 4.修改remark列的名变为intro,类型varchar(30)
alter table stu change remark intro varchar(30);— 5.删除intro列
alter table stu drop intro;
— 查询所有的表 show tables; — 查询表创建语句 show create table stu; — 查询表结构 desc stu; — description 详情 — 删除 drop table stu;
<a name="aXQuM"></a>#### 添加数据```sql# -- 1.创建表create table student2(id int,name varchar(20),age int,birthday date,sex char(2),address varchar(100));show tables;# -- 2.插入部分数据,给id name age sex赋值/*1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以*/insert into student2(id,name,age,sex) values(1,'zs', 18 , '男');# -- 3.插入所有的字段,不写字段名insert into student2 values(2,'ls',19,'1995-01-01','女','上海');# -- 4.插入所有的字段,写出字段名insert into student2(id, name, age, birthday, sex, address)values(3,'ww',19,'1996-01-01','男','杭州');# -- 5.批量插入数据insert into student2values (4,'ml',21,'1996-01-01','男','杭州'),(5,'qq',22,'1997-01-01','男','南京');# -- 插入数据注意# -- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用nullinsert into student2values (6,'sb',22,'1998-01-01','男',null);
修改数据
# -- 1.修改数据:修改性别都变为女(不安全:如果修改语句不加条件,默认是全选)update student2 set sex = '女';# -- 2.修改数据:带条件修改id是2的学生性别变为男update student2 set sex = '男'where id = 2;# -- 3.一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京update student2 set age = 26,address = '北京'where id = 3;
删除数据
# -- 1.带条件删除数据,删除id是3的记录delete from student2where id = 3;# -- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2delete from student2where id in (1,2); /* where id 1 or 2; 也行 */# -- 3.不带条件删除# -- 还可以使用:DDL# -- 这里的table可以省略delete from student2; -- 删除表中所有的数据(可以撤销)truncate table student2; -- 删除表中所有的数据(不可以撤销)start transaction ;delete from student2; -- DMLrollback ;start transaction ;truncate table student2; -- DDLrollback ;
查询数据

写出查询每列的名称:



# 7.带条件的查询# -- 1.查询数学成绩大于80学生select * from student3 where math > 80;# -- 2.查询英语成绩小于等于80学生select * from student3 where english <= 80; -- 小于或等于# -- 3.查询年龄等于20的学生select * from student3 where age = 20;# -- 4.查询年龄不等于20的学生select * from student3 where age != 20;select * from student3 where age <> 20; -- 大于或小于,就是不等于# -- 5.查询年龄大于35并且性别是男的学生select * from student3 where age > 35 and sex = '男'; -- && 与# -- 6.查询年龄大于35或者性别是男的学生select * from student3 where age > 35 or sex = '男'; -- || 或# -- 7.查询id是1 3 5的学生select * from student3 where id = 1 and id = 3 and id = 5;select * from student3 where id in (1 , 3 , 5); -- 简写# -- 8.查询id不是1 3 5的学生# -- not in 是in的取反,表示不在什么其中select * from student3 where id != 1 and id != 3 and id != 5;select * from student3 where id not in (1 , 3 , 5); -- 简写# -- 范围查询# -- 9.英语成绩在75和90之间select * from student3 where english >= 75 and english <= 90;select * from student3 where english between 75 and 90; -- between:在...之间,
排序
聚合函数:
— 介绍:多个数据进行计算,结果只有一个
— 常用:sum(求和) avg(平均) count(统计)max(最大值)min(最小值)
— 注意: null不是数据,表示没有数据,不会被聚合函数列入运算
# -- 16.查询学生总数即有多少名学生select count(id) from student3; -- 8个select count(english) from student3; -- 7个 柳青没考 english的值为nullselect count(*) from student3; -- * 表示所有 只有一行数据有一个列有值就会列入运算# -- 17.查询数学成绩总分数select sum(math) from student3; -- 636# -- 18.查询数学成绩最高分数select max(math) from student3; -- 99# -- 19.统计数学和英语总和值# -- 实现一:分别统计数学和英语的每个总成绩,然后进行相加select sum(math) from student3; -- 636select sum(english) from student3; -- 570select sum(math) + sum(english) from student3; -- 1206# -- 实现二:分别统计每个人的数学和英语成绩,然后将每个人的数学和英语成绩相加select sum(math + english) from student3; -- 1120select math + english from student3; -- 先求每个人的数据成绩总和,然后聚合运算select math,english from student3;select math ,ifnull(english , 0) from student3; -- if english is null then english = 0;select math + ifnull(english , 0) from student3;select sum(math + ifnull(english , 0)) from student3; -- 1260/*结果是:380 少了柳岩的90sum(math+english):问题原因:解决上述问题:使用mysql自带函数:ifnull(字段值,默认值)说明:ifnull(字段值,默认值)如果字段值是null,那么使用默认值作为ifnull函数的整体结果如果字段值不是null,那么使用字段值作为ifnull函数的整体结果举例:ifnull(english,0):1)假设english的值是null===>ifnull(null,0)===>整体结果是02)假设english的值是80===>ifnull(80,0)===>整体结果是80*/
分组
// 准备数据create table car(id int,color char(2),price float);insert into car(id,color,price) values(1,'黄色',16);insert into car(id,color,price) values(2,'黄色',16);insert into car(id,color,price) values(3,'蓝色',5);insert into car(id,color,price) values(4,'红色',60);insert into car(id,color,price) values(5,'白色',8);insert into car(id,color,price) values(6,'红色',60);# -- 1.查询每种颜色车辆的总价select sum(price) from car; -- 查询所有汽车的总价select * from car group by color; -- 查询每种颜色车的单价select color , sum(price) from car group by color; -- 查询每种颜色车的总价# -- 2.查询每种颜色车辆总价大于30车辆的颜色和总价select color , sum(price) from car group by colorhaving sum(price) > 30; -- having 后面跟聚合函数 (因为此时聚合函数还没执行)
select语句执行顺序
<br /> select 字段 聚合函数 五<br /> from 表名 一<br /> where 条件 二<br /> group by 字段分组 三(聚合函数在分组之后运行的)<br /> having 条件2 四(一般跟分组一起使用,对分组结果进行过滤)<br /> order by 排序字段 六<br /> limit 限制 七<br /> 1,select语句必须有select 和 from关键字<br /> 2.其他关键字可以有可以没有,但是如果有,书写必须按照指定顺序<br /> 3.每个关键字后的数字表示其执行的顺序<br /> 4.where效率比having高的,但是where中不能使用聚合函数
-- 4.查询车的单价大于15的每种颜色车辆总价大于30车辆的颜色和总价select color,sum(price)from carwhere price > 15group by colorhaving sum(price) > 30;
分页
select * from car; -- 查询所有 在开发中不会用-- 1.数据量太多,服务器压力大-- 2.用户也不需要-- 分页查询:比如一页显示2条数据,总共6条分3页select * from car limit 0 , 2; -- 从0索引开始,查询最多2条记录select * from car limit 0 , 2; -- 第一页select * from car limit 2 , 2; -- 第二页select * from car limit 4 , 2; -- 第三页-- 假设limit index , count: 且当前页码为page-- 已知count和page的前提下求index-- index = (page - 1) * count


