当前位置:网站首页>你会“卖”SQL?
你会“卖”SQL?
2022-04-21 14:23:00 【gh-xiaohe】
作者: gh-xiaohe
gh-xiaohe的博客
觉得博主文章写的不错的话,希望大家三连(关注,点赞,评论),多多支持一下!!
创建和管理表
基础知识
一条数据存储的过程
存储数据是处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。
那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
我们要先创建一个数据库,而不是直接创建数据表
因为从系统架构的层次上看,MySQL 数据库系统从大到小依次是数据库服务器 、 数据库 、 数据表 、数据表的行与列。
标识符命名规则
- 数据库名、表名不得超过30个字符,变量名限制为29个
- 必须只能包含 A–Z, a–z, 0–9, _共63个字符
- 数据库名、表名、字段名等对象名中间不要包含空格
- 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
- 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用 ` (着重号)引起来
- 保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了
MySQL中的数据类型
MySQL中的数据类型 类型 类型举例 整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT 浮点类型 FLOAT、DOUBLE 定点数类型 DECIMAL 位类型 BIT 日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP 文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT 枚举类型 ENUM 集合类型 SET 二进制字符串类型 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB JSON类型 JSON对象、JSON数组 空间数据类型 单值:GEOMETRY、POINT、LINESTRING、POLYGON;集合:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION 其中,常用的几类类型介绍如下:
数据类型 描述 INT 从-231到231-1的整型数据。存储大小为 4个字节 CHAR(size) 定长字符数据。若未指定,默认为1个字符,最大长度255 VARCHAR(size) 可变长字符数据,根据字符串实际长度保存,必须指定长度 FLOAT(M,D) 单精度,占用4个字节,M=整数位+小数位,D=小数位。 D<=M<=255,0<=D<=30,默认M+D<=6 DOUBLE(M,D) 双精度,占用8个字节,D<=M<=255,0<=D<=30,默认M+D<=15 DECIMAL(M,D) 高精度小数,占用M+2个字节,D<=M<=65,0<=D<=30,最大取值范围与DOUBLE 相同。 DATE 日期型数据,格式’YYYY-MM-DD’ BLOB 二进制形式的长文本数据,最大可达4G TEXT 长文本数据,最大可达4G
创建和管理数据库
创建数据库
方式1: 创建数据库
CREATE DATABASE mytest1; # 创建的此数据库使用的是默认的字符集 #查看创建数据库的结构 SHOW CREATE DATABASE mytest1;
![]()
方式2:显式了指名了要创建的数据库的字符集
CREATE DATABASE mytest2 CHARACTER SET 'gbk'; SHOW CREATE DATABASE mytest2;
方式3:判断数据库是否已经存在,不存在则创建数据库(推荐)
如果要创建的数据库已经存在,则创建不成功,但不会报错。 CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8'; SHOW CREATE DATABASE mytest2;还是gbk创建未成功!
如果要创建的数据库不存在,则创建成功 CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
# 显示数据库 SHOW DATABASES;
注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的。
使用数据库
查看当前所有的数据库
SHOW DATABASES; #有一个S,代表多个数据库 #查看当前连接中的数据库都有哪些 SHOW DATABASES;
查看当前正在使用的数据库
SELECT DATABASE(); #查看当前使用的数据库 SELECT DATABASE() FROM DUAL;
查看指定库下的所有库
SHOW TABLES FROM 数据库名; #查看指定数据库下保存的数据表 SHOW TABLES FROM `atguigudb`;
查看数据的创建信息
SHOW CREATE DATABASE 数据库名; 或者: SHOW CREATE DATABASE 数据库名\G # 查看数据库的创建信息 SHOW CREATE DATABASE `atguigudb` SHOW CREATE DATABASE `atguigudb`\G
使用/切换数据库
USE 数据库名; #切换数据库 USE atguigudb;
注意: 要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上“数据库名”。
修改数据库
更改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbk、utf8等 修改数据库(一般不用) 不修改数据库的名 特别注意 #更改数据库字符集 SHOW CREATE DATABASE mytest2; ALTER DATABASE mytest2 CHARACTER SET 'utf8'; SHOW CREATE DATABASE mytest2;
删除数据库
方式一:
#方式1:如果要删除的数据库存在,则删除成功。如果不存在,则报错 DROP DATABASE mytest1; SHOW DATABASES;方式二:推荐
#方式2:推荐。 如果要删除的数据库存在,则删除成功。如果不存在,则默默结束,不会报错。 DROP DATABASE IF EXISTS mytest1; DROP DATABASE IF EXISTS mytest2;
创建表
创建方式
- 必须具备:
- CREATE TABLE权限
- 存储空间
- 语法格式:
CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], …… [表约束条件] );
- 必须指定:
- 表名
- 列名(或字段名),数据类型,长度
- 可选指定:
- - 约束条件
- 默认值
方式1:"白手起家"的方式
#方式1:"白手起家"的方式 CREATE TABLE IF NOT EXISTS myemp1( #需要用户具备创建表的权限。 id INT, emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。 hire_date DATE ); #查看表结构 DESC myemp1; #查看创建表的语句结构 SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集。 #查看表数据 SELECT * FROM myemp1;
在MySQL 8.x版本中,不再推荐为INT类型指定显示长度,并在未来的版本中可能去掉这样的语法。
方式2:基于现有的表,同时导入数据
#方式2:基于现有的表,同时导入数据 CREATE TABLE myemp2 AS SELECT employee_id,last_name,salary FROM employees; DESC myemp2; DESC employees; SELECT * FROM myemp2;
说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称。
说明2:此时的查询语句可以结构比较丰富,使用前面章节讲过的各种SELECT
说明3:如果使用的表,在不同数据库下,需要指明数据库名
探讨:复制表结构数据 和 表数据、和仅仅只对表结构进行复制
#练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据 CREATE TABLE employees_copy AS SELECT * FROM employees; SELECT * FROM employees_copy;#练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据 CREATE TABLE employees_blank AS SELECT * FROM employees #where department_id > 10000; WHERE 1 = 2; # 让其恒不成立 SELECT * FROM employees_blank;
结论:
复制表结构数据 和 表数据正常复制
仅仅只是 对表节后进行复制 需要用恒不成立的( 如: where 1 = 2 )
查看数据表结构
在MySQL中创建好数据表之后,可以查看数据表的结构。MySQL支持使用DESCRIBE/DESC 语句查看数据表结构,也支持使用SHOW CREATE TABLE 语句查看数据表结构。
语法格式如下:
show create table 表名\G 使用SHOW CREATE TABLE语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。 #查看创建表的语句结构 SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集,则默认使用表所在的数?>据库的字符集。 SELECT * FROM myemp1;
修改表
修改表指的是修改数据库中已经存在的数据表的结构。
使用 ALTER TABLE 语句可以实现:
- 向已有的表中添加列
- 修改现有表中的列
- 删除现有表中的列
- 重命名现有表中的列
追加一个列
语法格式如下:
ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;DESC myemp1 添加一个字段 ALTER TABLE myemp1 ADD salary DOUBLE(10,2); #默认添加到表中的最后一个字段的位置 DESC myemp1ALTER TABLE myemp1 ADD phone_number VARCHAR(20) FIRST; DESC myemp1ALTER TABLE myemp1 ADD email VARCHAR(45) AFTER emp_name; DESC myemp1
修改一个列
- 可以修改列的数据类型,长度、默认值和位置
- 修改字段数据类型、长度、默认值、位置的语法格式如下:
ALTER TABLE 表名 MODIFY 【COLUMN】 字段名1 字段类型 【DEFAULT 默认值】 【FIRST|AFTER 字段名2】;DESC myemp1 ALTER TABLE myemp1 MODIFY emp_name VARCHAR(25) ; DESC myemp1 ALTER TABLE myemp1 MODIFY emp_name VARCHAR(35) DEFAULT 'aaa'; DESC myemp1
- 对默认值的修改只影响今后对表的修改
说明1:举例:修改 email varchar(35)改成 email varchar(20) 时,如果此时数据类型的长度有超过 20 的修改不成功
重命名一个列
语法格式如下:
ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;DESC myemp1 ALTER TABLE myemp1 CHANGE salary monthly_salary DOUBLE(10,2); DESC myemp1 ALTER TABLE myemp1 CHANGE email my_email VARCHAR(50); DESC myemp1
删除一个列
删除表中某个字段的语法格式如下
ALTER TABLE 表名 DROP 【COLUMN】字段名DESC myemp1 ALTER TABLE myemp1 DROP COLUMN my_email; DESC myemp1
重命名表
方式一:使用RENAME
RENAME TABLE myemp1 TO myemp11; DESC myemp11;
方式二:建议()
ALTER TABLE myemp2 RENAME TO myemp12;
删除表
不光将表结构删除掉,同时表中的数据也删除掉,释放表空间
- 在MySQL中,当一张数据表 没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。
- 数据和结构都被删除
- 所有正在运行的相关事务被提交
- 所有相关索引被删除
- 语法格式:
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];DESC myemp12; DROP TABLE IF EXISTS myemp12; DESC myemp12;
清空表
清空表,表示清空表中的所有数据,但是表结构保留。
SELECT * FROM employees_copy; TRUNCATE TABLE employees_copy; SELECT * FROM employees_copy; DESC employees_copy;
拓展1:阿里巴巴《Java开发手册》之MySQL字段命名
- 【 强制 】 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
- 正例:aliyun_admin,rdc_config,level3_name
- 反例:AliyunAdmin,rdcConfig,level_3_name
- 【 强制 】 禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。
- 【 强制 】 表必备三字段:id, gmt_create, gmt_modified。
- 说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1。gmt_create,
gmt_modified 的类型均为 DATETIME 类型,前者现在时表示主动式创建,后者过去分词表示被
动式更新- 【 推荐】 表的命名最好是遵循 “业务名称_表的作用”。
- 正例:alipay_task 、 force_project、 trade_config
- 【 推荐 】 库名与应用名称尽量一致。
- 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速
度。
- 正例:无符号值可以避免误存负数,且扩大了表示范围。
拓展2:如何理解清空表、删除表等操作需谨慎?!
表删除 操作将把表的定义和表中的数据一起删除,并且MySQL在执行删除操作时,不会有任何的确认信息提示,因此执行删除操时应当慎重。在删除表前,最好对表中的数据进行 备份 ,这样当操作失误时可以对数据进行恢复,以免造成无法挽回的后果。
同样的,在使用ALTER TABLE 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份 ,因为数据库的改变是 无法撤销的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。
图像总结:
数据库图形

数据库表图形

整体流程

思维导图链接():
版权声明
本文为[gh-xiaohe]所创,转载请带上原文链接,感谢
https://blog.csdn.net/gh_xiaohe/article/details/124258336
边栏推荐
- Personal summary of example questions in sequence table
- 股价暴跌 Robinhood收购英国加密公司求扩张
- Detect and open WhatsApp
- shell sed 和 gawk 编辑器使用
- Ros2 learning notes (10) -- ros2 launch startup file
- [error record] file search strategy in groovy project (SRC / main / groovy / script. Groovy | groovy script directly uses the relative path of code in the main function)
- Several implementation methods and optimization of quick sorting
- Basic skills: several ways of SQL multi table joint query
- A quietly rising domestic software
- Experience and guidance of seniors preparing for the postgraduate entrance examination of Chinese International Education in Beijing Foreign Studies University in 2023
猜你喜欢
![[error record] file search strategy in groovy project (SRC / main / groovy / script. Groovy | groovy script directly uses the relative path of code in the main function)](/img/1c/03a7e3931181ac8024845e93322149.png)
[error record] file search strategy in groovy project (SRC / main / groovy / script. Groovy | groovy script directly uses the relative path of code in the main function)

【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )

另一视角看元宇宙:元宇宙文化正悄然改变世界

ROS2学习笔记(五)-- ROS2命令行操作常用指令总结(一)

如何关闭VS Code eslint校验,快来看看吧

.Net C# Newtonsoft.Json JsonSerializerSettings配置

Use go language to complete the student information management system through restful API

Day12作业

翻译《Mastering ABP Framework》
![[groovy] mop meta object protocol and meta programming (use groovy meta programming to intercept functions and call other methods of the class through metaclass invokemethod method)](/img/d1/4944c77d1daf3d6ee1457a7934954f.png)
[groovy] mop meta object protocol and meta programming (use groovy meta programming to intercept functions and call other methods of the class through metaclass invokemethod method)
随机推荐
Bug talking about function stack frame
[error record] file search strategy in groovy project (SRC / main / groovy / script. Groovy | groovy script directly uses the relative path of code in the main function)
ROS2学习笔记(十)-- ROS2 launch启动文件
String类
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
.Net C# Newtonsoft.Json JsonSerializerSettings配置
暴力破解美团最新JVM面试题:无限执行
Three methods for beginners to exchange the values of two variables
Day11作业
ROS2学习笔记(八)-- ROS2参数应用实现道路识别调试
无人驾驶虚拟仿真(十四)--图像处理之交通标志牌识别2
Script operation es
Detect and open WhatsApp
一个悄然崛起的国产软件
ROS2学习笔记(六)-- 自定义消息和服务实现控制指令优化以及在线换图
股价暴跌 Robinhood收购英国加密公司求扩张
数据仓库架构演变和建设思路
[groovy] mop meta object protocol and meta programming (use groovy meta programming to intercept functions and call other methods of the class through metaclass invokemethod method)
虫子 栈
从技术原理、主流平台、市场展望快速入门NFT





















