数据库

数据库分为关系型数据库和非关系型数据库

关系型数据库

  1. 是以二维表的形式存储
  2. 常见数据库:

sql sever 收费 中大型数据库
Oracle 收费 甲骨文 超大型公司适用
DB2 收费 IBM(银行/电信)
mysql 免费
瑞典mysql AB 学习 sqlite
迷你数据库 嵌入式设备中 电视机顶盒
设置mysql的字体:mysql --default-character-set=gbk -uroot -proot

名词介绍

  • 数据库服务器:数据库服务器其实就是一个软件,比如我们安装的mysql软件(或者mariadb软件)mysql服务器软件需要安装在服务器硬件上(就是一台计算机)才可以让外界来访问

  • 数据库:在mysql服务器中,可以创建很多的数据库(database) 通常情况下,一个web站点对应一个数据库

  • 数据表:在数据库(database)中,可以创建很多张表(table)通常情况下,一张表用于保存一类数据,例如网站中的所有用户信息会保存在一张表中,所有商品信息会保 存在另一张表中。

  • 表记录:数据表(table)中,可以插入很多条表记录 数据表往往保存一类数据,对应java中的一个类。一条表记录往往对应java中的一个具体的实例。

MySql建库建表

查看数据库、查看数据表

1、查看mysql服务器中所有数据库

show databases;

2、进入数据库

use test;

3、查看当前库中的所有表

show tables;

提示: mysql数据库不区分大小写

创建数据库、创建数据表

1、创建数据库

–删除mydb1库(如果存在)
drop database if exists mydb1;
‐‐ 重新创建mydb1库
create database mydb1 charset utf8;

2.查看、进入mydb1库

show databases;
use mydb1;

3、创建数据表

‐‐ 删除stu学生表(如果存在)
drop table if exists stu;

   --创建stu学生表  

         create table stu(    
          id int,           ‐‐ 学生编号  
         name varchar(20), ‐‐ 学生姓名    
         gender char(1),   ‐‐ 学生性别 
         birthday date,    ‐‐ 出生年月
        score double      ‐‐ 考试成绩 ); 

‐‐ 查看表结构
desc stu;

char、varchar、text都可以表示字符串类型,其区别在于:
(1)char在保存数 据时, 如果存入的字符串长度小于指定的长度n,后面会用空格补全。
(2)varchar和text保存数据时, 按数据的真实长度存储, 剩余的空间可以留给别的数据用.
(3)char会造成空间浪费(不足指定长度的会用空格补全), 但是由于不需要计算数据的长度, 因此速度更 快。(即以空间换时间)
(4)varchar和text是节省了空间,但是存储的速度不如char快,因为要计算数据的实际长度。(即以时间 换空间)

日期类型
  1. date:年月日
  2. time:时分秒
  3. datetime:年月日 时分秒
  4. timestamp:时间戳(实际存储的是一个时间毫秒值),与datetime存储日期格式相同。
    timestamp大表示2038年,而datetime范围是1000~9999
    timestamp在插入数、修改数据时,可以自动更新成系统当前时间
字段约束

– primary key(主键约束):表示当前列的值不能为空且不能重复
– unique(唯一约束):表示当前列的值不能重复
– not null(非空约束):表示当前列的值不能为空
–auto_increment(自动增加):一般设为主键自动增加添加数据时候可以写null

SQL语句

1 什么是SQL语言?

Structured Query Language:结构化的查询语言 SQL是操作所有关系型数据库的通用的语言 SQL语言的分类:
DDL ‐‐ 数据库定义语言,指CREATE、ALTER、DROP等操作( 即创建、删除、修改数据库和数据表 )
DML ‐‐数据操作语言,指INSERT、UPDATE、DROP等操作( 即数据表中数据的增、删、改操作 )
DQL ‐‐数据查询语言(指SELECT操作,即数据表中数据的查询操作)

更新表记录(insert/update/delete)

insert‐‐插入表记录

插入记录的语法: insert into 表名(列1,列2…) values(值1, 值2…);
‐‐insert用于向指定的表中插入哪些列, 以及给予哪些值 如果要为所有的列插入值, 可以省略表名后面的列列表,例如: insert
into 表名 values(值1, 值2…);

