前端人员之基础SQL语言学习

本文介绍了MySQL的基本操作流程,包括服务器和软件架构的概念、主要数据库操作(DDL、DCL、DML、DQL)的使用方法,并详细讲解了如何创建、查询、更新和删除数据库及数据表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是看mysql基础培训视频做的笔记,对于mysql来说,基本的逻辑就是建一个库 -> 建一个或多个表(一个表就能存储大量的数据) - > 增删改查数据

只要明白这个逻辑,我们只要明白每个步骤具体的API,就可以操作mysql数据库了(仅限于很基本的操作)。

mysql的主要操作分为四部分,1、DDL,数据定义语言 2、DCL 数据控制语言 3、DML数据操作语言 4、数据查询语言


1、服务器和软件架构的概念


 * 服务器概念
   * 服务器(SERVER)其实就是一台PC机(硬件)
   * 服务器的分类
     * 硬件服务器 - PC机
       * 电脑硬件 - PC机/小型机/刀片机/中型机/大型机/超级计算机
         * 小型机 - IBM(AIX)/HP/联想(Linux)
     * 软件服务器 - 中间件
       * 为了运行Web应用的一种软件
   * 软件架构
     * B/S - 浏览器(browser)/服务器端(server)
       * 互联网-企业级
         * 互联网 - 网易、腾讯、百度等
* 企业级 - 银行系统、医院系统等
       * 好处
         * 软件升级 - 服务器端的升级
     * C/S - 客户端(client)/服务器端(server)
       * 先出现,例如QQ、Email等
       * 原因 - 网络带宽/电脑硬件普遍偏低
       * 问题
         * 软件升级 - 客户端\服务器端都要升级
   * 软件服务器
     * Web(应用)服务器 - 用于运行Web应用
     * 数据库服务器 - 用于运行数据库产品
   * 访问Web应用
     http://www.baidu.com
     网络协议-IP地址-端口号
 * XAMPP软件
   * Apache - 软件服务器(运行PHP)
     * 启动失败
       * 原因 - 端口号被占用
       * 错误信息 - Error: Apache shutdown unexpectedly.
       * 解决
         * config选项-<Browse>[Apache]-conf目录-httpd.conf文件
* 修改 - Listen 8888(端口号)
     * 如何访问
       * http://localhost:端口号
       * http://127.0.0.1:端口号
     * 设置虚拟地址
       * 目录 - C:\Windows\System32\drivers\etc
       * 打开hosts文件
     * 关于80端口号
       * 在开始菜单输入"cmd"运行命令行窗口
       * 在命令行窗口输入命令
         netstat -ano
       * 找到占用80端口号对应PID值
       * 在任务管理器中的"进程",找到对应的进程,结束
     * 在本地搭建Web应用程序
       * 目录 - XAMPP软件的安装路径-htdocs
       * 将该目录的所有文件删除
       * 创建index.html页面文件
       * 重新在浏览器中访问虚拟地址,页面内容

   * MySQL - 数据库服务器(运行MySQL)
     * MySQL默认使用的端口号 - 3306
       * 不建议修改该端口号
     * 命令行方式登录(打开)数据库
       * 登录数据库 - mysql -u用户名 -p密码
       * 退出数据库 - exit;
     * 同时启动Apache和MySQL服务
       * 访问地址 - http://localhost:8888/phpmyadmin
       * 上述地址的端口号是Apache的端口号
         * phpMyAdmin服务是Apache提供的(连接数据库)
   * Tomcat - 软件服务器(运行Java)


2、数据库的概念


 * 数据库
   * 基本概念
     * 数据库 - 数据仓库,用于存储或操作数据内容
     * 两大阵营
       * 关系型数据库(SQL) - 是目前主流数据库
         * 是以表(行和列)的形式存储数据
       * 非关系型数据库(NoSQL) - 是新潮流数据库
         * 是以文档方式存储数据
* 是以key:value形式存储数据
* ...
     * NoSQL
       * 是一种运动(抗议关系型数据库)
       * 逐步发展之后,出现很多这种产品
       * 主流的产品
         * mongoDB - JSON格式
* ...
     * 关系型数据库
       * Oracle - 甲骨文(Oracle)公司的产品
         * 企业级开发98%市场份额都是使用这款产品
* Oracle认证
  * 初级 - 月薪10K - 15K
  * 中级 - 月薪15K - 20K
  * 高级 - 
       * MySQL - 甲骨文(Oracle)公司的产品
         * 互联网开发98%市场份额都是使用这款产品
       * SQL Server
         * 是微软公司推出的
