MySQL数据库:SQL语句

2023-11-08

MySql数据库系列阅读

  1. MySQL数据库
  2. MySQL数据库:SQL语句
  3. MySQL数据库:完整性约束
  4. MySQL数据库备份与还原
  5. MySQL数据库:编码

1. SQL概述

1.1 什么是SQL

SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQ标准(ANSI/ISO)有:

  • SQL-92:1992年发布的SQL语言标准
  • SQL:1999:1999年发布的SQL语言标签
  • SQL:2003:2003年发布的SQL语言标签

这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。

虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。

SQL的作用:客户端使用SQL来操作服务器

1.2 语法要求

SQL标准(例如SQL99,即1999年制定的标准):由国际标准化组织(ISO)制定的,对DBMS的统一操作方式(例如相同的语句可以操作:mysql、oracle等)。

SQL方言:某种DBMS不只会支持SQL标准,而且还会有一些自己独有的语法,这就称之为方言!例如limit语句只在MySQL中可以使用

SQL语法

  • SQL语句可以单行或多行书写,以分号结尾
  • 可以用空格和缩进来来增强语句的可读性
  • 关键字不区别大小写,建议使用大写

2. 分类

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等
  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别
  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)

3. DDL:数据定义语言

3.1 基本操作

  • 查看所有数据库名称:SHOW DATABASES; 
  • 切换数据库:USE mydb1,切换到mydb1数据库;

3.2 操作数据库

  • 创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;

例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错

  • 删除数据库:DROP DATABASE [IF EXISTS] mydb1;

例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错

  • 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8;

修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8

3.3 数据类型

MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。常用类型如下:

类型 说明
int 整型
double 浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99
decimal 浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题
char 固定长度字符串类型
varchar 可变长度字符串类型
text 字符串类型
blob 字节类型
date 日期类型,格式为:yyyy-MM-dd
time 时间类型,格式为:hh:mm:ss
timestamp 时间戳类型

3.4 操作表

创建表:

CREATE TABLE 表名(
  列名 列类型,
  列名 列类型,
  ......
);

例如:

CREATE TABLE stu(
    sid     CHAR(6),
    sname   VARCHAR(20),
    age     INT,
    gender  VARCHAR(10)
);

再例如:

CREATE TABLE emp(
    eid     CHAR(6),
    ename   VARCHAR(50),
    age     INT,
    gender  VARCHAR(6),
    birthday    DATE,
    hiredate    DATE,
    salary  DECIMAL(7,2),
    resume  VARCHAR(1000)
);
SHOW TABLES; /*查看当前数据库中所有表名称*/

SHOW CREATE TABLE emp;/*查看emp表的创建语句*/

DESC emp; /*查看emp表结构*/

DROP TABLE emp; /*删除emp表*/

修改表:add,modify,change,drop

/*修改之添加列:给stu表添加classname列*/
ALTER TABLE stu ADD (classname varchar(100));

/*修改之修改列类型:修改stu表的gender列类型为CHAR(2)*/
ALTER TABLE stu MODIFY gender CHAR(2);

/*修改之修改列名:修改stu表的gender列名为sex*/
ALTER TABLE stu change gender sex CHAR(2);

/*修改之删除列:删除stu表的classname列*/
ALTER TABLE stu DROP classname;

/*修改之修改表名称:修改stu表名称为student*/
ALTER TABLE stu RENAME TO student;

4. DML:数据操作语言

4.1 插入数据

语法:INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)

INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');
INSERT INTO stu(sid, sname) VALUES('s_1001', 'zhangSan');

因为没有插入age和gender列的数据,所以该条记录的age和gender值上为NULL

语法:INSERT INTO 表名 VALUES(值1,值2,…)

因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:

INSERT INTO stu VALUES('s_1002', 'liSi', 32, 'female');

注意:所有字符串数据必须使用单引用!

4.2 修改数据

语法:UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]

UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;
UPDATE stu SET sname=’liSi’, age=’20WHERE age>50 AND gender=’male’;
UPDATE stu SET sname=’wangWu’, age=’30WHERE age>60 OR gender=’female’;
UPDATE stu SET gender=’female’ WHERE gender IS NULL
UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;

4.3 删除数据

