mysql 数据库基础及增删改查命令
一 数据库概述1.1 什么是数据库
1.1.1数据(Data)
- 描述事物的符号记录
- 包括数字,文字,图形,图像,声音,档案等
- 以”记录“ 形式,按统一的格式进行存储
1.1.2 表
- 将不同的记录组织在一起
- 用来存储具体数据
1.1.3 数据库(DataBase)
- 数据库是表的集合,是存放数据的仓库.
- 以一定的组织方式存储的相互有关的数据集合
- 是按照数据结构来组织,存储和管理数据的仓库
- 数据库里存放的不是视频,音频,图片,文件等,而是存放的是数据的数据 metedata(元数据),存放的是对数据的描述信息。
1.1.4 数据库管理系统 (DataBase Management System)
是实现对数据库资源有效组织,管理和存取的系统软件
数据亏的建立和维护功能,数据定义功能,数据操纵功能,数据库运行管理功能,通信功能
1.1.5 数据库系统(DataBase System)
是一个人机系统,由硬件,OS,数据库,DBMS,应用软件和数据库用户组成。带有数据库并整合数据库管理软件的计算机系统,即DB+DBMS
1.2 数据库的分类与应用
第二代数据库是关系型数据库(RDBMS)
第三代数据库统称为非关系型数据(NOSQL)
SQL | Oracle | 否 | 是 | 甲骨文 |
---|---|---|---|---|
SQL | MySQL | 是 | 是 | 甲骨文 |
SQL | SQL Server | 否 | 否 | 微软 |
SQL | DB2 | 否 | 是 | IBM |
noSQL | Redis | 是 | 是 | 开源软件 |
noSQL | Memcache | 是 | 是 | 开源软件 |
noSQL | MongoDB | 是 | 是 | 开源软件 |
1.3 关系数据库
1.3.1 关系数据库简介
- 关系数据库系统时基于关系模型的数据库系统
- 关系模型的数据结构使用简单易懂的二维数据表
- 关系模型可用简单的”实体-关系“ (E-R) 图来表示
- E-R 图中包含了实体(数据对象)关系,属性三个要素
-
实体
-
也成为了实例,对应现实世界中可区别其他对象的“事件”或“事务”
-
如用户,账户
-
-
属性
- 实体所具有的某一特性,一个实体可以具有多个属性
- 如用户中,每个都有用户ID,用户姓名,用户地址
-
联系
- 实体之间的对应关系称为联系,也称为关系
- 如用户和账户之间存在 “存钱” 的关系
所有实体及实体之间联系的集合构成一个关系数据库
1.3.2 关系数据库的存储结构
- 关系数据库的存储结构是二维表格
-
在每个二维表中
- 每一行称为一条记录,用来描述一个对象的信息
- 每一列称为一个字段,用来描述对象的一个属性
1.4 非关系型数据库介绍
- 非关系型数据库也称为NoSQL(Not Only SQL)
存储数据不以关系模型为依据,不需要固定的表格式 - 非关系型数据库的优点
- 数据库可高并发读写
- 对改良数据高效率存储与访问
- 数据库具有高扩展性与高可用性
- 常用的非关系数据库:Redis,mongoDB 等
1.5 mysql 数据库介绍
-
一款深受欢迎的开源关系型数据库、
-
Oracle 旗下的产品
-
遵守GPL 协议,可以免费使用与修改
特点:
- 性能卓越,服务稳定
- 开源,无版权限制,成本低
- 多线程,多用户
- 基于C/S(客户端/服务器)架构
- 安全可靠
mysql 目前常用版本为 5.6 和 5.7 以及8.0
二 数据库管理
2.1 数据库常用的数据类型
2.1.1 整型
类型 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|
tinyint | -128~127 | 0~255 | 微小整数 |
smallint | -32768~32767 | 0~65535 | 小整数 |
mediumint | -223~223-1 | 0~224-1 | 中整数 |
int | -231~231-1 | 0~232-1 | 大整数 |
bigint | -263~263-1 | 0~264-1 | 极大整数 |
float | -3.402823466E+38到-1.175494351E-38 | 1.175494351E-38到3.402823466E+38 | 单精度浮点数(M,D) |
double | -1.7976931348623157E+308到-2.2250738585072014E-308 | 2.2250738585072014E-308到1.7976931348623157E+308 | 双精度浮点数(M,D) |
2.1. 2 浮点型
MySQL数据类型 | 含义 |
---|---|
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
2.1.3 精准数据类型
decimal是MySQL中存在的精准数据类型,语法格式“DECIMAL(M,D)”。其中,M是数字的最大数(精度),其范围为“1~65”,默认值是10;D是小数点右侧数字的数目(标度),其范围是“0~30”,但不得超过M。
如 decimal (5,2 ) :5 个有效长度数字,小数点后面有 2 位
2.1.4 字符串
MySQL数据类型 | 含义 |
---|---|
char(n) | 固定长度,最多255个字符 |
varchar(n) | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
1.char(n) 若存入字符数小于n,在后面填补空格,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),
所以varchar(4),存入3个字符将占用4个字节
2.1.5 日期时间类型
MySQL数据类型 | 含义 |
---|---|
date | 日期 '2008-12-2' |
time | 时间 '12:25:36' |
datetime | 日期时间 '2008-12-2 22:06:44' |
timestamp | 自动存储记录修改时间 |
2.2 SQL 语言
SQL 语句用于维护管理数据库,包括数据查询,数据更新,访问控制,对象管理等功能
2.2.1 指令、SQL指令。基本的用法:
- 操作指令不区分大小写(库名/表名、密码、变量值等除外)。
- 每条SQL指令以 ; 结束或分隔。
- 字符串使用 单引号,如果字符串本身也包括单引号,则使用两个单引号
- 不支持 Tab 键自动补齐。
- \c 可废弃当前编写错的操作指令。
2.2.2 sql 语言分类
- DDL数据定义语言(create,alter,drop): 用于创建数据库对象,如库,表,索引等
- DML数据操作语言(insert,update,delete): 用于对表中的数据进行管理
- DQL 数据查询语言(select:):用于从数据表中查询符合条件的数据记录
- DCL数据控制语言(grant,revoke):用于设置或者更改数据库用户或角色权限
- DTL 数据事务语言(commit,rollback,savepoint) (事务:多个命令组合,一个命令不成功,所有命令都不成功 ):用来保证数据的平稳性和可预测性
三: 数据库命令
3.1 连接和退出mysql 数据库
命令格式:
连接数据库:mysql [-h 服务器ip或域名 -u 用户名 -p 密码 数据库名称 ]
退出数据库: exit 或者 quit
3.1.1 非交互式进入数据库
mysql -h 192.168.23.103 -u root -pabc123
3.1.2 交互式进入数据库
mysql -h 192.168.23.103 -u root -p
3.2 创建,切换,查看,删除数据库
创建数据库 : create database 数据库名;
切换/使用数据库:** use 数据库名;
查看数据库:show databases;
查看当前数据库: select database();
删除数据库:drop database 库名;
示例
3.2.1 查看与创建数据库
show databases;
create database class;
show databases
#数据库命名规则:
#(数字,字母,下划线,不能纯数字;区分大小写;不能使用关键词或特殊符号)
3.2.2 使用与查看当前数据库
use mysql;
select database();
use class;
select class();
3.2.3 删除数据库
show databases;
drop database class;
show databases;
3.3 数据表操作
3.3.1 创建数据表,查看数据库中有哪些数据表
创建数据表:
create table 数据库名称.数据表名称(字段名1 数据类型(宽度) 约束条件, 字段名2 数据类型(宽度) 约束条件, .......);
查看当前库中有哪些表
show tables;
create table school.class(id int primary key auto_increment,student char(20),teacher char(20));
use school;
show tables;
3.3.2 查看数据表字段结构
查看表结构
desc 数据库名.表名;
desc 表名;
desc class;
desc school.class;
3.3.3 修改表名和表结构
格式
alter table 库名.表名 执行动作 [first];
动作 | 意义 |
---|---|
add | 添加字段 |
modify | 修改字段类型 |
change | 修改字段类型 |
drop | 删除字段 |
rename | 修改表名 |
添加字段格式
新字段默认添加在字段结尾
mysql>alter table 库名.表名
add 字段名 类型(宽度) 约束条件
[after 字段名 | first ];
desc class;
alter table class add address char(10)
desc class;
alter table class add num int first;
desc class;
修改表字段类型
格式:
修改的字段类型不能与已存储的数据冲突,也可以用来调整字段顺序
mysql>alter table 库名.表名
modify 字段名 类型(宽度) 约束条件
[after 字段名 | first ];
desc class;
alter table class modify student varchar(20) after teacher ;
desc class;
修改字段名
格式
(也可以用来修改字段类型)
mysql> alter table 库名.表名
changer 源字段名 新字段名 类型(宽度)
约束条件 [after 表字段 | first ] ;
desc class;
alter table class change num age int(3) after id ;
desc class;
删除字段
格式:
表中有多条记录时,所有列的此字段的值都会被删除
mysql>alter table 库名.表名 drop 字段名;
desc class;
alter table class drop address;
desc class;
修改表名
表对应的文件名,也被改变
表记录不受影响
mysql>alter table 表名 rename 新表名;
show tables;
alter table class rename class2021;
show tables;
### 3.3.4 删除数据表
格式:
drop table 库名.表名;
show tables;
drop tables class2021;
show tables;
3.4 表记录操作
3.4 .1向表中插入数据
方法一:
insert int [数据库名.]表名(字段1,字段2....) values(字段1值,字段2值...);
方法二:
insert into [数据库名.]表名 values(字段1值,字段2值)
insert into school.class(id,student,teacher) values(1,zhangsan,wanglaoshi); #此条报错
insert into school.class(id,student,teacher) values(1,'zhangsan','wanglaoshi');
insert into school.class(student,teacher) values('lisi','wanglaoshi');
insert into school.class values( 5,'wangwu','houlaoshi');
insert into school.class values( 'zhaoliu','houloashi'); #此条报错
3.4.2 查询数据表的记录
直接查询表记录
格式:
select 字段名1,字段名2 ....... from 数据表;
select * from 数据表;
“ * ” 表示所有的字段
select * from 数据表 \G ;
在命令后加上 \G ,表示按列显示
select * from class;
select * from class\G;
按条件查询表数据
格式
select 字段名1,字段名2 ....... from 数据表 where 条件1 and/or 条件2 ....;
select id from class where student='zhangsan';
select id from class where student='zhangsan' or teacher='houlaoshi';
select id from class where student='zhangsan' and teacher='wanglaoshi';
显示查询结果的后几行
格式
select * from 数据表 limit n; 显示头2行
select * from 数据表 limit n,m; 显示第n 行后面的m 行
先查询表中有哪些数据
select * from num;
演示查询结果
select * from num limit 3;
select * from num limit 3,5;
3.4.3 删除表记录
格式:
delete from 表名 [where 条件表达式];
删除时如果不加上条件表达式,则删除整个表数据
delete from num where number=3;
select * from num;
delete from num ;
select * from num;
3.4.4 update 修改,更新表记录
update 表名 set 字段名1=字段值1 [,字段名2=字段值2....] [where 条件表达式] ;
update class2021 set teacher=('wanglei') where id=1;
select * from class2021;