* 只提供Windows操作系统版本
       * Access(Office套件的组件)
         * 是微软公司推出轻量级数据库
       * DB2
     * MySQL产品
       * 是瑞典MySQL AB公司开发的
       * 后期被SUN公司收购(SUN公司最主要产品-Java)
       * SUN公司被Oracle公司收购
       * 特点
         * 免费
* 开源
       * 目前两种版本
         * 社区版本 - 免费
* 商业版本 - 收费
     * LAMP组合 - 目前开发互联网网站
       * L - Linux
       * A - Apache
       * M - MySQL
       * P - PHP
     * SQL语言 - 无论数据库产品,使用SQL语言
       * DDL - 数据定义语言(数据库+表)
       * DCL - 数据控制语言(权限)
       * DQL - 数据查询语言
       * DML - 数据操作语言
     * 注意
       * SQL语言并不区分大小写(官方建议大写)
       * SQL语句编写完毕后,一定增加";"结束符
         - 命令行中
       * SQL语言使用字符串时,建议使用单引号'
   * DDL(了解) - CREATE|ALTER|DROP
     * 数据库操作
       * 创建数据库
         * 用法 - CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
       * 查看数据库
         * 用法 - SHOW DATABASES;
       * 修改数据库
         * 用法 - ALTER DATABASE 数据库名称 CHARACTER SET utf8;
       * 删除数据库
         * 用法 - DROP DATABASE 数据库名称;
       * 使用(切换)数据库
         * 用法 - USE 数据库名称;
       * 注意
         * 数据库一旦被创建,很少修改或删除
* 创建、查看和切换数据库
     * 数据表操作
       * 数据类型
         * 数值(Number)数据类型
  * INT - 整数
  * FLOAT/DOUBLE - 浮点型(小数)
  * DECIMAL - 精确值(金额等)
* 日期(Date)数据类型
  * DATE - 日期(默认格式:yyyy-MM-dd)
  * DATETIME - 日期时间(yyyy-MM-dd hh:mm:ss)
  * TIMESTAMP - 时间戳(标识:唯一)
* 字符串(String)数据类型
  * CHAR - 长度固定的字符串
    * 定义一个字符串的长度为10,实际存储的内容为"abc",未被字符占用的位置会以空格补位
  * VARCHAR - 长度可变的字符串
    * 定义一个字符串的长度为10,实际存储的内容为"abcde"
       * 创建数据表
         CREATE TABLE (
  字段名称1  数据类型,
  字段名称2  数据类型,
  ...
);
* 约束
  * 主键约束 - PRIMARY KEY
    * 作用 - 唯一,不可重复
  * 主键自增约束 - AUTO_INCREMENT
    * 作为主键的字段,自增
案例:创建用户表(id,name,pwd,age,email,addr)
CREATE TABLE myuser (
  //标识(唯一,不可重复)
  id  INT PRIMARY KEY AUTO_INCREMENT,
  name  VARCHAR(30),
  pwd VARCHAR(30),
  age   INT,
  email VARCHAR(30),
  addr  VARCHAR(30)
);
练习:创建订单表myorder(orderid,ordername,price,addr,ordertime)
* orderid - 订单表的标识(唯一)
* ordername - 订单表的名称
* price - 金额
* addr - 收货地址
* ordertime - 订单日期
       * 删除数据表
         * 用法 - DROP TABLE 表名;
       * 查看表结构
         * 用法 - DESC 表名;
   * DML(增删改) - INSERT|UPDATE|DELETE
     * 插入(新增)数据
       * 用法一
         INSERT INTO 表名 VALUES(字段值1,字段值2,...);
* 注意
  * 当前表具有多少字段,VALUES输入多少字段值
  * 如果哪个字段是主键自增的话,使用NULL补位
       * 用法二
         INSERT INTO 表名(字段名1,字段名2,...) VALUES(字段值1,字段值2,...)
* 注意
  * 表名后定义多少字段,VALUES后输入多少字段
  * 当前数据表的字段是允许为空的
       * 练习 - myorder表
         1. 插入orderid,ordername,price,addr,ordertime
   INSERT INTO myorder VALUES(NULL,'linghuchong',3.5,'huashan','2015-11-17 15:44:40')
