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

MySQL 数据库操作指南:从数据库创建到数据操作

关键词:MySQL;数据库操作;DDL;DML

一、引言

MySQL 作为广泛应用的关系型数据库管理系统,对于开发人员和数据库管理员而言,熟练掌握其操作至关重要。本文章通过一系列 SQL 示例,详细阐述 MySQL 数据库的常用操作。

参考资料:黑马程序员

二、数据库的查询与创建

2.1 查询所有数据库

使用 SHOW DATABASES; 语句可查询当前 MySQL 实例中的所有数据库。此语句返回一个列表,包含已存在的数据库名称。例如:

SHOW DATABASES;

2.2 创建数据库

通过 CREATE DATABASE 语句创建新的数据库。例如,创建名为 db02 的数据库:

CREATE DATABASE if not extists db02;

if not exists :数据库不存在,则创建该数据库;如果存在则不创建 

2.3 使用数据库

use db01;

三、表结构定义(DDL - Data Definition Language)

3.1 创建表 - 基本语法

使用 CREATE TABLE 语句创建表,并定义表中的列及其属性。以下示例创建一个名为 tb_user 的表,包含 idusernamenameage 和 gender 列:

CREATE TABLE tb_user (
    id INT COMMENT 'ID, 唯一标识',
    username VARCHAR(20) COMMENT '用户名',
    name VARCHAR(10) COMMENT '姓名',
    age INT COMMENT '年龄',
    gender CHAR(1) COMMENT '性别'
) COMMENT '用户表';

数值类型

类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述
TINYINT1byte(-128,127)(0,255)小整数值
SMALLINT2bytes(-32768,32767)(0,65535)大整数值
MEDIUMINT3bytes(-8388608,8388607)(0,16777215)大整数值
INT/INTEGER4bytes(-2147483648,2147483647)(0,4294967295)大整数值
BIGINT8bytes(-2^63,2^63-1)(0,2^64-1)极大整数值
FLOAT4bytes(-3.402823466 E+38,3.402823466351 E+38)0 和 (1.175494351 E-38,3.402823466 E+38)单精度浮点数值
DOUBLE8bytes(-1.7976931348623157 E+308,1.7976931348623157 E+308)0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308)双精度浮点数值
DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值(精确定点数)

 

字符串类型

类型大小描述
CHAR0-255 bytes定长字符串(需要指定长度)
VARCHAR0-65535 bytes变长字符串(需要指定长度)
TINYBLOB0-255 bytes不超过255个字符的二进制数据
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

日期时间类型

类型大小范围格式描述
DATE31000-01-01 至 9999-12-31YYYY-MM-DD日期值
TIME3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间
YEAR11901 至 2155YYYY年份值
DATETIME81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值,时间戳

 

3.2 创建表 - 基本语法(含约束)

在创建表时,可以为列添加约束条件,以确保数据的完整性。例如,为 tb_user 表添加主键、非空、唯一和默认值约束:

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

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

3.3 创建表 tb_emp

除了纯 SQL 语句创建表,也可借助图形化工具创建表。以下为通过 SQL 语句创建 tb_emp 表,包含主键、唯一约束、默认值等多种约束:

CREATE TABLE tb_emp (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    username VARCHAR(20) NOT NULL COMMENT '用户名',
    password VARCHAR(32) DEFAULT '123456' NULL COMMENT '密码',
    name VARCHAR(10) NOT NULL COMMENT '姓名',
    gender TINYINT UNSIGNED NOT NULL COMMENT '性别, 1 男, 2 女',
    image VARCHAR(300) NULL COMMENT '图像url',
    job TINYINT UNSIGNED NULL COMMENT '职位, 1 班主任, 2 讲师, 3 学工主管, 4 教研主管',
    entrydate DATE NULL COMMENT '入职日期',
    create_time DATETIME NOT NULL COMMENT '创建时间',
    update_time DATETIME NOT NULL COMMENT '修改时间',
    CONSTRAINT tb_emp_username_uindex UNIQUE (username)
) COMMENT '员工表';

3.4 查看表结构

  • 查看当前数据库下的表:使用 SHOW TABLES; 语句查看当前数据库中所有表的名称:
SHOW TABLES;

  • 查看指定表结构:通过 DESC 语句查看指定表的详细结构,包括列名、数据类型、是否允许为空等信息。例如,查看 tb_emp 表结构:
DESC tb_emp;

  • 查看数据库的建表语句:使用 SHOW CREATE TABLE 语句查看创建指定表的完整 SQL 语句,包括表的所有定义和约束。例如,查看 tb_emp 表的建表语句:
SHOW CREATE TABLE tb_emp;

3.5 修改表结构

  • 添加字段:使用 ALTER TABLE...ADD 语句为表添加新字段。例如,为 tb_emp 表添加 qq 字段,类型为 VARCHAR(11)
ALTER TABLE tb_emp ADD qq VARCHAR(11) COMMENT 'QQ';

  • 修改字段类型:使用 ALTER TABLE...MODIFY 语句修改表中已有字段的类型。例如,将 tb_emp 表中 qq 字段的类型修改为 VARCHAR(13) 并命名为 qq_num
