MySQL 概述 数据库&表操作 数据增删改

目录

MySQL概述

前言

web开发调用流程图如下所示,程序员给数据库管理系统(DBMS)发送SQL语句,再由数据库管理系统操作数据库当中的数据。

排名前十的数据库:

复制代码
Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。(通常是不差钱的公司会选择使用这个数据库)
MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出两个版本的Mysql:社区版(开源免费)、商业版(收费)。
SQL Server:Microsoft 公司推出的收费的中型数据库,C#、.net等语言常用。
PostgreSQL:开源免费的中小型数据库。
DB2:IBM公司的大型收费数据库产品。
SQLLite:嵌入式的微型数据库。Android内置的数据库采用的就是该数据库。
MariaDB:开源免费的中小型数据库。是MySQL数据库的另外一个分支、另外一个衍生产品,与MySQL数据库有很好的兼容性。

这些数据库都是属于关系型数据库,要操作关系型数据库都是通过 SQL语句来实现的,而SQL语句又是操作关系型数

据库的统一标准。

下面来学习MySQL

安装与配置

官网免费版下载地址

下载完安装包后解压到想安装的位置,然后添加环境变量,在系统变量中新建MYSQL_HOME,其值为解压后的文件夹位置,再将%MYSQL_HOME%\bin添加到PATH。

cmd输入mysql,如果提示Can't connect to MySQL server on 'localhost' 则证明添加成功。

再以管理员身份,运行命令行窗口,运行mysqld --initialize-insecure。data目录初始化没有问题则MySQL目录下已经有data目录生成。

再以管理员身份,运行命令行窗口,mysqld -install,至此MySQL服务安装完成。

MySQL的cmd启动与关闭:

复制代码
net start mysql // 启动mysql服务
net stop mysql // 停止mysql服务

修改密码

在黑框里敲入mysqladmin -u root password 1234 ,这里的1234 就是指默认管理员(即root账户)的密码,可以修改成你想要的。

MySQL登录与卸载

启动mysql服务后在命令行输入登录参数:

复制代码
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)

比如输入mysql -uroot -p1234回车,出现下图且左下角为mysql>,则登录成功。

1.密码直接在-p参数之后直接指定 (这种方式不安全,密码直接以明文形式出现在命令行)

2.密码在-p回车之后,在命令行中输入密码,然后回车:

退出mysql:

exit

quit

卸载:

管理员身份,运行命令行窗口,net stop mysql停止服务,mysqld -remove mysql,删除。最后删除MySQL目录及相关的环境变量。卸载完毕。

PS:上述的MySQL服务器我们是安装在本地的,在真实的企业开发中,MySQL是在公司的服务器上安装的,并不是你一个人在访问。接下来,就来演示一下,通过MySQL的客户端命令行,如何来连接服务器上部署的MySQL :

数据模型概述

关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

而所谓二维表,指的是由行和列组成的表,如下图:

二维表的优点:

使用表存储数据,格式统一,便于维护

使用SQL语言操作,标准统一,使用方便,可用于复杂查询

基于二维表存储数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库(比如后面要学习的Redis,就属于非关系型数据库)。

在Mysql数据库服务器当中存储数据,你需要:

复制代码
1. 先去创建数据库(可以创建多个数据库,之间是相互独立的)
2. 在数据库下再去创建数据表(一个数据库下可以创建多张表)
3. 再将数据存放在数据表中(一张表可以存储多行数据)

SQL简介

SQL:结构化查询语言。一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。

SQL通用语法简介

1、SQL语句可以单行或多行书写,以分号结尾。

2、SQL语句可以使用空格/缩进来增强语句的可读性。

3、MySQL数据库的SQL语句不区分大小写。

4、注释:

单行注释:-- 注释内容 或 # 注释内容(MySQL特有)

多行注释: /* 注释内容 */

SQL分类

SQL语句根据其功能被分为四大类:DDL、DML、DQL、DCL

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

数据库设计(数据库操作)-DDL

项目开发流程:

在上述的流程当中,针对于数据库来说,主要包括三个阶段:

复制代码
1. 数据库设计阶段
参照页面原型以及需求文档设计数据库表结构
2. 数据库操作阶段
根据业务功能的实现,编写SQL语句对数据表中的数据进行增删改查操作
3. 数据库优化阶段
通过数据库的优化来提高数据库的访问性能。优化手段:索引、SQL优化、分库分表等

接下来我们就先来学习第一部分数据库的设计,就是定义数据库,定义表结构以及表中的字段。

数据库操作

DDL中数据库的常见操作:查询、创建、使用、删除。

查询数据库

查询所有数据库:show databases;

查询当前数据库 :select database();