2. 插入ordername,addr,ordertime字段值
   INSERT INTO myorder(ordername,addr,ordertime) VALUES('renyingying',10,'heimuya')
     * 更新(修改)数据
       * 用法一 - UPDATE 表名 SET 字段名=字段值;
         * 注意 - 修改所有数据(指定字段值)
       * 用法二
         UPDATE 表名 SET 字段名=字段值 WHERE 字段名=字段值;
* SET后面的"字段名=字段值",为设置的值
* WHERE后面的"字段名=字段值",为查询的值
       * 用法三
         UPDATE 表名 SET 字段名1=字段值1,字段名2=字段值2 WHERE 字段名=字段值;
       * 练习:修改myorder表
         * 修改addr字段值为"光明顶"
  UPDATE myorder SET addr='光明顶';
* 修改id为2记录的price修改为100
  UPDATE myorder SET price=100 WHERE orderid=2;
* 修改addr为"光明顶"记录的ordertime为"2020-11-11 00:00:00"
  UPDATE myorder SET ordertime='2020-11-11 00:00:00' WHERE addr='光明顶'
     * 删除数据
       * 用法一 - DELETE FROM 表名;
         * 注意 - 删除指定表中所有数据
       * 用法二 - DELETE FROM 表名 WHERE 字段名=字段值;
       * 问题 - 实际操作
         * 实际的开发中基本不使用DELETE语句
  * 以防我们的用户反悔
       * SQL操作(删除)
         * 物理删除 - 执行DELETE语句
* 逻辑删除
  * 简单来说,对于用户来讲是删除的,对于实际来讲并没有删除
  * 为指定表,增加一个字段(state|status),表示当前这条记录是什么状态
    * 值为1的话,表示这条记录是正常的
    * 值为0的话,表示这条记录是删除的
   * DQL(查)
     * 基本查询 - 新版本一样
       * 用法一 - SELECT * FROM 表名;
       * 用法二 - SELECT 字段名1,字段名2,... FROM 表名;
     * 条件基本查询
       * 用法 - SELECT * FROM 表名 WHERE 字段名=字段值;
     * 复杂条件查询
       * AND - 表示多个条件同时满足
       * OR - 表示其中一个条件满足
       * IN(SET) - 表示一个字段包含多个值
         * SET - 多个值,之间使用","
       * = - 表示字段值为指定值
       * BTWEEN AND - 等于 >= AND <=
       * IS NULL - 匹配NULL值
     
     * 排序查询 - ORDER BY 字段名
       * ASC - 正序排序,默认值
       * DESC - 倒序排序


       SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名;