ALTER TABLE tb_emp MODIFY qq_num VARCHAR(13) COMMENT 'QQ';

  • 修改字段名及类型:使用 ALTER TABLE...CHANGE 语句修改字段名及类型。例如,将 tb_emp 表中 qq 字段修改为 qq_num,类型为 VARCHAR(13)
ALTER TABLE tb_emp CHANGE qq qq_num VARCHAR(13) COMMENT 'QQ';

  • 删除字段:使用 ALTER TABLE...DROP COLUMN 语句删除表中的字段。例如,删除 tb_emp 表中的 qq_num 字段:
ALTER TABLE tb_emp DROP COLUMN qq_num;

  • 修改表名:使用 RENAME TABLE 语句修改表的名称。例如,将 tb_emp 表名修改为 emp
RENAME TABLE tb_emp TO emp;

3.6 删除表结构

使用 DROP TABLE 语句删除表。为避免删除不存在的表导致错误,可使用 IF EXISTS 子句。例如,删除 tb_emp 表:

DROP TABLE IF EXISTS tb_emp;

四、数据操作语言(DML - Data Manipulation Language)

4.1 插入数据 - INSERT

  • 为指定字段插入值:使用 INSERT INTO...VALUES 语句为表中的指定字段插入数据。例如,为 tb_emp 表的 usernamenamegendercreate_time 和 update_time 字段插入值:
INSERT INTO tb_emp (username, name, gender, create_time, update_time) VALUES ('wuji', '张无忌', 1, NOW(), NOW());

  • 为所有字段插入值:为表中的所有字段插入数据时,需按表定义的字段顺序提供值。例如:
INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time)
VALUES (NULL, 'zhiruo', '123', '周芷若', 2, '1.jpg', 1, '2010 - 01 - 01', NOW(), NOW());
-- 或者:
INSERT INTO tb_emp VALUES (NULL, 'zhiruo2', '123', '周芷若', 2, '1.jpg', 1, '2010 - 01 - 01', NOW(), NOW());

  • 批量插入数据:可一次性为表插入多条记录。例如,批量为 tb_emp 表的 usernamenamegendercreate_time 和 update_time 字段插入数据:
INSERT INTO tb_emp (username, name, gender, create_time, update_time) VALUES
('weifuwang', '韦一笑', 1, NOW(), NOW()), ('xieshiwang', '谢逊', 1, NOW(), NOW());

4.2 更新数据 - UPDATE

  • 更新单条记录:使用 UPDATE...SET 语句更新表中的数据,并通过 WHERE 子句指定更新条件。例如,将 tb_emp 表中 ID 为 1 的员工姓名更新为 张三 并更新 update_time
UPDATE tb_emp SET name = '张三', update_time = NOW() WHERE id = 1;

  • 更新多条记录:若不指定 WHERE 子句,则会更新表中的所有记录。例如,将 tb_emp 表中所有员工的入职日期更新为 2010 - 01 - 01 并更新 update_time
UPDATE tb_emp SET entrydate = '2010 - 01 - 01', update_time = NOW();

4.3 删除数据 - DELETE

  • 删除单条记录:使用 DELETE FROM...WHERE 语句删除表中的数据,并通过 WHERE 子句指定删除条件。例如,删除 tb_emp 表中 ID 为 1 的员工:
DELETE FROM tb_emp WHERE id = 1;
  • 删除所有记录:若不指定 WHERE 子句,则会删除表中的所有记录。例如,删除 tb_emp 表中的所有员工:
DELETE FROM tb_emp;

相关文章:

  • dotnet 编译模式使用教程
  • AR 赋能儿童娱乐:剧本杀与寻宝小程序搭建秘籍​
  • PyTorch使用(6)-张量形状操作
  • Linux笔记之Ubuntu系统设置自动登录tty1界面
  • 七种驱动器综合对比——《器件手册--驱动器》
  • 14-Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析(二分类))
  • Mysql是怎么存储数据的
  • 从代码学习深度学习 - 序列到序列学习数据预处理 PyTorch 版
  • Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案
  • [Effective C++]条款27:尽量少做转型动作
  • VMware-workstation-full-12.5.2 install OS X 10.11.1(15B42).cdr
  • 安卓ConstraintLayout + Barrier 实战:让 TextView 动态宽度但不超过另一个控件
  • QT ARM 开发环境搭建
  • 深度解析LinkedList工作原理
  • 一个极简的反向传播实现
  • 【数据分享】1999—2023年地级市地区生产总值及一二三产构成数据(Shp/Excel格式)
  • 快速排序笔记
  • 16、Swift框架微调实战(1)-自我认知数据LORA微调
  • 基于大模型的病态窦房结综合征预测及治疗方案研究报告
  • 【Git “rev-parse“ 命令详解】
  • 西安碑林“石刻艺术室”焕新:从汉画像石看到唐代石虎
  • 国家能源局:4月份全社会用电量同比增长4.7%
  • 2025年新季夏粮收购量将达到2000亿斤左右
  • 搜狐一季度营收1.36亿美元,净亏损同比收窄超两成
  • 揭秘拜登退选内幕新书引争议,“垃圾信息在四处传播”?
  • 世卫大会拒绝涉台提案,外交部:坚持一个中国原则是人心所向