Learn02:MySQL的定义与操作语言
2026/9/12 21:05:33 网站建设 项目流程

1.SQL语句的基本介绍

SQL全称是结构化查询语言(Structured Query Language)。

SQL语句的主要作用就是对数据库中的数据进行相应的管理操作(增、删、改、查)。

  • 数据的增、删、改、查

  • 数据的增、删、改、查

  • 表记录的增、删、改、查......

1.1.SQL语句分类

主要学习的有三大类: DDL DML DQL (DCL本部分暂不细说)

SQL分类:

  • 数据定义语言DDL(Data Definition Language),用来定义数据库对象:数据库,表等。

    • 关键字:create,alter,drop等

    • 作用: 对数据库中的 库 和 表 进行定义

      (创建数据库、删除数据库、查看数据库、创建表、删除表、修改表、查询表)

  • 数据操作语言DML(Data Manipulation Language),用来对库表中表的记录进行增、删、改操作。
    • 关键字:insert,delete,update等

    • 作用: 对数据库中表数据进行操作(添加数据、删除数据、修改数据)

  • 数据查询语言DQL(Data Query Language),用来查询数据库中表的记录。

    • 关键字:select,from,where等

    • 作用: 对数据库中表数据进行查询操作

  • 数据控制语言DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。(DBA工程师)

    • 作用: 对数据库这个软件进行管理的语言。 比如 设置用户名、设置密码、设置不同用户可以访问那些库或者那些表

1.2.SQL通用语法(普通话)

  • 分号结尾: SQL语句可以单行或多行书写,以英文分号结尾

  • 不区分大小写:MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

    • 例如:SELECT * FROM user。

  • 注释:多行 /* 注释内容 */ 单行 -- 或者 # 的方式完成注释

    • DataGrip快速注释/取消注释的快捷键:ctrl + /

    • 多行注释,选中内容 快捷键:ctrl + shif t+ /

  • 空格:可使用空格和缩进来增强语句的可读性

    • DataGrip软件sql格式化快捷键: ctrl + alt + l

  • 缩进:控制代码的缩进保持可读性

    • 向后缩进 : tab键

    • 向前缩进: shift + tab键

编写代码时也可通过tab键快速跳过括号

1.3.数据库操作

DDL: 数据库定义语句

作用: 对数据库中 库 和 表 进行定义操作 (创建库\删除库\查询库\创建表\删除表\修改表\查询表)

1.3.1创建数据库

  • datagrip界面

  • 创建每日文件夹

  • 创建sql文件

# 直接创建数据库,如果存在则报错 create database 数据库名; CREATE DATABASE 数据库名; ​ # 如果数据库不存在则创建 # if not exists 可选 判断是否存在 create database if not exists 数据库名; CREATE DATABASE IF NOT EXISTS 数据库名; ​ # 创建数据库并指定utf8或者gbk码表编码方式 # charset='utf8' 字符集编码, charset='gbk' create database 数据库名称 charset='utf8'; CREATE DATABASE 数据库名称 CHARSET='utf8' ​ #查看数据库的(详细信息),即:码表,格式:show create database 数据库名; show create database day01_db;

快速执行sql语句: ctrl + enter

注意:数据库 仅能执行一次,

如果库存在, 直接报错 Can't create database 'learn02_db'; database exists

需求:

-- 需求1: 请创建一个 learn02_db 数据库

-- 需求2: 请创建一个 learn02_db_test1 数据库 要求该数据库不存在的时候创建它

-- 需求3: 请创建一个 learn02_db_test2 数据库 要求该数据库采用utf8编码格式

-- 需求1: 请创建一个 learn02_db 数据库 create database learn02_db; # 仅能执行一次, 如果库存在, 直接报错 Can't create database 'learn02_db';
-- 需求2: 请创建一个 learn02_db_test1 数据库 要求该数据库不存在的时候创建它; create database if not exists learn02_db_test1; # 如果库存在, 不执行 , 如果不存在 才会创建这个数据库 不会报错
-- 需求3: 请创建一个 learn02_db_test2 数据库 要求该数据库采用utf8编码格式 create database if not exists learn02_db_test2 charset = 'utf8';

1.3.2查看所有数据库

# 小写 show databases;
# 大写 SHOW DATABASES;

切换大小写

  1. 方法一选中字段切换大小写快捷键:ctrl+shift+u

  2. 如图所示步骤

    按照图片设置关键字大写,之后快捷键ctrl+alt+L格式化可以让关键字变成大写

1.3.3使用数据库

# 使用指定数据库 use 数据库名称; USE 数据库名称;
# 展示选中的数据库 select database(); SELECT DATABASE();
注意: 如果想操作数据库, 必须要先使用数据库

1.3.4删除数据库

# 删除指定的数据库 drop database 数据库名; DROP DATABASE 数据库名;

!!! 注意 在实际工作中不要删除数据库

!!! 注意 在实际工作中不要删除数据库

!!! 注意 在实际工作中不要删除数据库

2.DDL-数据定义语言

2.1.数据类型

编程的核心就是在处理数据

数据类型是用于约束每一列应该存储什么类型的数据

分类类型名称说明
整数类型tinyint很小的整数(1字节) 场景: 状态码、布尔值
int普通大小的整数(4字节) 场景: 用户ID、订单数、点击数
小数类型float单精度浮点数, 有误差, 6~7 位
double (误差更小,≠ "精确" )双精度浮点数, 有误差, 15~16 位
decimal(m,d)

精确存储,字符串形式存储数字

d: 多少位小数

m: 位数总长度(含整数和小数)

decimal(10, 2) 整数8位小数2位

日期类型date

只关心日期,不关心具体时间

场景: 生日、入职日期、节日

time

只关心时间,不关心具体日期

场景: 上班时间、退房时间

timestamp

日期 和 时间 都要

场景: 订单创建时间、用户登录时间

字符串char(m)

定长字符串, 固定个数

场景: 身份证、手机号

varchar(m)

可变长度, 最多不要超过长度

场景: 用户名、标题、地址

text

大文本数据

场景: 存几千、几万字的文章

重点掌握数据类型:

  • 整数类型: int

  • 小数类型: decimal(m,d)

  • 日期类型: timestamp

  • 字符串类型: varchar(长度)

2.2.创建数据表

# 先使用数据库 use 数据库名称; ​ create table 表名 ( 字段名1 数据类型 [约束], 字段名2 数据类型 [约束] );

需求1:

# 在learn02_db的库中创建分类表 category

# 字段说明: 分类 id 分类名称 cname

# 第一步 创建 learn02_db库 create database learn02_db; ​ # 第二步: 使用库 use learn02_db; ​ # 第三步: 创建表 create table category( id varchar(10) primary key , cname varchar(20) ) ; # 数据案例: id=1 cname=Phone

这里id varchar() 后面的primary是主键,也就是依次按照1,2,3,4递增,不可重复

后面会详细说

需求2:

#在learn02_db的库中创建商品表 product

#字段说明: 编号: pid 商品名称: pname 商品价格: price 商品分类: category_id

create table learn02_db.product( pid int , pname varchar(50), price decimal(10,1), category_id varchar(10) ); #数据案例:pid=1 pname=苹果手机 price=3999.9 category_id=c01

创建数据表直接写product即可,有时候你没有选择数据库(use 数据库名;),他可能会给前面出现一个数据库.数据表(learn02_db.product),如果选择了数据库就不会出现这种情况。

后文中 表的字段 如果没有选择表 也会出现 数据表.字段名的情况。

2.3.查看表

# 查看数据库中已有的表 show tables; ​ # 查看指定数据表的结构 即查看各字段的数据类型/约束 desc 表名;

2.4.删除表

drop table 表名; -- 删除 category, 如果表存在的情况下: drop table learn02_db.category; ​ -- 删除 product, 并且重新创建该表 drop table learn02_db.product; ​ create table learn02_db.product( pid int , pname varchar(50), price decimal(10,1), category_id varchar(10) );

2.5.修改表结构格式

场景 - 需求变更

2.5.1添加列

注意

  1. 约束按需求选择添加, 可以没有约束, 类型必须要填写, 并且只能填写一个类型

  2. 表字段名称不能重复, 否则会出现 Duplicate column 错误

  3. 如果列名和关键字相同, 需要在列名两边加反引号` `

# 添加列 alter table 表名 add 新列名 类型(长度) [约束]; ​ # 举例 alter table learn02_db.category add `desc` varchar(20); # 这里的desc是关键字,如果要用作列名需要加`用来转义`