<think>我们参考了引用[1]和引用[2]的内容,其中提到Go语言作为后端开发语言具有学习曲线平缓的特点,特别适合初学者。同时,引用[2]指出,即使是没有后端基础前端开发者,也可以通过系统学习掌握Go语言。 针对“没有后端基础前端开发人员如何开始学习Go语言”的问题,我们设计以下学习路径: ### 一、Go语言核心基础(1-2周) 1. **语法快速入门**:前端开发者已有编程基础(JavaScript/TypeScript),重点学习Go的特有语法: - 变量声明(强类型 vs JS弱类型) - 控制结构(if/for/swich) - 函数定义(多返回值、错误处理) - 结构体与方法(面向对象替代方案) - 接口(隐式实现) - 并发原语(goroutine和channel) > 推荐资源:官方文档《A Tour of Go》[^1] 2. **环境与工具链**: - 安装Go SDK,配置GOPATH和模块管理(go mod) - 掌握基础命令:`go run`, `go build`, `go test` - 使用VS Code配置Go开发环境 ### 二、后端开发基础概念同步学习(2-3周) 1. **HTTP协议基础**: - 理解Request/Response模型 - 掌握GET/POST/PUT/DELETE方法 - 学习状态码(200/404/500等) 2. **数据库操作**: - SQL基础:SELECT/INSERT/UPDATE/DELETE - Go操作MySQL:使用`database/sql`包 - ORM框架:GORM基础使用 3. **Web框架入门**: - 使用Gin框架构建RESTful API: ```go package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{"message": "pong"}) }) r.Run() // 默认监听8080端口 } ``` ### 三、实战项目开发(3-4周) 1. **TODO列表API**: - 实现用户认证(JWT) - 任务增删改查接口 - 数据持久化(SQLite/MySQL) 2. **扩展功能**: - 文件上传接口 - 分页查询 - 日志中间件 ### 四、进阶技能(2-3周) 1. **并发模式**: - 使用channel实现生产者-消费者模型 - sync包中的互斥锁 2. **测试驱动开发**: - 编写单元测试(`testing`包) - 接口测试(Postman) 3. **部署实践**: - 编译Linux可执行文件:`GOOS=linux GOARCH=amd64 go build` - 使用Docker容器化部署 ```Dockerfile FROM golang:1.20-alpine WORKDIR /app COPY . . RUN go build -o main . CMD ["/app/main"] ``` ### 关键学习策略 - **对比学习法**:将Go特性与前端技术对比理解 | 前端概念 | Go对应实现 | |---------------|---------------------| | Promise异步 | goroutine并发 | | Axios请求 | net/http包 | | localStorage | 文件操作/数据库 | - **渐进式实践**:从命令行工具→Web API→微服务逐步深入 - **社区参与**:关注Go官方博客、GitHub趋势项目 > 根据引用[1]的研究,坚持每天2小时学习,可在6-8周内达到可参与后端开发的基础水平[^1]。 --- §§相关问题§§ 1. Go语言中如何处理并发安全问题? 2. Gin框架中间件的实现原理是什么? 3. 如何用Go连接Redis实现缓存? 4. Go项目如何实现优雅关闭?</think>以下是针对**没有后端基础前端开发者**学习Go语言的系统性计划,结合引用内容优化学习路径: --- ### 一、Go语言核心学习阶段(1-2周) 1. **语法快速入门**(参考引用[1][2]) - 基础语法:变量声明、控制结构(`if/for`)、函数定义 - 特色重点: - 并发模型:`goroutine`和`channel`(与JS事件循环对比) - 接口机制:隐式接口实现(对比TS显式声明) - 错误处理:`error`类型替代`try/catch` - 学习资源:官方文档《A Tour of Go》[^1] 2. **环境与工具链** - 安装Go SDK,配置`GOPATH`和模块管理(`go mod`) - VS Code配置:安装Go扩展,启用代码提示和调试功能 ```bash # 示例:创建并运行第一个Go程序 go mod init hello echo 'package main; import "fmt"; func main() { fmt.Println("Hello Backend!") }' > main.go go run main.go ``` --- ### 二、后端基础概念同步掌握(2-3周) 1. **HTTP协议基础** - 理解Request/Response生命周期(对比前端Fetch API) - 掌握路由、请求方法(GET/POST)、状态码(200/404/500) 2. **数据库操作** - SQL基础:`SELECT/INSERT/UPDATE/DELETE` - Go操作MySQL: ```go import "database/sql" db, _ := sql.Open("mysql", "user:pass@/dbname") rows, _ := db.Query("SELECT id FROM users") defer rows.Close() // 类比前端fetch().then() ``` 3. **Web框架实战(Gin)** ```go package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() // 前端熟悉的RESTful路由风格 r.GET("/api/data", func(c *gin.Context) { c.JSON(200, gin.H{"message": "响应数据"}) // 类比res.json() }) r.Run() // 启动服务 } ``` --- ### 三、项目驱动进阶(3-4周) 1. **Todo API项目** - 实现功能:用户注册/JWT认证/任务CRUD - 技术栈: - Web框架:Gin - 数据库MySQL + GORM(ORM库) - 缓存:Redis存储会话 2. **部署实践** - 编译可执行文件:`GOOS=linux GOARCH=amd64 go build` - Docker容器化: ```Dockerfile FROM golang:1.20-alpine WORKDIR /app COPY . . RUN go build -o main . CMD ["/app/main"] ``` --- ### 四、学习策略优化 1. **对比学习法** | 前端概念 | Go对应实现 | |---------------|---------------------| | `Promise` | `goroutine` + `channel` | | `axios.get()` | `http.Get()` | | `localStorage`| 文件操作/数据库 | 2. **调试技巧** - 使用`fmt.Printf()`快速输出变量 - Delve调试器设置断点(类比Chrome DevTools) > 根据引用[1],每天投入2小时,可在6-8周达到基础开发水平[^1]。重点保持**每周至少3个编码实践**。 --- ### 常见陷阱规避 1. **并发安全**: ```go var mu sync.Mutex // 互斥锁解决共享资源竞争 mu.Lock() counter++ // 安全操作 mu.Unlock() ``` 2. **依赖管理**:使用`go mod tidy`确保依赖版本一致 3. **内存泄漏**:及时关闭`channel`和数据库连接 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值