我们要操作某一个数据库,必须要切换到对应的数据库中。

通过指令:select database() ,就可以查询到当前所处的数据库

创建数据库

语法:create database [ if not exists ] 数据库名;

可以使用if not exists来避免这个问题

使用数据库

语法:use 数据库名;

我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。

删除数据库

语法:drop database [ if exists ] 数据库名;

如果删除一个不存在的数据库,将会报错。

PS:

复制代码
上述语法中的database,也可以替换成 schema
如:create schema db01;
如:show schemas;

图形化工具

目前MySQL主流的图形化界面工具有以下几种:

DataGrip是JetBrains旗下的一款数据库管理工具,已经集成到了 IDEA当中,所以我们就可以使用IDEA来作为一款图形化界面工具来操作Mysql数据库。

连接数据库

1、打开IDEA自带的Database,配置MySQL

默认情况下,连接上了MySQL数据库之后, 数据库并没有全部展示出来。 需要选择要展示哪些数据库。具体操作如下:

操作数据库

创建数据库:

查看所有数据库:

表操作

继续学习DDL语句当中关于表结构的操作。

关于表结构的操作也是包含四个部分:创建表、查询表、修改表、删除表。

创建表

创建表语法
sql 复制代码
create table  表名(
	字段1  字段1类型 [约束]  [comment  字段1注释 ],
	字段2  字段2类型 [约束]  [comment  字段2注释 ],
	......
	字段n  字段n类型 [约束]  [comment  字段n注释 ] 
) [ comment  表注释 ] ;

注意: [ ] 中的内容为可选参数; 最后一个字段后面没有逗号

案例:创建tb_user表,对应的结构如下:

建表语句:

sql 复制代码
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 '用户表';

建表之前注意要选择对应的数据库,可以使用use语句,也可以直接在idea选中对应的数据库:

双击打开tb_user表结构,发现可以插入俩条id相同的数据,因为我们还没加上约束。

创建表约束语法

在MySQL数据库当中,提供了以下5种约束:

约束 描述 关键字
非空约束 限制该字段值不能为null not null
唯一约束 保证字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 default
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key

tb_user表的结构如下

在上述的表结构中:

复制代码
id 是一行数据的唯一标识
username 用户名字段是非空且唯一的
name 姓名字段是不允许存储空值的
gender 性别字段是有默认值,默认为男

建表语句:

sql 复制代码
create table tb_user (
    id int primary key comment 'ID,唯一标识', 
    username varchar(20) not null unique comment '用户名',
    name varchar(10) not null comment '姓名',
    age int comment '年龄',
    gender char(1) default '男' comment '性别'
) comment '用户表';

数据表创建完成,测试发现表中字段上的约束生效

PS:id字段下存储的值,如果由我们自己来维护会比较麻烦(必须保证值的唯一性)。MySQL数据库为了解决这个问题,给我们提供了一个关键字:auto_increment(自动增长)

复制代码
主键自增:auto_increment

每次插入新的行记录时,数据库自动生成id字段(主键)下的值具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)

sql 复制代码
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 '用户表';

也可以使用图形化界面来创建表结构,更加直观、方便:

创建表数据类型

MySQL中的数据类型主要分为三类:数值类型、字符串类型、日期时间类型。

数值类型

