一、数据库介绍
1.1 数据库定义
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的数据集合。通俗地说,数据库就是存储数据的仓库。
特点:持久化存储、可以使用表格式结构高效保持、读写效率极高
常用数据库软件:Oracle、MySQL、Mongodb、SQLite等,不同数据库排行榜见:
https://db-engines.com/en/ranking
1.2 数据库分类
1.2.1 关系型数据库
概念:指采用了关系模型来组织数据的数据库。简单的说,关系模型指的就是二维表格模型,类似于Excel中的表格。数据库 database 等同于 Excel的文件.数据表 table 等同于 表格里面的sheet子表(如这里的Student表)。
图1 关系型数据库
1.2.2 非关系型数据库
概念:非关系型数据库,即Not Only SQL,指的是非关联型的。强调Key-Value(字典)的方式存储数据,可以理解为可以通过Key来找到Value。
图2 非关系型数据库
1.3 数据库结构概述
数据库结构可分为三个部分:
(1)数据库管理系统(DataBase Management System,DBMS):指的是一种操作和管理数据库的大型软件,可用于管理数据库和数据库中表内的数据。例如MySQL就是一个优秀的DBMS。
(2)数据库(database):用于存储数据的仓库。
(3)数据表(table):数据表(或称表)是数据库最重要的组成部分。即数据库中存放的就是一个一个的数据表。
他们之间的关系如下图所示:
图3 数据库结构
二、数据库入门
数据库存储单位:数据库存以表为单位,如图3所示,数据库中可存储多张表,表中可存放一条条数据;
数据库操作主要可分为增(Create)、改(Update)、删(Delete)、查(Read)操作,即【CUDR】操作;其使用的语言主要为SQL语言;
2.1 SQL语言介绍
SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,一种数据库查询和程序设计语言,用于对数据库进行查询、更新以及管理关系数据库系统。
SQL语句在处理数据时,通常具有定义、操作、查询和控制关系数据库的这四个功能,表示为:
(1)数据库定义语言:DDL(Data Dfinition Language)
(2)数据操作语言:DML(Data Manipulation Language)
(3)数据查询语言:DQL(Data Query Language)
(4)数据控制语言:DCL(Data Control Language)
2.2 SQL语法规则
(1)SQL语句必须以;(分号)结尾 【必须】
(2)可以使用空格符或缩进来提升SQL语句的阅读性 【有必要】
(3)SQL语句不区分大小写,但SQL关键字一般建议使用大写 【可选】
(4)SQL语句中可以使用必要的注释来解释说明。【有必要】
2.3 数据库DDL操作
2.3.1 DDL库操作
(1)创建数据库:create database [if not exists] 数据库名 [设置编码格式]
示例:创建一个班级db_itheima2数据库,charset设置编码为utf8;
- create database db_itheima2 charset utf8;
复制代码
(2)查看数据库
查看有哪些数据库:show databases;
查看数据库的创建语句:show create database 数据库名
查看当前数据库 :select database ();
(3)删除数据库
语法:drop database 数据库名称;
(4)使用数据库
语法:use 数据库名
2.3.2 DDL表操作
(1)创建表:
- create table [if not exists] 表名(
- 字段名1 类型(长度)[约束],
- 字段名2 类型(长度)[约束],
- .....
- );
复制代码
在MySQL数据库中,常用的字段类型如下:[数据类型]
1)整形:int;
2)浮点型:double,注意:在编程开发中,一般把小数称为浮点数;
3)字符串类型:varchar(长度);
4)时间日期:date、datetime。
创建表示例:
- create table stu(
- id int primary key auto_increment,
- name varchar(20),
- height double,
- birthday date
- );
复制代码
(2)查看数据表
查看有哪些表:show tables;
查看数据表创建语句:show create table 表名
查看表结构:desc 表名
(3)删除表
语法:drop table 表名;
(4)修改表名
语法:alter table 旧表名 rename to 新表名;
2.3.3 DDL操作列
(1)添加一列:alter table 表名 add 字段名 类型(长度)[first | after 其它字段名称]
注意:first表示插入第一列,after 表示插入指定字段后;实例如下
- # (1)添加判断语句,新建一张用户表table_user,有用户名、密码这2个字段;
- create table table_user(
- name varchar(20),
- password varchar(20)
- );
- # (2)给用户表添加一列信息展示information字段,长度为140;
- alter table table_user add information varchar(140);
- # (3)在用户表的最开始处,添加一列最初名称first_name,该怎么做呢?
- alter table table_user add frist_name varchar(140) first ;
- # (4)在用户表的密码字段后,添加一列年龄age字段,该怎么做?
- alter table table_user add age int after password;
复制代码
(2)修改列类型:alter table 表名 modify 字段名 类型(长度) [约束]
- # (1)给用户表的信息字段类型修改为char,长度修改为60;
- alter table table_user modify information char(60);
- # (2)将用户名字段修改长度为16,且添加不为空约束。(not null)
- alter table table_user modify name varchar(16) not null;
复制代码
(3)修改列名:alter table 表名 change 旧字段名 新字段名 类型(长度) [约束]
注意1:新字段名可以和就字段名一样,重复后可替代modify的功能
注意2:修改列名之后,新的列不能继承原约束,需要再定义
- # (1)把用户表的用户名修改为user_name,字符串类型、长度为18;
- alter table table_user change name user_name varchar(18);
- alter table table_user change user_name user_name varchar(20); -- 验证新旧列名一致也能执行.
- # (2)把用户表的信息字段列名修改为info,类型修改为varchar,长度为100。
- alter table table_user change information info varchar(100);
复制代码
(4)删除列:alter table 表名 drop 列名;
- # (1)删除用户表中的年龄这一列;
- alter table table_user drop age;
- # (2)使用命令查看表结构
- desc table_user;
复制代码
2.4 数据库DML操作
DML操作特点:数据操作命令,主要是指进行数据操作后,会对原有数据产生影响。
数据操作命令有:
(1)插入数据:INSTRT
(2)删除数据:DELETE
(3)修改数据:UPDATE
2.4.1 新增数据
给数据表中插入一条数据
语法:insert into 表名 [字段名1,字段名2,..] values (值1,值2,...);
给数据表中插入多条数据
语法:insert into 表名 [字段名1,字段名2,..] values (值1,值2,...),(值1,值2,...);
省略字段名插入一条数据:
语法:insert into 表名 values (值1,值2,...);
省略字段名给数据表中插入多条数据:
insert into 表名 values (值1,值2,...),(值1,值2,...);
注意1:当要给字符串类型的字段插入值时,要使用单引号把值引起来,否则显示出错;
注意2:表名后字段个数与类型等,要与values后的值对应。
2.4.2 修改数据
语法:update 表名 set 字段名1 = 值1, 字段名2 = 值2 .... [where 条件]
注意:如果不指定条件,更新数据时会把所有数据记录全部更新!!!
- # 语法: update 表名 set 列名=值,列名=值,... [where 条件];
- # (1)将用户表内所有用户性别一次性设置为男;!!! 基本不会用
- update user set gender = '男';
- # (2)将用户表内所有用户的性别修改为女、年龄修改为18;
- update user set gender = '女' ,address = '成都';
- # (3)将用户表内编号为2的用户性别设置为男;
- update user set gender='男' where id = 2;
- # (4)将用户表内编号为3的用户性别更新为男,且住址更新为湖北省武汉市;
- update user set gender='男' , address='湖北省武汉市' where id = 3;
复制代码
2.4.3 删除数据
语法:delete from 表名 [where 条件];
注意:不加条件表示删除所有的数据。
- # (1)创建一个用户表2,表字段有编号、用户名、密码,再增加3条数据;
- create table user2(
- id int primary key auto_increment,
- name varchar(20),
- passwrod varchar(20)
- );
- insert into user2 values (null,'张三','123'),(null,'李四','123'),(null,'王五','123');
- # (2)删除表内编号为1的这条数据,再删除用户名为李四的这条数据;
- delete from user2 where id = 1;
- delete from user2 where name = '李四';
- # (3)使用命令删除表内所有数据,观察效果。
- delete from user2;
复制代码
2.4.4 拓展面试题--清空数据的区别
面试题:请谈一谈使用delete和truncate删除表的区别?
说明,delete与truncate的主要区别有:
(1)delete删除数据时,是一条一条的删除数据记录,效率低;
(2)truncate删除数据时,是将整个表销毁,然后再创建一张一模一样的表,并且用auto_increment修饰的字段将重置为0重新开始计算。