【MySQL】SQL语句之DDL、DML、DQL(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】SQL语句之DDL、DML、DQL

DDL之表操作:table

DDL(Data Definition Language) 本小结描述 对数据表的创建查看删除和使用。

创建表


  1. 基本格式:

6936bd9be0c248359a2447cd44c6f2c6.png

字段名 参数规定表中列的名称。


数据类型 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。


长度 参数规定表中列的最大长度。


更多数据类型见附录:


示例:


现在我们想要创建一个名为 "Persons" 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。


我们使用下面的 CREATE TABLE 语句:

f28dfa99e6ce49d79d0f3514101911d1.png

PersonID 列的数据类型是 int,包含整数。


LastName、FirstName、Address 和 City 列的数据类型是 varchar,包含字符,且这些字段的最大长度为 255 个字符。

53e50bc3c45d4010851e1a5e8fdddc81.png

1.增强格式:


539e0c9231194db5aaf67fb0ee7c169e.png


SQL 约束用于规定表中的数据规则。


如果存在违反约束的数据行为,行为会被约束终止。


约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。


在 SQL 中,我们有如下约束:


  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
  • DEFAULT - 规定没有给列赋值时的默认值。

在后面的章节,我们会讲解相关的约束。


查看表

查看数据库中的所有表:

格式:show tables;

  1. 查看表结构:

格式:desc 表名;

例如:desc sort;

删除表

  1. 格式:drop table 表名;

例如:drop table category;

修改表结构 格式:

  1. alter table 表名 add 列名 类型(长度) [约束];

作用:修改表添加列.

例如:

#1,为分类表添加一个新的字段desc为分类描述,类型是 varchar(20)


ALTER TABLE category ADD `desc` VARCHAR(20);


alter table 表名 modify 列名 类型(长度) [约束];

作用:修改表修改列的类型长度及约束.


例如:


#2, 为分类表的描述字段desc进行修改,类型varchar(50) 添加约束 not null


ALTER TABLE category MODIFY desc VARCHAR(50) NOT NULL;


  1. alter table 表名 change 旧列名 新列名 类型(长度) [约束];

作用:修改表修改列名.


例如:


#3, 为分类表的分类名称字段进行更换更换为 snamesname varchar(30)


ALTER TABLE category CHANGE desc description VARCHAR(30);


alter table 表名 drop 列名;

作用:修改表删除列.


例如:


#4, 删除分类表中snamename这列


ALTER TABLE category DROP description;


rename table 表名 to 新表名;

作用:修改表名


例如:


#5, 为分类表category改名成 category2


RENAME TABLE category TO category2;


alter table 表名 character set 字符集;

作用:修改表的字符集


例如:


#6, 为分类表 category 的编码表进行修改,修改成 gbk


ALTER TABLE category CHARACTER SET gbk;


DML数据操作语言

简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新

插入表记录:insert


  1. 语法:

-- 向表中插入某些字段


insert into 表 (字段1,字段2,字段3..) values  (值1,值2,值3..);


--向表中插入所有字段,字段的顺序为创建表时的顺序


insert into 表 values (值1,值2,值3..);


  1. 注意:

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

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

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

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


  1. 例如:

INSERT INTO category(cid,cname) VALUES('c001','电器');


INSERT INTO category(cid,cname) VALUES('c002','服饰');


INSERT INTO category(cid,cname) VALUES('c003','化妆品');


INSERT INTO category(cid,cname) VALUES('c004','书籍');


INSERT INTO category(cid) VALUES('c002');


INSERT INTO category(cname) VALUES('耗材');


更新表记录:update


用来修改指定条件的数据,将满足条件的记录指定列修改为指定值


  1. 语法:

--更新所有记录的指定字段


update 表名 set 字段名=值,字段名=值,...;


--更新符号条件记录的指定字段


update 表名 set 字段名=值,字段名=值,... where 条件;


  1. 注意:
  2. 列名的类型与修改的值要一致.
  3. 修改值得时候不能超过最大长度.

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


删除记录:delete


  1. 语法:

delete from 表名 [where 条件];


或者


truncate table 表名;


  1. 面试题:

删除表中所有记录使用delete from 表名; 还是用truncate table 表名;


删除方式:delete 一条一条删除,不清空auto_increment记录数。


truncate 直接将表删除,重新建表,auto_increment将重置,从1重新开始。


DQL数据查询语言


简称DQL(Data Query Language),用来查询数据库中表的记录


准备工作


#创建商品表:


CREATE TABLE product(


pid INT PRIMARY KEY,


pname VARCHAR(20),


price DOUBLE


);


INSERT INTO product(pid,pname,price) VALUES(1,'联想',5000);


INSERT INTO product(pid,pname,price ) VALUES(2,'海尔',3000);


INSERT INTO product(pid,pname,price ) VALUES(3,'雷神',5000);


INSERT INTO product(pid,pname,price ) VALUES(4,'JACK JONES',800);


INSERT INTO product(pid,pname,price ) VALUES(5,'真维斯',200);


INSERT INTO product(pid,pname,price ) VALUES(6,'花花公子',440);


INSERT INTO product(pid,pname,price ) VALUES(7,'劲霸',2000);


INSERT INTO product(pid,pname,price ) VALUES(8,'香奈儿',800);


INSERT INTO product(pid,pname,price ) VALUES(9,'相宜本草',200);


INSERT INTO product(pid,pname,price ) VALUES(10,'面霸',5);


INSERT INTO product(pid,pname,price ) VALUES(11,'好想你枣',56);


INSERT INTO product(pid,pname,price ) VALUES(12,'香飘飘奶茶',1);


INSERT INTO product(pid,pname,price ) VALUES(13,'果9',1);


语法:


select [distinct]

*| 列名,列名

from 表名字

where 条件


简单查询


1.查询所有的商品.


select * from 表名;


2.查询商品名和商品价格.


select 列名1,列名2 from 表名;


3.去掉重复值.


select distinct 列名 from 表名;


4.查询结果是表达式(运算查询):


select 列名 运算符 操作数 from product;


如 :


查询所有商品的价格显示时加10元.


5.别名查询使用的关键字是as(as可以省略的)


列别名:select 列名 as 别名 from 表名;


   表别名: select * from product as p;


1.查询所有的商品. select * from product;


2.查询商品名和商品价格. select pname,price from product;


3.别名查询.使用的关键字是as(as可以省略的).


  3.1表别名: select * from product as p;


  3.2列别名:select pname as pn from product;


4.去掉重复值. select distinct price  from product;


5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.


  select pname,price+10 from product;


条件查询


9eee0ee3a7594d78ab4b89f89feaafda.png

题干:


#查询商品名称为“花花公子”的商品所有信息:


#查询价格为800商品的全部信息


#查询价格不是800的所有商品的名字和价格


#查询商品价格大于60元的所有商品全部信息


#查询商品价格在200到1000之间所有商品的全部信息


#查询商品价格是200或800的所有商品的全部信息


#查询名字含有'想'字的所有商品的全部信息


#查询商品名字以'香'开头的所有商品的商品名和价格


#查询名字第二个字为'想'的所有商品的全部信息


# 查询商品价格为空的商品全部信息


# 查询商品价格不为空的商品全部信息


7d30c95d51834dbf803915672611f179.png



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
27天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
25天前
|
SQL 关系型数据库 MySQL
MySQL 高级(进阶) SQL 语句
MySQL 提供了丰富的高级 SQL 语句功能,能够处理复杂的数据查询和管理需求。通过掌握窗口函数、子查询、联合查询、复杂连接操作和事务处理等高级技术,能够大幅提升数据库操作的效率和灵活性。在实际应用中,合理使用这些高级功能,可以更高效地管理和查询数据,满足多样化的业务需求。
97 3
|
28天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
30天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
SQL Oracle 关系型数据库
SQL(MySQL)
SQL语言是指结构化查询语言,是一门ANSI的标准计算机语言,用来访问和操作数据库。 数据库包括SQL server,MySQL和Oracle。(语法大致相同) 创建数据库指令:CRATE DATABASE websecurity; 查看数据库:show datebase; 切换数据库:USE websecurity; 删除数据库:DROP DATABASE websecurity;
|
2月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
10天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
36 3
|
10天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
37 3
|
10天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
52 2