数据库:
用来管理数据的仓库
主要功能:
增 删 改 查
开发中用到的数据库:
关系型数据库:
MySQL : Orcal公司
Orcal : Orcal 公司
SQL Server : MS公司
非关系型数据库:
Redis MongoDB
SQL 语句分类:
DDL: 数据库定义;
DML: 数据库操作;
DQL: 数据库查询;
DTL: 事物处;理 回滚
DCL: 数据控制;
链接数据库操作:
> 表示在CMD终端下的命令
mysql > 表示是一条mysql的语句
开启数据库的服务
net star mysql;
1 数据连接
mysql - hlocahost -uroot -p9052
mysql : 连接的是哪一个数据库,或者说这里启动的程序是mysql
-h : host 主机地址,-h 是IP地址,或者说是域名或者是电脑名当前我们操作的数据库是在本机,所以这里使用localhost 还可以使用127.0.0.1 或者说直接省略-h参数
-u user 后面的值是用户名,这里使用的是mysql数据库的root用户
-p password 连接数据库使用的密码,不建议密码在连接时给予
最好使用如下格式
mysql -uroot -p
Enter Password ****
2. 展示当前数据库服务器上的所有数据库
mysql > show databases;
3. 创建数据库;
mysql > create database javaee1903; javaee为所建的数据库的名称
4. 选择使用的数据库
mysql > use javaee1903;
5. 展示当前数据库中的所有数据表
mysql > show tables;
6. 创建数据表
mysql > create table student(
id int, //id 是字段名 int 是数据类型
name varchar(20), //name 字段名 varchar 是可变长字符串最大长度是20
age int, //age 字段名 int 数据类型
info text, //info 个人描述 text 数据类型,文本数据类型
score float(4, 1) //score 字段名 float(4, 1) 数据总长度最多为4,最多有一位小数 123.5
);
7. 描述表结构
mysql > desc student;
8. 删除表
mysql > drop table student;
9. 删除数据库
mysql > drop database javaee1903;
10. 查看创建数据表的一些参数
mysql > show create database javaee1903;
11. 查看创建数据表的一些参数
mysql > show create table student;
12 退出数据库
mysql >quit;
mysql > exit;
修改数据表结构alter
1. 添加一个新的字段 默认是添加到所有的字段之后
mysql > alter table student add classNlum int;
在指定的某一字段之后/前添加
mysql > alter table student add gender char(1) after/before ago ;
2. 修改指定字段的数据类型;
mysql > alter table student modify gender tinyint(1) ;
3. 删除指定的字段
mysql > alter table student drop classNum;
4. 同时修改名字和数据类型;
mysql > alter table student change info studesc varchar(30);
插入数据insert
1. 对应的字段数据挨个添加;
mysql > insert into student (id, name, age, gender, studesc, score)
values(1, "骚磊", 16, 0, "逗逼匿名君", 59);
2. 指定字段添加数据;
mysql > insert into student (id, name) value (2,"稻姐”);
3. 按照字段顺序添加数据
mysql > insert into student values(3, "宝哥哥", 66, 0, '2B宝哥', 66 );
inset into student values (4, "林妹妹", 16, 0, '班草', 76);
...
修改数据【慎用】update
1 没有任何条件约束,修改操作会修改指定表,指定字段的所有内容(不要这样用 )
mysql > update student set studesc = "错误的演示";
2. 修改数据需要加上约束条件
mysql > update student set studesc = "德云社" where id = 14;
删除数据【慎用】delete
1. 删除数据表中是所有内容(禁止这样用)
mysql > delete from student;
2. 删除操作也需要添加上条件
mysql > delete from student where name = "熊哥”;
mysql > delete from student where id = 6;
mysql > delete from student where age > 50;
查询语句【重要】select
1. 项目中不会使用的一条语句
mysql > selecr * from student;
2. 查询指定的字段
mysql > select name from student ;
mysql > select name, age from student;
3. 起别名查询
mysql > select name as "姓名" , age as "年龄”, from student;
4. 约束一定的条件
msql > select name as "姓名" , age as "年龄”, from student where id = 5;
还可以使用 <, >, >=, <=, != 不等于还可用<>表示
5,and or
and 表示与 or 或
mysql > select name as "姓名", age as "年龄", score as "成绩" from student where age < 30 and score > 50;
mysql > select name as "姓名", age as "年龄", score as "成绩" from student where age > 50 or score > 100;
6, 排序查询 order by
升序asc
mysql > select name as "姓名", age as "年龄", score as "成绩" from student order by age asc;
降序 desc
mysql > select name as "姓名", age as "年龄", score as "成绩" from student order by age desc;
第一个条件降序,如果出现在排序中相同的数据,按照其他条件升序
mysql > select name as "姓名", age as "年龄", score as "成绩" from student order by score desc, age asc;
只是排序女生的成绩,成绩降序,出现相同,年龄升序
mysql > select name as "姓名", age as "年龄", score as "成绩" -- 查询的内容
from student -- 从哪里查询
where gender = 1 -- 限制查询的条件
order by score desc, age asc; -- 排序的要求
7. 去重查询
mysql > select distinct score from student;
8. 分页查询【重点】limit
mysql > select * from student limit 10;-- 这里是查询10条数据
limit offset, length
mysql > select * from student limit 0, 10; -- 从第0行数据开始,获取10条数据
mysql > select * from student limit 10, 10; -- 从第10行数据开始,获取10数据
-- 前端点击1 2 3 表示 页码 pageCount 每一页展示10条数据
-- limint (pageCount - 1) * 10, 10
9. 内置函数
max min avg sum count
mysql > select max(score) from student;
mysql > select min(score) from student;
mysql > select count(1) from student; -- 速度稍稍高一点,
msyql > select count(*) from student;
10. 模糊查询
like - %
要求 哥 结尾,并且 哥 之前有一个字符
mysql > select * from student where studesc like "_哥";
-- 要求 哥 结尾,并且 哥 之前不限制字符
mysql > select * from student where studesc like "%哥";
-- 要求 哥 之后有一个字符,哥 之前不限制字符
mysql > select * from student where studesc like "%哥_";
-- 是哥就行!!!
mysql > select * from student where studesc like "%哥%";
11 分组查询 group by
mysql > select gender as "性别" ,count(1) as ”人数“ -- 需要查询的内容
from student -- 从 student表中查询数据
group by gender; -- 按照性别分组
-- 需要咋group by 之后使用where时将where换位having
mysql > select gender as "性别", count(1) as "人数" -- 需要查询的内容 ,count(1)人数
from student -- 从 student表中查询数据
group by gender -- 按照性别分组
having count(1) > 10; -- 分组之后在约束条件,要求人数大于10
数据约束
默认值
-- default 修饰的数值在未被赋值的情况下时默认值
mysql > create table person1(
id int,
name varchar(20),
country char(20) default "中华人民共和国"
);
+---------+-------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+-----------------------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| country | char(20) | YES | | 中华人民共和国 | |
+---------+-------------+------+-----+-----------------------+-------+
但是default修饰的数值也可以在被赋值。
非空
mysql > create table person2 (
id int,
name varchar(20) not null, -- 要求name属性非空
age int
);
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
-- 如果是要求非空,必须有对应的数据 如果没有数据就会报错
-- 错误的提示是ERROR 1048 (23000): Column 'name' cannot be null:
唯一
-- unique 当前的字段不可以重复
mysql > create table person3(
id int unique, -- 要求ID字段唯一,不可以重复
name varchar(20) not null,
info text
);
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | UNI | NULL | |
| name | varchar(20) | NO | | NULL | |
| info | text | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
-- 要求id不能重复,重复时报错, ERROR 1062 (23000): Duplicate entry '2' for key 'id'
null是一个无效数据,唯一判定中不做要求!!!
mysql > insert into person3(id, name, info) values(null, "骚磊", "就是这么的骚");
mysql > insert into person3(id, name, info) values(null, "马赛克", "裁判队专用外号");
-- 这样不会报错
主键
-- 非空 唯一 not null + unique 使用关键字 primary key
-- 主键作为i当前数据的唯一标识, 主键修饰的字段不能作为带有逻辑业务的字段
mysql > create table person4(
id int primary key, -- id作为主键
name varchar(20) not null,
info varchar(30)
);
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | NO | | NULL | |
| info | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
自增长
--自增长的字段必须时一个key 关键字是 auto_increment
mysql > create table person5(
id int primary key auto_increment, -- ID是主键字段,并且自增长
name varchar(20) not null,
info varchar(20) not null
);
若在1、2、之后直接插入5,然后在使用自增长是,下一个id会是6
delete操作不会影响自增长但是truncate会
级联操作
-- 级联删除和级联修改
-- 删除: on delete cascade
-- 修改:on update cascade
mysql > create table employee(
id int primary key auto_increment,
empName varchar(20) not null,
deptId int not null, -- 部门ID号,用于连接部门表
-- 外键约束
constraint emp_dept_fk foreign key(deptId) references dept(id) -- 外键约束
on delete cascade -- 级联删除要求
on update cascade -- 级联修改要求
);
-- 修改主表中的数据,从表中使用到组表数据的字段也会被修改
删除主表数据,从表中使用主表数据的数据行,也会被同时删除!!!
联表查询
mysql > select employee.id, employee.empName as "姓名", dept.deptName as "部门" -- 查什么
from employee, dept -- 从哪里查
where employee.deptId = dept.id; -- 查询的条件
-- 查询的结果是没有任何问题,但是表名忒长了!!!
-- 这里可以给表名起一个别称
mysql > select e.id, e.empName as "姓名", d.deptName as "部门"
from employee e, dept d
where e.deptId = d.id;
-- inner join 内联查询
mysql > select e.id, e.empName as "姓名", d.deptName as "部门"
from employee e
inner join dept d -- 内连接查询
where e.deptId = d.id
and d.deptName = "贱部";
where也可以用on代替
-- 外连接查询分 左 右
-- 左外连接查询
-- 对应部门的员工,部门作为左表
使用左外链接查询,左表一定展示数据,右表作为左表的匹配,如果右表没有匹配的数据,展示为null