数据库初始,SQL语句介绍,MySQL数据库安装,SQL语句基础,操作MySQL数据库
Ⅰ数据库初识
【一】存储数据的演变过程
【1】文件基于内存保存
- 在早期,随意地存放到一个文件中、数据格式也是千差万别的,完全取决于个人
- 员工管理系统是基于列表或字典(内存)存储数据
【2】文件操作
- 用本地的 文本文件存储数据
- 有的人喜欢存储到本地的一个文件中 有的人喜欢存储到一个文件夹下的每一个小文件
【3】json模块
- 用json文件存储响应的数据
- ATM+购物车->软件开发架构
- 规定并约束了每一个文件夹的功能以及内部的文件名
- db文件夹下有一个 db_handler.py 用来操作数据 (读取和保存数据)
# 软件开发目录规范
bin:主要存放主程序文件,例如main.py;
conf:主要存放配置文件,例如settings.py;
lib:主要存放公用函数或类库,例如common.py;
core:主要存放核心模块代码,例如src.py;
interface:主要存放用户界面代码,例如interface.py;
db:主要存放数据库模块和操作脚本,例如moduls.py和db_hander.py;
log:主要存放日志文件,例如logs.log;
README.md:主要存放项目说明文档。
【4】上面的所有数据都是存储在本地的
- 假设上面是一个游戏
- 每一个人的游戏数据只会保存在本地
- 注册登录账号也只能在本地有效
【5】网络和并发编程
- 搭建TCP的客户端和服务端
- 在这之中 TCP服务端作为存储服务,TCP客户端用来上传和下载文件数据
【6】我们称 存储数据的位置 就是数据库
- 内存---> 文件 ---> TCP服务端
【7】总结
- 数据库的本质就是一个基于网络通信保存数据的应用程序
- 在现代互联网环境下,单机模式已经不能满足需求,需要将数据库服务端建立起来,将数据库保存部分统一到一个位置。
- 所有的数据操作都会经过这个总的数据库。
- 这样不仅可以实现数据共享,还可以保证数据的安全性和稳定性。
- 同时,也可以通过增加服务器集群等方式,提高系统的性能和可扩展性。
【二】数据库的本质
- 数据库其实就是一块基于网络通信的应用程序
- 每个人都有开发一块数据库的能力
【三】数据库的介绍
- TCP服务端作为存储数据的位置
【1】数据存储分为本地持久化存储和内存临时性存储
【2】关系型数据库
- MySQL
- Oracle
- db2
- access
- sql server
这些数据库都采用关系模型来组织数据,并且支持SQL查询语言。
#和你的Excel文件一样 表 行 单元格
特点
彼此之间是有关联得 一张表中有很多数据
存储数据的格式是采用表的格式存储数据
每个字段限制当前字段存储的类型
关系型数据库还支持增删改查,插入更新 ...
【2】非关系型数据库
- Redis
- MongoDB
- Memcached
这些数据库不采用关系模型来组织数据,而是采用了其他的模型,例如键值对模型、文档模型、图形模型等。
特点
存储数据通常是以 K:V 键值对存储数据
非关系型数据库的存储数据是临时性的,将数据存储到内存中,通过键来标识值的标志 ---> 快 / 无法持久化
非关系性数据库不支持太多的复杂功能
【3】关系型(存储数据)
- 彼此之间有关联
- 存储数据的表型形式通常以表格形式存储
- 每个字段限制每个字段下的存储数据的格式例如字符串、数字、日期等。
- 同时,关系型数据库还支持各种数据操作,例如插入、删除、更新和查询等。
【4】非关系型(缓存数据)
- 存储数据通常是K:V形式存储数据
- 非关系型数据库通常用于存储临时性的、高速访问的数据,这些数据通常以键值对的形式存储,其中“键”表示数据的唯一标识,“值”表示实际的数据内容。
- 由于非关系型数据库通常不提供事务支持和复杂的查询功能,因此不适合存储长期保存的历史数据。
【四】数据库的应用场景
【1】需求
- 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住十一期间全国的购票需求,你怎么写?
- 在同一时段抢票的人数如果太多,那么你的程序不可能运行在一台机器上,应该是多台机器一起分担用户的购票请求。
【2】实现需求
-
那么问题就来了,票务信息的数据存在哪里?存在文件里么?
-
如果存储在文件里,那么存储在哪一台机器上呢?是每台机器上都存储一份么?
- 首先,如果其中一台机器上卖出的票另外两台机器是感知不到的,
- 其次,如果我们将数据和程序放在同一个机器上,如果程序和数据有一个出了问题都会导致整个服务不可用。
- 最后,操作或修改文件中的内容对python代码来说是一件很麻烦的事。
-
基于上面这些问题,单纯的将数据存储在和程序同一台机器上的文件中是非常不明智的。
-
根据上面的例子,我们可以知道,将文件和程序存在一台机器上是很不合理的,同时,操作文件是一件很麻烦的事,所以我们可以使用数据库来存储数据。
# 你现在是一家公司的程序员 ---> 负责项目开发 ---> 开发一个类似 12306 的抢票系统 ---> 存储了很多票(分步全国各地)
# 同一时刻要有很多人一起去抢票
# 如果你用一台电脑存储你的票的数据 ---> 100万的数据存储到一个电脑上 --> 10万个人一起抢票 1000万秒
# 分十个电脑 ---> 每个电脑存 10万数据 --> 10万个人一起抢票 --> 不方便数据整合和查找
# 用数据库来存储数据 做一个TCP的服务端存储票的数据 ---> 基于本地存储(永久性存储) ---> 1000万秒
# MySQL这种关系型数据库持久化存储票的数据 Redis作为缓存数据库 --> 在程序启动的时候 将本地 MySQL 数据读取到 Redis
# 用户访问的时候会优先访问 Redis 用户买票 优先操作 Redis ---> 做一个触发机制 只要有人买了票 就将Redis的数据同步到本地一份
Ⅱ SQL语句介绍
- SQL语句:是一种操作语言 跟你的Python一样,但是又不一样
【一】SQL语句的由来
【1】socket通信
- 任何基于网络通信的应用程序底层用的都是scoket
- 服务端
- 基于socket通信
- 收发消息
- 客户端
- 基于socket通信
- 收发消息
- 服务端
【2】SQL语句的由来
- TCP服务端作为数据库的存储位置
- 字符编码 ---> 每一个国家都有自己的编码表 ---> 实现了统一unicode
- TCP服务端作为数据库 ---> 一个人一个操作习惯 ---> 大家会产生分歧 会导致很多不同的语句诞生 ---> 又有了字符编码的前鉴
- 为了使 MySQL 不仅能支持 MySQL 自己的客户端应用程序,还能支持其他编程语言
- MySQL 采用了 SQL 作为统一的语言来进行数据操作。
- 这样就可以让服务器端兼容所有语言,因为所有的客户端应用程序都可以通过执行相同的 SQL 语句来进行数据操作。
【二】重要的概念
【1】库(Database)
- 库是指在数据库管理系统中用于存储和组织数据的容器。
- 它可以视为一个文件夹,用于存放相关的数据表。 数据库中可以包含多个库,每个库可以包含多个表。
【2】 表(Table)
- 表是数据库中的一个基本组成单位,用于存储和展示数据。
- 表由行(记录)和列(字段)组成,每一行表示一个记录,每一列表示一个字段。
- 表可以看作是一个二维数据结构,类似于电子表格。
【3】记录(Record)
- 记录也称作行,是表中的一个数据项或实体。
- 每一行都代表了一个完整的数据记录,其中包含了各个字段的具体数值或信息。
- 例如,在一个学生信息表中,每一行代表一个学生的具体信息。
【4】表头(Header)
- 表头是表中的第一行,用于描述每个列字段的含义或名称。
- 表头通常包含了列的标签或标题,通过表头可以了解每个列字段所代表的意义,方便数据的理解和查询。
【5】表单(Form)
- 表单是一种用来收集和展示数据的界面形式,常见于数据输入和显示的场景中。
- 表单通常包含了各种输入字段(例如文本框、下拉列表等)和相关的操作按钮,用户可以通过表单进行数据的录入、编辑和提交等操作。
- 表单的数据可以被存储到相应的表中,用于后续的数据处理和分析。
【6】小结
- 库:
- 相当于我们的文件夹
- 表:
- 相当于我们的文件
- 记录:
- 相当于我们一行行的数据
- 表头:
- 表格的第一行字段
- 表单:
- 表头对应的每一条数据
Ⅲ MySQL数据库安装
【一】各种服务器的端口
- 本质其实就是一个TCP的客户端和服务端
- 想要使用数据库,想要使用客户端就必须启动服务端
- 启动服务器 就需要 IP 和 端口
- 常用的端口 :
- MySQL :3306
- Redis : 6379
- MongoDB : 27017
- Django : 8000
- flask : 5000
能不能改启动端口?也能改 但是不建议改
【二】MySQL安装
【1】MySQL介绍
MySQL是一个开源免费的关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。
MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,
具有成本低、速度快、体积小且开放源代码等优点。
图来源:https://db-engines.com/en/ranking
【2】下载MySQL服务端
(1)打开官网
(2)点击downloads
(3)选择MySQL Community Server
(4)选择版本
(5)点击download下载
【3】安装MySQL
(1)解压压缩包
- 把下载到本地的zip文件手动解压,将解压之后的文件夹放到专门保存开发软件的目录下,这个目录就是mysql的安装目录。
- 注意,目录路径不能出现中文,不能出现空格等特殊符号,否则会出错的!!!
(2)配置环境变量
- 打开设置搜索环境变量
- 将MySQL的bin目录添加到环境变量中
(3)打开终端
- 搜索栏输入终端,然后以管理员身份运行
(4)配置MySQL配置文件
- 在你的MySQL安装目录下新建一个文件,文件名
my.ini
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir="D:\Python\MySql"
# 设置mysql数据库的数据的存放目录,就是前面手动创建的data目录
datadir="D:\Python\MySql\data"
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证, mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql网络通信的默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 设置mysql客户端的默认字符集
default-character-set=utf8mb4
- 先建一个文本文档,设置好之后再修改成
my.ini
- 要注意把后缀拉出来修改
- 再创建一个 data文件夹
(5)初始化MySQL服务端
- 执行命令进行初始化
mysqld --initialize --console
C:\WINDOWS\system32>mysqld --initialize --console
2024-05-27T08:37:31.108989Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2024-05-27T08:37:33.235907Z 0 [Warning] InnoDB: New log files created, LSN=45790
2024-05-27T08:37:33.616028Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2024-05-27T08:37:33.814200Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5d09a9e8-1c04-11ef-b992-c85b76a189d8.
2024-05-27T08:37:33.845129Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2024-05-27T08:37:34.652990Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2024-05-27T08:37:34.653518Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2024-05-27T08:37:34.657597Z 0 [Warning] CA certificate ca.pem is self signed.
2024-05-27T08:37:37.015485Z 1 [Note] A temporary password is generated for root@localhost: qrmaes)hf4gY
# qrmaes)hf4gY 这串临时密码记住
(6)注册系统服务
- 未注册之前是没有MySQL服务的
- 执行命令注册
mysqld --install
C:\WINDOWS\system32>mysqld --install
Service successfully installed.
- 移除MySQL
mysqld --remove
C:\WINDOWS\system32>mysqld --remove
Service successfully removed.
(7)启动MySQL服务
- 方式一
- 手动开启
- 方式二
net start mysql # 启动MySQL服务
C:\WINDOWS\system32>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
net stop mysql #停止MySQL服务
C:\WINDOWS\system32>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。
【4】MySQL操作
(1)登入和退出
# 登录
# 方式一:直接本地登入 u:username root:用户名 -p :password
mysql -uroot -p
# 方式二:加上用户名和密码一起登入
mysql -uroot -p123456
# 链接远程服务登入
mysql -h 192.168.1.63 -P 3306 -uroot -p123456
# 在退出语句中必须有结束符 ;
exit;
(2)修改密码
- 登入客户端
# 先执行:mysql -uroot -p
# 再输入临时密码:qrmaes)hf4gY
- 修改密码
alter user 'root'@'localhost' identified by '123456';
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
- 刷新权限
flush privileges;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
(3)修改密码(忘记原本的密码)
- 先关闭MySQL服务
net stop mysql
- 执行跳表命令
mysqld --skip-grant-tables
# 以无密码登入的启动模式启动MySQL服务端
- 再打开一个终端
- 执行MySQL登入命令
mysql -uroot -p
# 输入密码的时候什么都不要输 直接enter
- 继续修改密码
# 先刷新一下权限
flush privileges;
# 在执行修改密码
alter user 'root'@'localhost' identified by '1234567';
# 在刷新权限
flush privileges;
(4)跳过输入密码直接登入
- 在配置文件中增加下述配置
[mysql]
# 不需要每次输入验证码即可登陆
user="root"
password=你的密码
default-character-set=utf8mb4
Ⅳ SQL语句基础
【一】引入
- 前面的学习中我们提到,mysql是关系型数据库,
- 所以我们要操作mysql就需要使用SQL(结构化查询语言)
【二】SQL规范
- 在数据库管理系统中,SQL语句关键字不区分大小写(但建议用大写) ,参数区分大小写。
- 建议命令大写,数据库名、数据表名、字段名统一小写,如数据库名、数据表名、字段名与关键字同名,使用反引号 圈起来,避免冲突。
- SQL语句可单行或多行书写,默认以英文分号(;)结尾,关键词不能跨多行或简写。
- 字符串跟日期类型的值都要以 单引号括起来,单词之间需要使用半角的空格隔开。
- 用空格和缩进来提高SQL语句的可读性。
【三】注释语法
【1】单行注释
# -- 两根 - 就是注释
# 一个 # 号也是注释
# mysql支持单行注释
-- 这是注册
# 这是注释
【2】多行注释
/*
多行注释
*/
【四】SQL类型
- 根据不同的用途,SQL语句通常分3大类型:
【1】数据定义语言(Data Definition Language,DDL)
- 用于创建或删除数据库以及数据表的语句,DDL包含以下几种指令:
- CREATE: 创建数据库和表等对象
- DROP: 删除数据库和表等对象
- ALTER: 修改数据库和表等对象的结构
【2】数据操纵语言(Data Manipulation Language,DML)
- 用于对数据表中的数据进行增删查改的。
- SELECT: 查询表中的数据
- INSERT: 向表中插入新数据
- UPDATE: 变更表中的数据
- DELETE: 删除表中的数据
【3】数据控制语言(Data Control Language,DCL)
- 用于对控制数据库的操作权限的,包括用户权限以及数据操作权限。
- COMMIT: 确认对数据库中的数据进行的变更
- ROLLBACK: 取消对数据库中的数据进行的变更
- GRANT: 赋予用户操作权限
- REMOVE: 取消用户的操作权限
【五】常用命令
命令 | 描述 |
---|---|
help | 显示有关特定命令或功能的帮助信息 |
status | 查看数据库管理系统的状态信息 |
exit | 退出数据库终端连接 |
quit | 退出数据库终端连接 |
\c | 当打错命令了,想换行重新写时可以在错误命令后面跟着\c回车 |
Ⅴ 操作MySQL数据库
【一】针对库的增删改查(文件夹)
【1】创建数据库
- 语法
- 在磁盘上创建一个存储数据表的文件夹。
create database [if not exists]数据库名字 [charset set 字符编码集];
create database study001;
- 示例
mysql> create database study001;
Query OK, 1 row affected (0.00 sec)
# 设置库的默认编码
create databases db1 charset='gbk';
- 注意:mysql中的编码字符集中utf-8,要换成utf8mb4。SQL语句中的中括号部分表示可选
【2】查看当前所有数据库
- 语法
show databases; -- 查看所有数据库
show databases like '%test%'; -- 查看名字中包含test的数据库
show create database 数据库名; -- 查看数据库的建库sql语句
- 示例
mysql> show databases; -- 查看所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| study001 |
| sys |
+--------------------+
5 rows in set (0.00 sec)
show create database study001; -- # 查看指定库
mysql> show create database study001;
+----------+----------------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------------+
| study001 | CREATE DATABASE `study001` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+----------------------------------------------------------------------+
1 row in set (0.00 sec)
【3】修改数据库
(1)查看数据库编码格式
- 语法
show variables like "character_set_database";
- 示例
mysql> show variables like "character_set_database";
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+
1 row in set, 1 warning (0.01 sec)
(2)修改数据库编码集
- 语法
alter database 数据库名 [character set 编码字符集];
- 示例
alter database study001 charset='utf8';
【4】删除数据库
- 语法
- 别轻易删除数据库,因为不可逆
drop database [if exists] 数据库名;
drop database 数据库名字;
drop database study001;
- 示例
mysql> drop database study001;
Query OK, 0 rows affected (0.00 sec)
【二】针对表的增删改查(文件)
- 在操作表的时候要指定所在的库
【1】切换到指定库
- 语法
- 在创建表之前一定要切换数据库
use 数据库名字; -- 切换数据库
use study001;
- 示例
mysql> use study001;
Database changed
【2】查看当前所在库的名字
- 语法
select database(); -- 查看当前使用的数据库
- 示例
mysql> select database();
+------------+
| database() |
+------------+
| study001 |
+------------+
1 row in set (0.00 sec)
【三】数据表相关
- 在创建表之前一定要切换数据库 (切换数据库 查看表名字在上面)
【1】创建表
- 数据表就相当于文件,文件有文件名,自然地,数据表也要有表名。
- 同样道理,数据表中的一条记录就相当于文件的一行内容。
- 只是不同的是,数据表需要定义表头(上图中的首行),称为表的字段名。
- 而且因为数据库的存储数据更加科学、严谨,所以需要创建表时要给每一个字段设置数据类型以及字段约束(完整性约束条件)。
- 语法
create table [if not exists] 表名 (
字段名1 数据类型[ ( 存储空间 ) 字段约束 ],
字段名2 数据类型[ ( 存储空间 ) 字段约束 ],
字段名3 数据类型[ ( 存储空间 ) 字段约束 ],
.....
字段名n 数据类型[ ( 存储空间 ) 字段约束 ],
primary key(一个 或 多个 字段名) -- 注意,最后一段定义语句,不能有英文逗号的出现,否则报错。
) [engine = 存储引擎 character set 字符集];
-
注意:
-
- 上面SQL语句中,小括号中的定义字段语句后面必须以英文逗号结尾,而最后一个字段的定义语句不能有英文逗号出现,否则报错。
- 在同一张数据表中,字段名是不能相同,否则报错!
- 创建数据表的SQL语句中,存储空间和字段约束是选填的,而字段名和数据类型则是必须填写的。
- 示例
- 创建表指定字段
-- mysql中创建数据表要以 create table `表名`
-- 表的字段信息必须写在 ( ) 小括号里面
create table classes (
-- 建议一行一个字段,id 就是字段名
-- int 表示设置字段值要以整数的格式保存到硬盘中,
-- auto_increment表示当前字段值在每次新增数据时自动+1作为值保存
-- primary key,mysql中叫主键,表示用于区分一个数据表中不同行的数据的唯一性,同时还具备加快查询速度的作用
-- 注意:auto_increment与primary key 一般是配合使用的,对应的字段名一般也叫id,而且在一个数据表中只有一个字段能使用auto_increment primary key进行设置。
id int auto_increment primary key,
-- 字段名:name
-- varchar(10) 表示当前name这一列可以存储的数据是字符串格式,并且最多只能存10个字符
name varchar(10),
-- 字段名:address
-- varchar(100) 表示adderss这一列可以存储的数据是字符串格式,并且最多只能存100个字符
address varchar(100),
-- 字段名:total
-- int 表示当前total这一列的数据只能是整数,而且一个数据表中,整数的最大范围只能是42亿
total int
);
# 创建示例
create table classes (
id int auto_increment primary key,
name varchar(10),
address varchar(100),
total int
);
- 上面的SQL语句就相当于创建了一个表格。
id | name | address | total |
---|---|---|---|
【2】查看表
(1)查看当前数据库下的所有表
- 语法
show tables;
- 示例
mysql> show tables;
+--------------------+
| Tables_in_study001 |
+--------------------+
| classes |
+--------------------+
1 row in set (0.10 sec)
(2)查看当前表的详细信息
- 语法
describe 表名;
describe classes;
- 示例
mysql> describe classes;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
4 rows in set (0.13 sec)
(3)查看表的创建语句
- 语法
show create table 表名;
show create table classes;
show create table classes\G;
- 示例
mysql> show create table classes;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| classes | CREATE TABLE `classes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`total` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show create table classes\G;
*************************** 1. row ***************************
Table: classes
Create Table: CREATE TABLE `classes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`total` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
ERROR:
No query specified
【3】修改表
(1)修改表的字段类型
- 语法
alter table 表名 modify 字段名 字段类型(长度);
alter table classes modify name varchar(32);
- 示例
mysql> alter table classes modify name varchar(32);
Query OK, 0 rows affected (0.37 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc classes;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
(2)修改字段类型或者名字
- 语法
alter table 原来的表名 rename 新表名;
alter table classes rename class_data;
- 示例
mysql> alter table classes rename class_data;
Query OK, 0 rows affected (0.16 sec)
+--------------------+
| Tables_in_study001 |
+--------------------+
| class_data |
+--------------------+
1 row in set (0.00 sec)
(3)追加字段
- 语法
alter table 表名 add 字段名 字段类型;
alter table class_data add age int;
- 示例
mysql> alter table class_data add age int;
Query OK, 0 rows affected (0.76 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int(11) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
(4)可以指定字段添加的位置
- 语法
alter table 表名 add 字段名 字段类型(长度) after 字段名;
alter table class_data add gender varchar(32) after name;
- 示例
mysql> alter table class_data add gender varchar(32) after name;
Query OK, 0 rows affected (0.79 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| gender | varchar(32) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int(11) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
(5)将字段插入到头部
- 语法
alter table 表名 add 字段名 字段类型(长度) first;
alter table class_data add sex int first;
- 示例
mysql> alter table class_data add sex int first;
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| sex | int(11) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| gender | varchar(32) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int(11) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
【4】删除字段
- 语法
alter table 表名 drop 字段名;
alter table class_data drop sex;
- 示例
mysql> alter table class_data drop sex;
Query OK, 0 rows affected (0.71 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| gender | varchar(32) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int(11) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
【5】删除表
- 语法
drop table 表名;
drop table class_data;
- 示例
mysql> drop table class_data;
Query OK, 0 rows affected (0.23 sec)
mysql> show tables;
Empty set (0.00 sec)
【四】数据相关
- 操作数据要有明确的数据库下的数据表
【1】插入数据
- 语法
insert into 表名 (字段名,字段名) values(值,值);
INSERT [INTO] <表名> [ <列名1> [ , … <列名n>] ] VALUES (值1) [… , (值n) ];
create table user(
name varchar(32),
age int
);
- 示例
mysql> create table user(
-> name varchar(32),
-> age int
-> );
Query OK, 0 rows affected (0.27 sec)
mysql> show tables;
+--------------------+
| Tables_in_study001 |
+--------------------+
| user |
+--------------------+
1 row in set (0.00 sec)
(1)插入单条/多条数据
- 语法
# 插入单条数据
insert into user (name,age)
values
('silence', 18);
# 插入多条数据
insert into user (name,age)
values
('happy', 28),
('mike', 16);
- 示例
mysql> insert into user (name,age)
-> values
-> ('silence', 18);
Query OK, 1 row affected (0.09 sec)
mysql> insert into user (name,age)
-> values
-> ('happy', 28),
-> ('mike', 16);
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0
【2】查看数据
- 语法
select * from 表名;
2.示例
mysql> select * from user;
+---------+------+
| name | age |
+---------+------+
| silence | 18 |
+---------+------+
1 row in set (0.00 sec)
mysql> select * from user;
+---------+------+
| name | age |
+---------+------+
| silence | 18 |
| happy | 28 |
| mike | 16 |
+---------+------+
3 rows in set (0.00 sec)
【3】更改数据
- 语法
update 表名 set 字段名=新值 where 字段名=字段值;
update user set age=999 where name="happy";
- 示例
mysql> update user set age=999 where name="happy";
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user;
+---------+------+
| name | age |
+---------+------+
| silence | 18 |
| happy | 999 |
| mike | 16 |
+---------+------+
3 rows in set (0.00 sec)
【4】删除数据
- 语法
delete from 表名 where 字段名=字段值;
delete from user where name="happy";
- 示例
mysql> delete from user where name="happy";
Query OK, 1 row affected (0.19 sec)
mysql> select * from user;
+---------+------+
| name | age |
+---------+------+
| silence | 18 |
| mike | 16 |
+---------+------+
2 rows in set (0.00 sec)
【特别提示】
- 使用 DROP DATABASE/TABLE 命令时要非常谨慎,
- 在执行该命令后,MySQL 不会给出任何提示确认信息。
- DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。
- 因此最好在删除数据库之前先将数据库进行备份。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY