当前位置: 首页 > news >正文

MySQL sql语言简介和DDL语句介绍

SQL 通用语法与核心操作详解

SQL 通用语法规范

SQL(Structured Query Language,结构化查询语言)是用于管理关系型数据库的标准语言,掌握其基础语法是进行数据库操作的前提。

  1. 语句结构:SQL 语句可单行或多行书写,每条语句必须以分号(;)结尾,分号是 SQL 语句的终止符,用于标识一条语句的结束。

  2. 格式规范:SQL 语句中可以自由使用空格或缩进以增强代码的可读性。合理的格式化能使复杂的 SQL 语句结构更清晰,便于维护和团队协作。

  3. 大小写规则:在 MySQL 数据库中,SQL 语句不区分大小写,关键字(如 SELECT、INSERT 等)建议使用大写形式,以与表名、字段名等区分开,提升代码的可读性。

  4. 注释方法

    • 单行注释:可使用 -- (两个减号加一个空格)或 # 开头,注释内容从符号开始到本行结束。
    • 多行注释:使用 /* */ 包裹,/* 表示注释开始,*/ 表示注释结束,可跨越多行。

SQL 语言分类

SQL 语言根据功能可分为四大类:

  • DDL(Data Definition Language,数据定义语言):用于定义数据库对象(数据库、表、字段等),如 CREATE、ALTER、DROP 等语句。
  • DML(Data Manipulation Language,数据操纵语言):用于对数据库中的数据进行增删改操作,如 INSERT、UPDATE、DELETE 等语句。
  • DQL(Data Query Language,数据查询语言):用于查询数据库中的数据,核心语句是 SELECT。
  • DCL(Data Control Language,数据控制语言):用于管理数据库的权限和事务控制,如 GRANT、REVOKE、COMMIT 等语句。

DDL 语句 - 数据库操作

查询数据库

  • 查看当前数据库服务器中所有的数据库:

    SHOW DATABASES;
    
  • 查看当前正在使用的数据库:

    SELECT DATABASE();
    

创建数据库

创建数据库的基本语法:

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

参数说明:

  • IF NOT EXISTS:可选参数,用于判断要创建的数据库是否已存在,若不存在则创建,避免重复创建导致的错误。
  • DEFAULT CHARSET:指定数据库的默认字符集,常用的有 utf8、utf8mb4 等(utf8mb4 支持 emoji 表情)。
  • COLLATE:指定数据库的排序规则,通常与字符集对应,如 utf8mb4_general_ci 是 utf8mb4 字符集的通用排序规则。

示例:

CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

删除数据库

删除数据库的语法:

DROP DATABASE [IF EXISTS] 数据库名;
  • IF EXISTS:可选参数,用于判断数据库是否存在,若存在则删除,避免删除不存在的数据库时出错。

示例:

DROP DATABASE IF EXISTS mydb;

使用数据库

要对某个数据库进行操作,需先切换到该数据库:

USE 数据库名;

示例:

USE mydb;  -- 切换到 mydb 数据库

DDL - 表操作

查询表信息

  • 查看当前数据库中所有的表:

    SHOW TABLES;
    
  • 查看指定表的结构(字段信息):

    DESC 表名;  -- 或 DESCRIBE 表名;
    
  • 查看指定表的创建语句(包括表结构、字符集、引擎等详细信息):

    SHOW CREATE TABLE 表名;
    

创建表

创建表的基本语法:

CREATE TABLE 表名 (字段1 字段1类型 [约束条件] [COMMENT 字段1注释],字段2 字段2类型 [约束条件] [COMMENT 字段2注释],...字段n 字段n类型 [约束条件] [COMMENT 字段n注释]
) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集] [COMMENT 表注释];
  • 约束条件:如 PRIMARY KEY(主键)、NOT NULL(非空)、UNIQUE(唯一)等,用于保证数据的完整性和一致性。
  • ENGINE:指定表的存储引擎,MySQL 常用的有 InnoDB(默认,支持事务、外键)、MyISAM 等。

示例:创建一个用户表(user)

CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID,自增主键',username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名,非空且唯一',age INT COMMENT '年龄',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,默认当前时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '用户信息表';

MySQL 常用数据类型详细分类介绍

MySQL 提供了丰富的数据类型,用于存储不同类型的数据。合理选择数据类型不仅能节省存储空间,还能提高查询效率和数据完整性。以下是 MySQL 中常用数据类型的详细分类介绍:

一、数值类型

数值类型用于存储数字数据,MySQL 提供了多种数值类型以满足不同的精度和范围需求。

1. 整数类型

整数类型适用于存储没有小数部分的数字,MySQL 提供了多种整数类型,主要区别在于存储范围和占用空间:

类型字节数有符号范围无符号范围说明
TINYINT1-128 ~ 1270 ~ 255微型整数,适合存储状态标记等小范围数值
SMALLINT2-32768 ~ 327670 ~ 65535小整数,适合存储如年龄(0-120)等中等范围数值
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215中整数,适用范围更广
INT4-2147483648 ~ 21474836470 ~ 4294967295标准整数,最常用的整数类型
BIGINT8-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615大整数,适合存储极大的数值如身份证号、订单号等

使用示例

-- 年龄字段,使用TINYINT UNSIGNED(0-255足够)
age TINYINT UNSIGNED COMMENT '用户年龄'-- 订单ID,使用BIGINT确保足够大的范围
order_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID'

2. 小数类型

小数类型用于存储带有小数部分的数字,分为浮点型和定点型:

  • FLOAT(m, d):单精度浮点型

    • m:总位数(精度),d:小数位数(标度)
    • 占用4字节,精度约7位有效数字
    • 示例:FLOAT(6, 2) 可存储范围 -9999.99 ~ 9999.99
  • DOUBLE(m, d):双精度浮点型

    • 占用8字节,精度约15位有效数字
    • 示例:DOUBLE(10, 4) 可存储范围 -999999.9999 ~ 999999.9999
  • DECIMAL(m, d):定点型(精确小数)

    • m:总位数(165),d:小数位数(030,且d ≤ m)
    • 存储精确的小数,适合财务数据(如金额)
    • 示例:DECIMAL(10, 2) 表示总共10位数字,其中2位是小数,可存储范围 -99999999.99 ~ 99999999.99

使用示例

-- 产品价格,使用DECIMAL确保精确计算
price DECIMAL(10, 2) NOT NULL COMMENT '产品价格'-- 科学计算数据,使用DOUBLE
temperature DOUBLE(5, 2) COMMENT '温度值'

二、字符串类型

字符串类型用于存储文本数据,MySQL 提供了多种字符串类型以适应不同长度和特性的文本。

1. 短字符串类型

  • CHAR(n):固定长度字符串

    • n:字符串长度(1~255)
    • 存储时会用空格填充到指定长度,查询时自动去除尾部空格
    • 适合存储长度固定的数据(如身份证号、手机号、性别等)
    • 示例:CHAR(11) 适合存储11位手机号
  • VARCHAR(n):可变长度字符串

    • n:最大长度(0~65535)
    • 仅占用实际需要的存储空间加1-2字节的长度标识
    • 适合存储长度不固定的文本(如用户名、地址等)
    • 示例:VARCHAR(50) 适合存储最长50个字符的用户名

CHAR与VARCHAR对比

  • CHAR查询效率略高,VARCHAR更节省空间
  • 当数据长度接近固定时,优先使用CHAR

2. 长字符串类型

当需要存储超过255个字符的文本时,可使用以下类型:

类型最大长度说明
TINYTEXT255字节微型文本,适合存储简短描述
TEXT65535字节(约64KB)标准文本类型,适合存储文章段落等
MEDIUMTEXT16777215字节(约16MB)中长文本,适合存储较长的文章、HTML内容等
LONGTEXT4294967295字节(约4GB)长文本,适合存储极长的文本数据如日志、大型文档等

使用示例

-- 商品简介,使用TEXT
product_desc TEXT COMMENT '商品详细描述'-- 系统日志,使用LONGTEXT
system_log LONGTEXT COMMENT '系统运行日志'

3. 二进制字符串类型

用于存储二进制数据(如图片、文件等):

  • BINARY(n):固定长度二进制字符串
  • VARBINARY(n):可变长度二进制字符串
  • TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB:对应不同长度的二进制大对象

注意:在实际开发中,通常不建议将图片、文件等大二进制数据直接存储在数据库中,而是存储文件路径,文件本身存储在文件系统中。

三、日期时间类型

日期时间类型用于存储日期和时间信息,MySQL 提供了多种类型以满足不同的时间精度需求:

类型字节数格式范围说明
DATE3YYYY-MM-DD1000-01-01 ~ 9999-12-31仅存储日期
TIME3HH:MM:SS-838:59:59 ~ 838:59:59仅存储时间,可表示负数(过去的时间)和超过24小时的时间
YEAR1YYYY1901 ~ 2155仅存储年份
DATETIME8YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:59存储日期和时间,不受时区影响
TIMESTAMP4YYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC存储日期和时间,受时区影响,可自动更新

使用示例

-- 用户生日,仅需日期
birthday DATE COMMENT '用户生日'-- 订单创建时间,使用DATETIME
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '订单创建时间'-- 最后登录时间,使用TIMESTAMP自动更新
last_login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后登录时间'

DATETIME与TIMESTAMP对比

  • DATETIME范围更大,不受时区影响,适合存储固定的日期时间(如生日)
  • TIMESTAMP范围较小,受时区影响,适合存储需要随系统时区自动调整的时间(如日志时间)

四、枚举和集合类型

1. ENUM类型(枚举)

ENUM类型用于存储一个预定义集合中的单个值,适合存储状态、类型等有限选项的数据:

-- 性别字段,只能是'男'或'女'
gender ENUM('男', '女') COMMENT '性别'-- 订单状态,只能是预定义的几个状态
order_status ENUM('待支付', '已支付', '已发货', '已完成', '已取消') COMMENT '订单状态'

特点:

  • 最多可包含65535个不同的成员
  • 存储时使用数字索引(1开始),节省空间
  • 如果插入的值不在预定义列表中,会插入一个空值(严格模式下会报错)

2. SET类型(集合)

SET类型用于存储一个预定义集合中的零个或多个值,适合存储多个可选值:

-- 兴趣爱好,可选择多个
hobby SET('读书', '运动', '音乐', '旅游', '游戏') COMMENT '兴趣爱好'

特点:

  • 最多可包含64个不同的成员
  • 存储时使用位运算,节省空间
  • 查询时可以使用FIND_IN_SET()函数检查某个值是否存在

五、数据类型选择建议

  1. 最小化原则:在满足需求的前提下,选择最小的类型(如年龄用TINYINT而非INT)
  2. 精确性原则:财务数据使用DECIMAL而非FLOAT/DOUBLE
  3. 可读性原则:选择直观反映数据含义的类型(如日期用DATE而非字符串)
  4. 索引考虑:过长的字符串类型不适合作为索引,可考虑使用前缀索引
  5. 未来扩展:预留一定的扩展空间(如VARCHAR(50)足够时不要用VARCHAR(20))

合理选择数据类型是数据库设计的基础,直接影响数据库的性能、存储空间和数据完整性,开发中应根据实际业务需求仔细斟酌。

修改表结构

  1. 修改字段的数据类型

    ALTER TABLE 表名 MODIFY 字段名 新数据类型;
    

    示例:将 user 表的 age 字段类型改为 SMALLINT

    ALTER TABLE user MODIFY age SMALLINT;
    
  2. 修改字段名和字段类型

    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [COMMENT 注释] [约束条件];
    

    示例:将 user 表的 age 字段改名为 user_age,类型改为 TINYINT

    ALTER TABLE user CHANGE age user_age TINYINT COMMENT '用户年龄';
    
  3. 添加字段

    ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [COMMENT 注释];
    

    示例:向 user 表添加 email 字段

    ALTER TABLE user ADD email VARCHAR(100) UNIQUE COMMENT '邮箱,唯一';
    
  4. 删除字段

    ALTER TABLE 表名 DROP 字段名;
    

    示例:删除 user 表的 email 字段

    ALTER TABLE user DROP email;
    
  5. 修改表名

    ALTER TABLE 表名 RENAME TO 新表名;
    

    示例:将 user 表改名为 users

    ALTER TABLE user RENAME TO users;
    

删除表

  1. 直接删除表

    DROP TABLE [IF EXISTS] 表名;
    
    • 此操作会彻底删除表结构及所有数据,且不可恢复。
      示例:删除 users 表
    DROP TABLE IF EXISTS users;
    
  2. 清空表数据并重置自增主键

    TRUNCATE TABLE 表名;
    
    • TRUNCATE 会删除表中所有数据,但保留表结构,同时会重置自增主键(AUTO_INCREMENT)的值为初始值。
    • 与 DELETE 语句(DML)不同,TRUNCATE 是 DDL 语句,执行速度更快,且无法回滚。

示例:清空 users 表数据

TRUNCATE TABLE users;

补充:Ubuntu 系统中 MySQL 图形化工具安装

以下是在 Ubuntu 系统中安装和启动 MySQL Workbench 的完整步骤总结:

一、安装 MySQL Workbench

由于 Ubuntu 官方软件源中可能没有 mysql-workbench-community 包,推荐使用 snap 方式安装(更简单可靠):

  1. 打开终端,执行安装命令:
    sudo snap install mysql-workbench-community
    
    等待安装完成,终端会显示安装成功的提示。

二、启动 MySQL Workbench

方法 1:通过命令行启动
  • 直接使用完整路径启动:

    /snap/bin/mysql-workbench-community
    
  • (推荐)创建简化命令(一次设置,永久使用):

    sudo ln -s /snap/bin/mysql-workbench-community /usr/local/bin/mysql-workbench
    

    之后即可直接输入以下命令启动:

    snap run mysql-workbench-community
    
方法 2:通过图形界面启动
  • 点击 Ubuntu 桌面左下角的“应用菜单”(九宫格图标)
  • 在搜索框中输入“MySQL Workbench”
  • 点击搜索结果中的图标即可启动

三、补充操作

  • 更新 Workbench

    sudo snap refresh mysql-workbench-community
    
  • 卸载 Workbench

    sudo snap remove mysql-workbench-community
    

通过以上步骤,即可在 Ubuntu 系统中完成 MySQL Workbench 的安装和启动,进行数据库可视化管理操作。

http://www.dtcms.com/a/393943.html

相关文章:

  • [数据结构] 二叉树
  • 4+10+N,华为坤灵“求解”中小企业智能化
  • ECharts 四川省地图渲染与交互效果实现
  • Zynq开发实践(SDK之自定义IP3 - 软件IP联调)
  • VMware虚拟机中CentOS的network配置好后ping不通问题解决方法
  • 传输层————TCP
  • [已更新]2025华为杯B题数学建模研赛B题研究生数学建模思路代码文章成品:无线通信系统链路速率建模
  • 机器学习相关内容
  • 【win11】自动登录,开机进入桌面
  • 关系型数据库系统概述:MySQL与PostgreSQL
  • python编程练习(Day8)
  • 【Linux命令从入门到精通系列指南】apt 命令详解:Debian/Ubuntu 系统包管理的现代利器
  • xtuoj 7的倍数
  • 【开题答辩全过程】以 java牙科门诊管理系统为例,包含答辩的问题和答案
  • 【论文速递】2025年第19周(May-04-10)(Robotics/Embodied AI/LLM)
  • 鸿蒙 - 验证码功能
  • 大数据毕业设计选题推荐-基于大数据的汽车之家数据分析系统-Hadoop-Spark-数据可视化-BigData
  • Bioconductor 项目为高通量生物数据分析提供了大量强大的工具 Bioconductor规范,核心是一系列设计精良、标准化的数据对象
  • 还有新援?利物浦即将启动预签协议,锁定英格兰新星
  • Audacity音频软件介绍和使用
  • SpringBoot配置优化:Tomcat+数据库+缓存+日志全场景教程
  • 《数据库系统概论》——陈红、卢卫-1-数据库系统概述
  • VLA-Adapter:一种适用于微型 VLA 的有效范式
  • JVM内存模型深度剖析与优化
  • 固定收益理论(六)波动率曲面、曲线及其构建模型
  • Zotero使用学习笔记
  • 分布式 | 布隆过滤器实战指南:原理、编码实现、应用与Redisson最佳实践
  • STM32的VSCode下开发环境搭建
  • Rsync+sersync实现数据实时同步
  • HttpServletRequest/Response/请求转发/响应重定向