类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述
TINYINT 1byte (-128,127) (0,255) 小整数值
SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值
INT/INTEGER 4bytes (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8bytes (-263,263-1) (0,2^64-1) 极大整数值
FLOAT 4bytes (-3.402823466 E+38,3.402823466351 E+38) 0 和 (1.175494351 E-38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8bytes (-1.7976931348623157 E+308,1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) 双精度浮点数值
DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精度更高)
sql 复制代码
示例: 
    年龄字段 # 不会出现负数, 而且人的年龄不会太大
	age tinyint unsigned
	
	分数 ---总分100分, 最多出现一位小数
	score double(4,1) # 4表示整个数字长度,1 表示小数位个数

	decimal(5,2): # 5表示整个数字长度,2 表示小数位个数

字符串类型

类型 大小 描述
CHAR 0-255 bytes 定长字符串(需要指定长度)
VARCHAR 0-65535 bytes 变长字符串(需要指定长度)
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据
sql 复制代码
char是定长字符串,指定长度多长,就占用多少个字符
varchar是变长字符串,指定的长度为最大占用长度
相对来说,char的性能会更高些,但会浪费空间

示例:
	用户名 username ---长度不定, 最长不会超过50
	username varchar(50)
	手机号 phone ---固定长度为11
	phone char(11)

日期时间类型

类型 大小 范围 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳
sql 复制代码
示例:
	生日字段 birthday ---生日只需要年月日
	birthday date
	创建时间 createtime --- 需要精确到时分秒
	createtime datetime

查询表

关于表结构的查询操作,工作中一般都是直接基于图形化界面操作。

sql 复制代码
desc 表名 ;#可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息
sql 复制代码
show create table 表名 ;# 查询指定表的建表语句

修改表

关于表结构的修改操作,工作中一般都是直接基于图形化界面操作。

sql 复制代码
alter table 表名 add  字段名  类型(长度)  [comment 注释]  [约束]; # 添加字段

案例: 为tb_emp表添加字段qq,字段类型为 varchar(11)

sql 复制代码
alter table tb_emp add  qq  varchar(11) comment 'QQ号码';
sql 复制代码
alter table 表名 modify  字段名  新数据类型(长度); # 修改数据类型
alter table 表名 change  旧字段名  新字段名  类型(长度)  [comment 注释]  [约束]; # 修改数据类型

案例:修改qq字段的字段类型,将其长度由11修改为13

sql 复制代码
alter table tb_emp modify qq varchar(13) comment 'QQ号码';

案例:修改qq字段名为 qq_num,字段类型varchar(13)

sql 复制代码
alter table tb_emp change qq qq_num varchar(13) comment 'QQ号码';
sql 复制代码
alter table 表名 drop 字段名; # 删除字段
sql 复制代码
rename table 表名 to 新表名; # 修改表名

删除表

sql 复制代码
drop table [ if exists ] 表名;

数据库操作-DML(数据增删改)

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

增加数据(insert)

  • 向指定字段添加数据

    sql 复制代码
    insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...);
  • 全部字段添加数据

    sql 复制代码
    insert into 表名 values (值1, 值2, ...);
  • 批量添加数据(指定字段)

    sql 复制代码
    insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...), (值1, 值2, ...);
  • 批量添加数据(全部字段)

    sql 复制代码
    insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);

案例1:向tb_emp表的username、name、gender字段插入数据

sql 复制代码
# 因为设计表时create_time, update_time两个字段不能为NULL,所以也做为要插入的字段
insert into tb_emp(username, name, gender, create_time, update_time)
values ('wuji', '张无忌', 1, now(), now());

案例2:向tb_emp表的所有字段插入数据

sql 复制代码
insert into tb_emp(id, username, password, name, gender, image, job, entrydate, create_time, update_time)
values (null, 'zhirou', '123', '周芷若', 2, '1.jpg', 1, '2010-01-01', now(), now());

案例3:批量向tb_emp表的username、name、gender字段插入数据

sql 复制代码
insert into tb_emp(username, name, gender, create_time, update_time)
values ('weifuwang', '韦一笑', 1, now(), now()),
       ('fengzi', '张三疯', 1, now(), now());

修改数据(update)

update语法:

sql 复制代码
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;

案例1:将tb_emp表中id为1的员工,姓名name字段更新为'张三'

sql 复制代码
update tb_emp set name='张三',update_time=now() where id=1;

案例2:将tb_emp表的所有员工入职日期更新为'2010-01-01'

sql 复制代码
update tb_emp set entrydate='2010-01-01',update_time=now();

注意事项:

复制代码
1. 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
2. 在修改数据时,一般需要同时修改公共字段update_time,将其修改为当前操作时间。

删除数据(delete)

delete语法:

sql 复制代码
delete from 表名  [where  条件] ;

案例1:删除tb_emp表中id为1的员工

sql 复制代码
delete from tb_emp where id = 1;

案例2:删除tb_emp表中所有员工

sql 复制代码
delete from tb_emp;

注意事项:

复制代码
• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
• DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
• 当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点击Execute即可。
相关推荐
黎宇幻生1 小时前
Java全栈学习笔记39
java·笔记·学习
nongcunqq3 小时前
abap 操作 excel
java·数据库·excel
rain bye bye3 小时前
calibre LVS 跑不起来 就将setup 的LVS Option connect下的 connect all nets by name 打开。
服务器·数据库·lvs
冻咸鱼3 小时前
MySQL的配置
mysql·配置
R-G-B3 小时前
【02】C#入门到精通——C# 变量、输入/输出、类型转换
开发语言·c#·c# 变量·c#输入/输出·c#类型转换
星河队长3 小时前
C# 软件加密方法,有使用时间限制,同时要防止拷贝
开发语言·c#
史迪奇_xxx4 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++
2301_801252224 小时前
Java中的反射
java·开发语言
Kiri霧4 小时前
Rust开发环境搭建
开发语言·后端·rust
weixin-a153003083164 小时前
[数据抓取-1]beautifulsoup
开发语言·python·beautifulsoup