语法:DELETE FROM 表名 [WHERE 条件]

DELETE FROM stu WHERE sid=’s_1001’003B
DELETE FROM stu WHERE sname=’chenQi’ OR age > 30;
DELETE FROM stu;

语法:TRUNCATE TABLE 表名

TRUNCATE TABLE stu;

虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE高!

TRUNCATE其实属性DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。

5. DCL:数据控制语言

5.1 创建用户

语法:CREATE USER 用户名@地址 IDENTIFIED BY ‘密码’;

CREATE USER user1@localhost IDENTIFIED BY123’;

CREATE USER user2@’%’ IDENTIFIED BY123’;

5.2 给用户授权

语法:GRANT 权限1, … , 权限n ON 数据库.* TO 用户名

GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@localhost;

5.3 撤销授权

语法:REVOKE权限1, … ,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库:SQL语句 的相关文章

  • MySql 5.7 函数 UUID() 默认排序规则 - 非法混合排序规则

    Problem MySQL uuid 默认排序规则与配置连接排序规则不进行比较 我有一个使用字符集创建的数据库 表 字段 utf 8和排序规则utf8 polish ci my cnf 如下 init connect SET NAMES u
  • Sails 嵌套模型集合

    我有 3 个型号 用户模型 module exports schema true attributes login type string required true hosts collection host via owners acc
  • PHP 和 MySql 检查表是否为空

    我有点菜鸟 而且我很难过 我需要一些代码来搜索数据库表以查找与 id 变量匹配的行 我需要抓取该表 描述 中的一个字段 如果它为空 我需要显示一条消息 如果不是另一条消息 这是我的代码 我知道我需要添加 mysqli 转义字符串 只需从内存
  • 是否可以使用 LOAD DATA INFILE 类型命令来更新数据库中的行?

    伪表 primary key first name last name date of birth 1 John Smith 07 04 1982 眼下名包含多行的用户全名 期望的结果是分割数据 因此first name包含 John la
  • InnoDB如何存储字符列?

    这个问题仅解决 短 的问题CHAR and VARCHAR列存储在 InnoDB 表中 Does a CHAR 10 列正好占用 10 个字节吗 尾随空格会发生什么情况 对于每个字符需要超过 1 个字节的字符集怎么办 如何VARCHAR 1
  • 如何查找列表/集合是否包含在另一个列表中

    我有一个产品 ID 列表 我想找出哪些订单包含所有这些产品 订单表的结构如下 order id product id 1 222 1 555 2 333 显然我可以通过 PHP 中的一些循环来做到这一点 但我想知道是否有一种优雅的方法可以纯
  • 如何从 mysql 数据库中提取数据并使用 D3.JS 进行可视化?

    我有一个数据库MySQL我想在其中可视化D3 JS 为了做到这一点 首先我想parse中的数据JSON格式 然后编写一个基本代码 从数据库中提取数据并使用D3 JS 我环顾四周 但找不到我想要的东西 因为我是新手D3 JS 我怎样才能做到这
  • LINQ to Entities 无法识别“System.String ToString()”方法,并且该方法无法转换为存储表达式

    我正在将一些内容从一台 mysql 服务器迁移到一台 sql 服务器 但我不知道如何使这段代码工作 using var context new Context foreach var item in collection IQueryabl
  • Laravel 5.2 中使用多个 MySQL 数据库连接查询关系存在

    我正在处理以下情况 我有两个模型 一个Employee with id and name字段和一个Telephone with id employee id and flag字段 还有一个一对多关系在这两种模型之间 即一个员工可能拥有多部电
  • 如何在我的查询中使用日期格式?

    这适用于 phpmyadmin 但是当我在代码上使用时给我一个错误 错误说 解析错误 语法错误 意外的 我的语法有什么问题 gt
  • 复制具有不同列名的 MySQL 表

    我需要将 table1 中与特定列匹配的所有行复制到具有不同列名称的 table2 中 例如 table1 name oldAddressBook table1 的列 name Name Surname Number table2 name
  • 使用命名占位符时 PHP/SQL 插入错误

    我有以下 PHP PDO 语句 STH this gt db gt prepare INSERT INTO UserDetails FirstName LastName Address City County PostCode Phone
  • MySQL 连接最新行

    我有两张桌子agents and calls 座席将始终处于一个活动呼叫中 可能有另一个待处理的呼叫分配给某个座席 而该座席尚未应答 我想编写一个查询来测试最新的调用是否按排序dateCreated与代理表中当前活动的呼叫匹配 以下是当前呼
  • 如何在每次运行 python 程序时添加新列

    我希望我的表的第一列作为卷号 第二列作为名称 每当我运行 python 程序时 我想在表中添加一列日期 在这个新列中 我想填充从 user list 获得的列表将包含值 P A P P 等 如何处理 我尝试首先通过 alter 命令添加一列
  • 执行 mysqli->set_charset() 的永久方法?

    将我可以找到的字符集的所有配置文件和运行时选项设置为 utf 8 后 使用 php 建立的新 mysqli 连接的字符集仍然设置为 latin1 这实际上意味着我必须调用 mysqli gt set charset utf8 每次我连接 m
  • 恐慌:拨打 tcp 127.0.0.1:3306:连接:连接被拒绝

    我正在尝试使用 golang gin gorm 从 docker 连接 mysql 服务器 构建本身已经成功 但是如标题所示 出现了以下错误 panic dial tcp 127 0 0 1 3306 connect connection
  • 数据库字段中的空白不会被trim()删除

    我在 MySQL 的文本字段的段落开头有一些空格 Using trim var text field 在 PHP 中或TRIM text field MySQL 中的语句绝对不执行任何操作 这个空白可能是什么以及如何通过代码删除它 如果我进
  • 如何在MySql中将bool转换为int

    我是 MySql 的新手 所以我不知道很多东西 比如数据类型的转换 如何在 MySql 中将 bool 转换为 int 还有如何在 MySql 中将十进制转换为 Int 将布尔值类型转换为整数 SELECT CAST 1 1 AS SIGN
  • 重命名 MySQL 中的表

    重命名表在 MySQL 中不起作用 RENAME TABLE group TO member 错误信息是 1064 You have an error in your SQL syntax check the manual that cor
  • 寻求有关标记视频系统上的“相关视频”查询的建议

    好吧 我运行一个小型视频网站 在实际的视频页面上有一条与大多数视频页面 例如 YouTube 类似的 相关视频 目前我所做的就是随机获取其标签之一并查找其他视频相同的标签 毫不奇怪 这不是一个好方法 因为有些标签非常模糊 有些视频被错误标记

