关系型数据库:
oracle ===》收钱,大型的公司
msyql ===》开源的 免费的
sql server ===>微软
非关系型数据库:
hbase ===>大数据‘
Redis
mangdb
下载mysql:
yum install mysql
yum install mysql-server
rpm -qa |grep -i mysql ===》查看数据库有没有安装好
service mysqld restart ===>重启数据库 ===>mysql后面的d代表是一个守护进程daemon
service mysqld start ====》启动数据库
service mysqld stop ===>关闭数据库
mysql -uroot -p ====》u是用户 -p 是密码
exit ===》等同于ctrl+c 退出数据库界面
mysqladmin -uroot password "123456" ===》修改数据库密码为123456
数据库sql
show databases; ====》查看所有的库
create database dcs46; ===》创建一个仓库叫做dcs46
drop database dcs46; ===》删除dcs46这个库
use dcs46; ===》进入dcs46这个库
select database(); ===》查看当前在那个库
create table test(id int(20) primary key auto_increment,score float(20,2) not null
,name varchar(10),phone bigint(20) default 15377894561,time date);
上面建表的语句解释
创建一个叫做test的表,表里面有id字段 score字段,name字段 phone字段 time字段
desc test; ===》查看表结构
mysql> desc test;
+-------+-------------+------+-----+-------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+-------------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| score | float(20,2) | NO | | NULL | |
| name | varchar(10) | YES | | NULL | |
| phone | bigint(20) | YES | | 15377894561 | |
| time | date | YES | | NULL | |
+-------+-------------+------+-----+-------------+----------------+
Field ==》字段
Type ===>数据类型
Null ===》是否可以为空
Key ===》primary key 主键
Default ===》默认值
Extra ==》额外的备注
数据库中常用的数据类型:
数值型:
int ===》整数 最大的存储值为:2147483647
bigint ====>可以存储超过2147483647这个数字
float ===》浮点型
文本型:【varchar类型和char类型存的数据需要加上双引号或单引号】
varchar ===>存字符串(不管是中文还是英文 都占2个字节 空格也是一个字符)
char ====》存字符串(英文占1个字节,中文占2两个字节 空格不算字符只能算占位符)
日期型:【日期型的数据也需要加上单引号或者双引号】
date ===>"2024-08-23"
数据库中的约束有哪些?
not null ===>非空约束
primary key ===>主键约束,里面的数据不能重复必须是唯一的
default ====>默认值约束 不填写就用默认值
auto_increment ===>自增长约束 1 ====》1+1 前面四个约束是对表数据的约束
foreign key ===>外键约束 对表和表之间的约束
对表结构的操作:alter table +表名
show tables; ===》查看当前库下有哪些表
alter table test1 rename dcs111; ===》将test1这个表的名字改为dcs111
alter table test change id sid int(10); ===>将test表中的id字段改为sid 并去掉自增长
alter table test change sid id int(10) auto_increment; ===>将test表中的sid字段改为id 并加上自增长
alter table test add class int(10); ===》加上一个class字段(默认放在最后面)
alter table test add sex int(10) first; =》加上一个sex字段放在最前面
alter table test add sex1 int(10) after id;=》添加一个sex1字段放在id字段后面
alter table test modify class int(10) after id; ==》将已经存在的class字段移动到id字段后面
alter table test add(age1 int(10),age2 int(10)); ==》同时添加两个字段
alter table test drop sex1,drop age1,drop age2; ===》删除字段
drop table test; ==》删除test表
插入数据:
insert into 表
insert into test(id,score,name,phone,time)values(1,88.88,"zhangsan",17326056700,"2024-08-24");
insert into test values(2,98.02,"lisi",17326056800,'2024-08-25'); =》第二种插入数据的方式
insert into test(id,score,name,phone,time)values(3,78.00,"zhaoliu",17326056900,"2024-08-23"),(4,66.66,'xiaozhou',17326056400,"2024-01-02");===》批量插入数据
insert into test(score,name,time)values(88.88,"zhangsan","2024-08-24"); ===》给指定字段插入数据
0不等于null ,null指的是一个空的属性,0代表的是一个值
面试题:给你一张表里面的一个字段怎么测试?
数据类型
约束类型
存储值的边界值
删除:delete from +表名
delete from test; ===》删除表中数据
delete from test where id=10; ==》删除指定数据,删除id为10的这条数据
truncate test; ====》快速删除表中数据
drop table test ===》删除test这张表
truncate,delete from,drop的区别
truncate:快速删除表中所有的数据,适用于删除大量的数据
delete from ===》根据条件删除数据,如果不接where会删除表中所有的数据,但是执行的速度没有truncate快
drop ====>删除表和表结构
修改表中数据:update
update student set math=81 where id=10; ===》修改id字段为10 的这个人的分数为81
查的sql:
1.不等于
select * from student where id<>2; ===>查询id不等于2的所有信息
select * from student where id!=2; ===>查询id不等于2的所有信息
2.同时满足多个条件,至少满足一个条件
select * from student where age>24 and age<31; ===》查询年龄大于24.小于31岁的信息
select * from student where age=28 or age=27; ===》查询年龄等于28或者年龄等于27的信息
3.包含和不包含
select * from student where class in (1833,1835); ==》查询班级为1833或1835的信息
select * from student where class not in (1833,1835); ==》查询班级不是1833或1835的信息
4.在.....之间 between的值包含自身
select * from student where age between 24 and 31; ==》查询年龄在24-31之间的信息
5.为空 不为空
select * from student where class is null; ==》查询班级为空的
select * from student where class is not null; ==》查询班级不为空的
6.查询指定行数
select * from student limit 5; ===》查询前五行的内容 等同于 limit 0,5
select * from student limit 2,5; ===》查询3-7行的数据 3-1=2 7-2=5
7.模糊匹配
select * from student where name like "xi%"; ===>查询姓名以xi开头的信息
select * from student where name like "%qi"; ==》查询姓名以qi结尾的信息
select * from student where name like "%ao%";-=》姓名中带有ao的信息
select * from student where name like "xiaoli_"; ===》_表示一个字符
8.排序
select * from student order by math; ===》order by 默认是升序排序
select * from student order by math desc; ===》desc是降序排序
select * from student order by math asc; =====》acs是升序排序
9.分组 group by +字段 ==> 分组函数 group by
select count(),class from student group by class; ====>求每个班级的人数
select count() as "班级",class as "人数" from student group by class; ===》给查询出来的字段取别名
select count(*) a,class b from student group by class; ===》给查询出来的字段取别名
select * from (select max(math)a from student )b where a>90;
常用的聚合函数:
count(*) 统计
sum(math) 求和
avg(math) 求平均
max(math) 求最大值
min(math) 求最小值
distinct(math) 去重
注意点:group by
1.分组函数 group by 只能和聚合函数一起使用,还有分组的字段
2.where后面可以接group by 但是group by后面不能接where
3.group by 前面加where是为了先过滤在分组,where条件中不能包含聚合函数 统计,求和.....
4.where后面接group by 是为了先过滤在分组,having是跟group by连在一起用的,放在group by的后面,此时having的作用是先分组在过滤
1.求出每个班级数学成绩大于80分的人数
select class,count(*) from student where math>80 group by class;
2.求出每个班级性别为1的数学总成绩
select class,sum(math) from student where sex=1 group by class;
3.求出每个班数学总成绩大于200的班级和成绩信息
select class,sum(math) from student group by class having sum(math)>200;