注意: (1)只能在给所有列插入值时, 才可以省略列列表, 否则会报错
(2)在插入值时, 如果没有省略列列表, 那么列列表和值列表要一一对应
(3)在插入值时, 如果省略了列列表, 那么值列表中值的顺序要和声明列的顺序一致
(4)在插入字符串和日期时, 字符串和日期要用单引号引起来。

在这里插入图片描述
因此,在通过CMD访问数据库时,好一登录就设置 “set names gbk”,即可避免在插入数据时或者查询 数据时数据乱码

update‐‐修改表记录

update 表名 set 需要修改的列
update stu set score=score+10

delete‐‐删除表记录

delete from 表名 where 需要操作的列
delete from stu where name='王海涛';

书写规范

SQL语句的书写顺序:
select…
from…
where…
group by…
order by…
SQL语句的执行顺序:
from… – 确定要查询的是哪张表 (定义表别名)
where… – 从整张表的数据中进行筛选过滤
select… – 确定要显示哪些列 (定义列别名)
group by… – 根据指定的列进行分组
order by… – 根据指定的列进行排序

like模糊查询

查询emp表中姓名中以"刘"开头的员工,显示员工姓名。

 select name from emp
 where name like '刘%';

%和_都是通配符,表示任意的字符 但是 % 表示任意0~多个字符 _ 表示一个任意的字符
在这里插入图片描述

排序查询

对查询的结果进行排序使用 order by关键字。

order by 排序的列 asc 升序 ↑(默认可以不写)
order by 排序的列 desc 降序 ↓

分组查询

对所查询的记录可以根据某一列进行分组, 分组使用group by。
‐‐ 将员工按照部门进行分组

 select * from emp group by dept;
聚合函数查询

max()或min() ‐‐ 返回某列的大值或小值
count() ‐‐ 返回某列的行数
sum() ‐‐ 返回某列值之和
avg() ‐‐ 返回某列的平均值
ceil(数值) ‐‐ 向上取整
floor(数值) ‐‐ 向下取整
round(数值) ‐‐ 向下取整
rand(数值) ‐‐ 随机数

a) 可以使用count(*)统计记录行数
b) 多个聚合函数可以一起查询

‐‐ 例如:根据部门进行分组,统计每个部门员工人数和平均薪资
select dept, count(*) 员工人数, avg(sal) 平均薪资 from emp group by dept;

c) 聚合函数不能用在where子句中
d) 在没有分组的情况下,聚合函数不能和其他普通字段一起查询

在这里插入图片描述

外键和表关系

外键:唯一标识其他表中的一条记录,用来通知数据库两张表列与列之间的对应关系, 并让数据库帮我们维 护这样关系的键就叫做外键。
外键作用: 确保数据库数据的完整性和一致性

添加外键: 例如:foreign key(dept_id) references dept(id)

备份数据库

打开cmd命令:

输入 mysqldump -uroot -p 库的名字 > 保存在哪里
mysqldump -uroot -p db10 > d:/db10.sql
读取数据 mysql -uroot -p db10 < d:/db10.sql

分页查询

在mysql中,通过limit进行分页查询: limit (页码-1)*每页显示记录数, 每页显示记录数
38.查询emp表中的所有记录,分页显示:每页显示5条记录,返回第 1 页。

   select * from emp limit 0, 5;
     select * from emp limit 5, 5;
     select * from emp limit 10, 5;
     select * from emp limit 15, 5;

关联查询、外连接

笛卡尔积查询

select * from emp,dept;

内连接:和笛卡及一样只是用法不一样

  select * from dept inner join emp on dept_id = dept.id;

左外连接:是在内连接查询的基础上, 加上左边表有但是右边表没有(显示为null)的记录

  select * from dept left join emp on dept_id = dept.id;

右外连接:是在内连接查询的基础上, 加上右边表有但是左边表没有(显示为null)的记录

select * from emp right join dept on dept_id = dept.id;

– where是在分组之前进行过滤, 在where子句中, 不可以使用列别名和聚合函数
– having是在分组之后进行过滤, 在having子句中, 可以使用列别名和聚合函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值