随机推荐

  • 前端三剑客 - - HTML、CSS、JavaScript

    我是目录 1 HTML 2 CSS 3 JavaScript 1 HTML 1 简介 html 属于 xml 的一种 遵循 xml 格式 html是网页文件 可以通过html提供页面元素 dom元素 html整体结构是一个树形结构 也叫do
  • 【已解决】Keil5点击Debug Setting软件崩溃解决方法

    MDK5 38中 点击Debug Setting软件退解决方法 Nucleo板自带的ST Link 在MDK中点击Debug Setting 软件崩溃 采用删除与工程文件同名的 UVOPTX 问题依旧 应该是买到盗版的硬件了 采用旧版ST
  • Java 面试之前端相关

    前言 这篇文章包括一些前端题目 包括js jquery vue等等 正文 1 javascript与Java的不同 Java代码必须编译才能执行 而JavaScript不需编译 只需由浏览器解释执行 Java多运行于服务器 而JavaScr
  • 尊重原创,我保证这篇文章为原创作品!

    最近确实太忙 目前在研发一款新产品 博客更新有些慢 不过自己还是会坚持来这里写笔记 对自己的要求 每月至少5篇
  • CCF-CSP 202206-3 角色授权 C++满分题解

    题目链接 计算机软件能力认证考试系统 思路见注释 include
  • Mycat+分库分表

    目录 分库分表 垂直分表 垂直分库 水平分库 水平分表 mycat实操场景 mycat配置 mysql读写分离配置 38条消息 mycat 安装与配置 羽之大公公的博客 CSDN博客 mycat 分库分表 众所周知 单表1000w 库500
  • void*(指针)的类型转换-专讲

    指针是一个特殊的变量 它里面存储的数值被解释成为内存里的一个地址 所以不管你存储的是int指针 float指针 long指针 对于存储指针的内存来说都是分配同样大小的内存的 这也为使用void指针可以存储任意类型的指针打下了基础 但是注意在
  • vivado之初步学习同步FIFO-first word fall through类型Common Clock RAM(1)

    一 设置页面 二 查看波形图 上测试代码 timescale 1ns 1ps module fifo study simulation input sysclk reg 7 0 din 0 reg wr en 0 wire almost f
  • C语言打印各种图案合集

    1 C语言打印菱形图案 题目描述 输入一个正整数 n 并输出一个菱形 这个菱形有 2n 1 行 第一行有 2 个字母 A 之后的 n 1 行每行字母 A 的数量会递增 2 个 后面的 n 1 行至 2n 1 行 每行字母 A 的数量会递减
  • 看点:response对象,setContentType(String type)方法的使用示例。

    说明 setContentType String type 方法 指的是响应设置内容类型头 参数type可取text html text plain application x msexcel application msword等值 示例
  • 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别

    使用Python OpenCV与本地二进制模式 LBP 进行人脸识别 1 效果图 2 原理及步骤 2 1 原理 2 2 步骤 3 源码 参考 在深度学习和暹罗网络之前 面部识别算法依赖于特征提取和机器学习 这篇博客将介绍如何使用本地二进制模
  • 【blender基础】常用基础功能记录

    blender常用基础功能记录 1 游标与选中项的吸附功能 1 1 选中项 gt 游标 1 2 选中项 gt 游标 保持偏移 1 3 选中项 gt 活动项 1 4 选中项 gt 栅格点 1 5 游标 gt 栅格点 1 6 游标 gt 世界原
  • linux-Team-网卡绑定

    简介 在 linux 中 Rhel7 之前都是使用 bond 机制来实现多网卡绑定同一个 IP地址 来对网络提供访问 并按不同的模式来负载均衡或者轮回接替管理处理数据 而到Rhel7 之后 提供了一种强大的工具 nmcli工具命令 使用此工
  • 如何导出无水印_短视频如何去水印,短视频去水印原理解析

    大家平时在收集视频素材时候 可能会看见某某短视频平台一个非常中意的作品 但是保存到本地之后 切有LOGO水印感觉非常失望 因为有了水印 可能对我们2次编辑和调用会带来比较多的麻烦 如果直接用视频编辑软件进行马赛克模糊处理 又会对视频本身质量
  • JS正则表达式验证是否为11位有效手机号码

    最近在做注册登陆页面 都要涉及到验证11位有效手机号码 这里贴出代码 希望能帮到有这个开发需求的朋友 function isPoneAvailable poneInput var myreg 1 3 4 5 7 8 0 9 9 if myr
  • 一个vue项目同时兼容pc和移动端

    介绍 公司要求vue开发的项目 既有移动端又有pc端 但是移动端和pc端展示的内容不一样 同一个组件样式也不一样 移动端展示内容比pc端少 那这个时候在一个项目种怎么做的 解决方式 路由写两份 一份移动端的 一份pc端的 这两份路由地址相同
  • 使用vscode找不到Python常见包的问题

    首先明白一个概念 Python会在以下路径中搜索它想要寻找的模块 1 程序所在的文件夹 2 标准库的安装路径 3 操作系统环境变量PYTHONPATH所包含的路径 将自定义库的路径添加到Python的库路径中去 有如下两种方法 1 动态的添
  • spring 控制反转和依赖注入的简单理解

    最近在学习springboot的时候发现我对spring不能抽象说出意思 证明当时并没理解spring只是限于使用 对于刚踏入这行的毕业生这是不行的 为了养成良好的习惯 坚持将工作中的问题总结发成博客供自己观看哈哈 现在来看一个例子 创建了
  • 用Electron将web网页程序包装成桌面应用

    用Electron将web网页程序包装成桌面应用 前提 web 端页面 真的太容易一不小心关掉了 或者 标签页比较多的时候不太容易找到 所以决定快速包装一个 认识electron electron快速入门 搭建electron项目 第一步
  • MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库 SQL语句 MySQL数据库 完整性约束 MySQL数据库备份与还原 MySQL数据库 编码 1 SQL概述 1 1 什么是SQL SQL Structured Query La