2.5.2修改列

# 修改列 alter table 表名 change 旧列名 新列名 类型(长度) [约束]; alter table 表名 modify 列名 新类型(长度) [约束]; # 为分类表的分类描述字段更换为 description varchar(30) alter table day03_db.category change `desc` description varchar(30); # 更换为des decimal(5,2) alter table category change description des decimal(5,2); alter table category modify des decimal(5,3);

change与modify 区别:

- change更强大,修改类型的同时还能修改列名,

- modify不能修改列名。

2.5.3删除列

# 删除列 alter table 表名 drop 列名; # 需求:删除分类表中description这列 alter table category drop description; alter table learn02_db.category drop description;

2.5.4修改表名

# 修改表名 rename table 旧表名 to 新表名; ​ # 需求:将learn02_db数据库中的person表名改名成students; rename table personn to students; rename table learn02_db.person to students;

3.DML - 数据操作语言

作用: 对数据库的表中的记录进行相关的操作(插入数据、更新数据、删除数据)

3.1.插入数据:insert

# 不指定字段, 一次性插入一行 insert into 表 values(值1, 值2, 值3..); ​ # 不指定字段, 一次性添加多个值 insert into 表 values(值1, 值2), (值4, 值5); ​ # 指定字段, 一次性插入一行 insert into 表 (字段1, 字段2) values(值1, 值2); ​ # 指定字段, 一次性添加多个值 insert into 表 (字段1, 字段2) values(值1, 值2),(值3, 值4);

注意:

1. 值与字段必须对应,个数相同,类型相同

2. 值的数据大小必须在字段的长度范围内

3. 除了数值类型外,其它的字段类型的值必须使用引号引起(建议单引号)

4. 如果要插入空值,可以不写字段,或者插入 null

5. 表后的字段可以省略,一旦省略后, values后面需要填写该表的全部字段的值,必须按照表字段的顺序

3.2更新数据:update

# 更新所有行 update 表名 set 字段名1=值1,字段名2=值2,...; ​ # 更新符合条件的行 update 表名 set 字段名=值,字段名=值,... where 条件;

注意:

1. 列名的类型与修改的值要一致

2. 修改值得时候不能超过最大长度

3. 除了数值类型外,其它的字段类型的值必须使用引号引起

4. 如果需要对表中某列或者某几列的数据全部进行更新, 不需要使用 where条件

5. 如果对表中某条或者某几条数据进行指定列的值修改操作, 需要使用 where 条件

6. set 后面 主要用于设置对那个字段进行修改, 以及对应要修改为具体的值是多少

案例练习

#需求1:

  • 在category表中增加一个新列active, 表示是否激活, 用 0表示(未激活)和 1表示(已激活)

  • 将该列的值, 全部设置为1

# 需求2: id = 1

  • 先在product表中插入数据再更新: insert into product values(1, '某米', '1800','手机');

  • 更新: 找到商品表product 中 id为1的数据, 将其商品名称 更改为'华为Mate 70' ,价格为 '5999'

-- 更新数据操作: # 需求1: # 在category表中增加一个新列, 表示是否激活 active, 值为 0 和 1 # 将该列的值, 全部设置为1 ​ # 第一步: 修改表结构 增加列 alter table learn02_db.category add active int; ​ # 第二步: active 列的值 全部修改为 1 update learn02_db.category set active = 1; ​ ​ # 需求2: id = 1 # 更改 商品表 中 id为1的数据, 将其商品名称 更改为 华为Mate 70 价格为 5999 update learn02_db.product set pname = '华为Mate 70',price = 5999 where pid = 1;

3.3删除表记录:delete

# 删除满足条件的数据 delete from 表名 where 条件; ​ # 删除表中所有的数据 delete from 表名; truncate table 表名; # 区别:truncate 会清空主键,后面会讲

案例练习

#需求1: 删除商品表product中,价格大于 5000元的商品 (price > 5000)

#需求2: 清空表操作(商品表product)

# 需求1: 删除商品表中,价格大于 5000元的商品 (price > 5000) delete from learn02_db.product where price > 5000; ​ # 需求2: 清空表操作(商品表) delete from learn02_db.product; truncate table product;

上面的所有的案例练习可以先自己动手练习一下,再看我写的,这样可以加深印象。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询