1前置知识
1.1什么是数据库?
数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 像我们日常访问的电商网站,以及头条、抖音类的app,那这些所看到的数据,其实都是存储在数据库中的。最终这些数据,只 是在浏览器或app中展示出来而已,最终数据的存储和管理都是数据库负责的
1.2数据存储
数据是如何存储在数据库中的,那要如何来操作数据库以及数据库中所存放的数据?
数据库管理系统(DataBase Management System,简称DBMS)
DBMS是操作和管理数据库的大型软件。只需要操作这个软件,就可以通过这个软件来操 纵和管理数据库。
1.3操作数据库
DBMS这个软件怎么知道要操作的是哪个数据库、哪个数据?是对数据做修改还 是查询?
需要给DBMS软件发送一条指令,告诉这个软件我们要执行的是什么样的操作,要对哪个数据进行 操作。而这个指令就是SQL语句。
SQL(Structured Query Language,简称SQL):结构化查询语言,它是操作关系型数据库的编 程语言,定义了一套操作关系型数据库的统一标准。学习数据库开发,最为重要的就是学习SQL语 句 。
1.4数据库分类
Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。(通常是不差钱的公司会选择使用这 个数据库)
MySQL:开源免费的中小型数据库,
SQL Server:Microsoft 公司推出的收费的中型数据库,C#、.net等语言常用。
PostgreSQL:开源免费的中小型数据库。
DB2:IBM公司的大型收费数据库产品。
SQLLite:嵌入式的微型数据库。Android内置的数据库采用的就是该数据库。
MariaDB:开源免费的中小型数据库。是MySQL数据库的另外一个分支、另外一个衍生产品,与 MySQL数据库有很好的兼容性。
1.5Mysql中的数据模型
Mysql数据库当中到底是如何来存储数据的?(Mysql 的数据模型)
通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库
使用MySQL客户端,向数据库管理系统发送一条SQL语句,由数据库管理系统根据SQL语句指令去 操作数据库中的表结构及数据
一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包 含多行记录。
所以在Mysql数据库服务器当中存储数据,需要:
1. 先去创建数据库(可以创建多个数据库,之间是相互独立的)
2. 在数据库下再去创建数据表(一个数据库下可以创建多张表)
3. 再将数据存放在数据表中(一张表可以存储多行数据)
2sql分类
SQL语句根据其功能被分为四大类:DDL、DML、DQL、DCL
DDL 数据定义语言,用来定义数据库对象(数据库,表,字 段)
DML 数据操作语言,用来对数据库表中的数据进行增删改
DQL 数据查询语言,用来查询数据库中表的记录
DCL 数据控制语言,用来创建数据库用户、控制数据库的 访问权限
2.1DDL
2.1.1数据库操作:
查询所有数据库:show databases;
查询当前数据库: select database();
创建数据库
语法:create database [ if not exists ] 数据库名;
例子:创建一个itcast数据库。
create database itcast;
使用数据库
语法:use 数据库名 ;
删除数据库
语法:drop database [ if exists ] 数据库名 ;
如果删除一个不存在的数据库,将会报错。 可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
2.1.2表操作:
1创建
语法
create table 表名(
字段1 字段1类型 [约束] [comment 字段1注释 ],
字段2 字段2类型 [约束] [comment 字段2注释 ], ......
字段n 字段n类型 [约束] [comment 字段n注释 ] ) [ comment 表注释 ] ;
案例:创建tb_user表
create table tb_user (
id int comment 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
username varchar(20) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户表';
约束
是什么:所谓约束就是作用在表中字段上的规则,用于限制存储在表中的数据。
有什么用:保证数据库当中数据的正确性、有效性和完整性。
非空约束 限制该字段值不能为null not null
唯一约束 保证字段的所有数据都是唯一、不重复的 关键字:unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 关键字:primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 关键字:default
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 关键字: foreign key
案例:创建tb_user表
create table tb_user (
id int primary key auto_increment comment 'ID,唯一标识', #主键自动
增长
username varchar(20) not null unique comment '用户名',
name varchar(10) not null comment '姓名',
age int comment '年龄',
gender char(1) default '男' comment '性别'
) comment '用户表';
2查询
基于图形化界面操作,查询指定表的建表语句
3修改
添加字段:
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
案例:修改qq字段的字段类型,将其长度由11修改为13
alter table tb_emp modify qq varchar(13) comment 'QQ号码';
案例:修改qq字段名为 qq_num,字段类型varchar(13)
alter table tb_emp change qq qq_num varchar(13) comment 'QQ号码';
修改表名
rename table 表名 to 新表名;
案例:将当前的tb_emp表的表名修改为emp
rename table tb_emp to emp;
4删除
删除表语法:
drop table [ if exists ] 表名;
图形化操作页面
2.2DML
DML是数据操作语言,用来对数据库中表的数据记录进 行增、删、改操作
1增加
向指定字段添加数据
insert into 表名 (字段名1, 字段名2) values (值1, 值2);
全部字段添加数据
insert into 表名 values (值1, 值2, ...);
批量添加数据(指定字段)
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
案例1:向tb_emp表的username、name、gender字段插入数据
insert into tb_emp(username, name, gender, create_time, update_time)
values ('zhangsan', '张三', 1, now(), now());
案例2:向tb_emp表的所有字段插入数据
insert into tb_emp(id, username, password, name, gender, image, job,
entrydate, create_time, update_time)
values (null, 'lisi', '123', '李四', 2, '1.jpg', 1, '2010-01-01',
now(), now());
案例3:批量向tb_emp表的username、name、gender字段插入数据
insert into tb_emp(username, name, gender, create_time, update_time)
values ('wangwu', '王五', 1, now(), now()),
('xiaozhang', '小张', 1, now(), now());
2修改
update语法:
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
案例1:将tb_emp表中id为1的员工,姓名name字段更新为'张三'
update tb_emp set name='张三',update_time=now() where id=1;
案例2:将tb_emp表的所有员工入职日期更新为'2010-01-01'
update tb_emp set entrydate='2010-01-01',update_time=now();
3删除
delete语法:
delete from 表名 [where 条件] ;
案例1:删除tb_emp表中id为1的员工
delete from tb_emp where id = 1;
案例2:删除tb_emp表中所有员工
delete from tb_emp;