数据库基础操作
来源:SegmentFault
2023-02-16 15:30:06
0浏览
收藏
有志者,事竟成!如果你在学习数据库,那么本文《数据库基础操作》,就很适合你!文章讲解的知识点主要包括MySQL,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
数据库基础操作
1.命令结束符号
- ;
- g
- G
G有一点特殊,它并不以表格的形式返回查询数据,而是以垂直的形式展现查询数据,这包含两个方面的意思:
- 如果查询结果中包含多个行的数据,各个行的数据之间会用一堆一星号*隔开。
- 每行中的每一个列的数据将按照列名: 列值的形式给出。
2.使用c清除本次操作
如果你想放弃本次编写的命令,可以使用c来清除,比如这样:
mysql> SELECT NOW()\c展示数据库
mysql> SHOW DATABASES;创建数据库
mysql> CREATE DATABASE 数据库名;切换当前数据库
mysql> USE 数据库名称;查看当前使用的数据库
mysql> select database();删除数据库
mysql> DROP DATABASE 数据库名;创建表
mysql> CREATE TABLE first_table ( -> first_column INT COMMENT '列的注释', -> second_column VARCHAR(100) -> ) COMMENT '表的注释';展示当前数据库中的表
mysql> SHOW TABLES;简单的表操作语句
SELECT * FROM 表名;INSERT INTO 表名(列1, 列2, ...) VALUES(列1的值,列2的值, ...);INSERT INTO 表名(列1,列2, ...) VAULES(列1的值,列2的值, ...), (列1的值,列2的值, ...), (列1的值,列2的值, ...), ...;UPDATE 表名 SET 列1 = 列1的值,... WHERE 条件...;删除表
DROP TABLE IF EXISTS 表名;约束性条件(列的属性)
mysql> CREATE TABLE first_table ( -> first_column INT, -> second_column VARCHAR(100) DEFAULT 'abc' -> );非空约束
mysql> CREATE TABLE first_table ( -> first_column INT NOT NULL, -> second_column VARCHAR(100) DEFAULT 'abc' -> );主键&唯一性约束
CREATE TABLE student_info ( number INT PRIMARY KEY, name VARCHAR(5), sex ENUM('男', '女'), id_number CHAR(18) UNIQUE, department VARCHAR(30), major VARCHAR(30), enrollment_time DATE ); CREATE TABLE student_info ( number INT, name VARCHAR(5), sex ENUM('男', '女'), id_number CHAR(18), department VARCHAR(30), major VARCHAR(30), enrollment_time DATE PRIMARY KEY (number) UNIQUE KEY (id_number) );PRIMARY KEY (列名1, 列名2, ...) | UNIQUE [约束名称] (列名1, 列名2, ...) | UNIQUE KEY [约束名称] (列名1, 列名2, ...)
主键和唯一性约束都能保证某个列或者列组合的唯一性,但是:
- 一张表中只能定义一个主键,却可以定义多个唯一性约束!
- 主键列不允许存放NULL值,而普通的唯一性约束列可以存放NULL值!
索引
InnoDB和MyISAM会自动为主键或者声明为UNIQUE的列去自动建立B+树索引
在创建表的时候指定需要建立索引的单个列或者建立联合索引的多个列:CREATE TALBE 表名 ( 各种列的信息 ··· , [KEY|INDEX] 索引名 (需要被索引的单个列或多个列) )其中的KEY和INDEX是同义词,任意选用一个就可以
修改表结构的时候添加索引ALTER TABLE 表名 ADD [INDEX|KEY] 索引名 (需要被索引的单个列或多个列);
在修改表结构的时候删除索引ALTER TABLE 表名 DROP [INDEX|KEY] 索引名;外键
CONSTRAINT [外键名称] FOREIGN KEY(列1, 列2, ...) REFERENCES 父表名(父列1, 父列2, ...);自增
mysql> CREATE TABLE first_table ( -> id int UNSIGNED AUTO_INCREMENT PRIMARY KEY, -> first_column INT, -> second_column VARCHAR(100) DEFAULT 'abc' -> );在使用递增属性的时候需要注意这几点:
- 一个表中最多有一个递增列。
- 一般只为整数类型的列定义递增属性,浮点数类型基本不用递增属性。
- 具有AUTO_INCREMENT属性的列必须建立索引。主键和具有唯一性约束的列会自动建立索引,至于什么是索引,我们后边会详细唠叨。
- 一般递增列都是作为主键的属性,来自动生成唯一标识一个记录的主键值。
- 因为具有AUTO_INCREMENT属性的列是从1开始递增的,所以最好用UNSIGNED来修饰这个列,可以提升正数的表示范围。
全值匹配
假设我们有联合索引idx_name_birthday_phone_number,索引列的顺序为:name、birthday、phone_number
如果我们的搜索条件中的列和索引列一致的话,这种情况就称为全值匹配,比方说下边这个查找语句:SELECT * FROM person_info WHERE name = 'Ashburn' AND birthday = '1990-09-27' AND phone_number = '15123983239';如果搜索条件中的列的顺序和索引列的顺序不一致就不太好了,比方说先对birthday列的值进行匹配的话,由于B+树中的数据页和记录是先按name列的值进行排序的,不能直接使用二分法快速定位记录,所以只能扫描所有的记录页。
匹配最左边的列
搜索条件中的列可以不用包含全部联合索引中的列,只需要包含左边的就行,也可以包含多个,但是列的顺序必须和索引列的定义顺序一致
=、in自动优化顺序
等于(=)和in 可以乱序。比如,a = 1 AND b = 2 AND c = 3 建立(a,b,c)索引可以任意顺序,MySQL的查询优化器会帮你优化成索引可以识别的模式。
匹配列前缀
匹配列前缀如:name like 'As%',这样的搜索条件是会用到索引的,==如果要匹配的是后缀或者中间的某个子串,而类似:name like '%As%',这是不会用到索引的==
以%开头的like查询不能够利用B-tree索引,执行计划中key的值为NULL表示没有使用索引。
匹配范围值
所有记录都是按照索引列的值从小到大的顺序排好序的,所以查找索引列的值在某个范围内的记录是使用了索引的,==不过进行范围查找的时候需要注意,如果对多个列同时进行范围查找的话,只有对索引最左边的那个列进行范围查找的时候才能用到B+树索引==
精确匹配某一列并范围匹配另一列
对于同一个联合索引来说,虽然对多个列都进行范围查找时只能用到最左边那个索引列,但是如果左边的列是精确查找,则右边的列可以进行范围查找对于同一个联合索引来说,虽然对多个列都进行范围查找时只能用到最左边那个索引列,但是如果左边的列是精确查找,则右边的列可以进行范围查找
用于排序
ORDER BY的子句后边的列的顺序须按照索引列的顺序给出,这是能够使用索引的
用于分组
与用于排序的情况类似
单个多列组合索引和多个单列索引的检索查询效果不同,因为在执行SQL时,MySQL只能使用一个索引,会从多个单列索引中选择一个限制最为严格的索引
由于MySQL查询只使用一个索引,因此如果WHERE子句中已经使用了索引的话,那么ORDER BY中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下,不要使用排序操作;尽量不要包含多个列的排序,如果需要,最好给这些列也创建组合索引
索引不会包含有NULL值的列
只要列中包含有NULL值,都将不会被包含在索引中,组合索引中只要有一列有NULL值,那么这一列对于此条组合索引就是无效的。所以我们在数据库设计时,不要让索引字段的默认值为NULL
数据类型出现隐式转换的时候也不会使用索引
比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能使用索引,原因很简单,B+树中存储的都是数据表中的字段值,但是进行检索时,需要把所有元素都应用函数才能比较,显然这样的代价太大。所以语句要写成 : create_time = UNIX_TIMESTAMP('2016-06-06')
何时使用聚簇索引或非聚簇索引
| 使用动作描述 | 使用聚簇索引 | 使用非聚簇索引 |
|---|---|---|
| 列经常被分组排序 | √ | √ |
| 返回某范围内的数据 | √ | × |
| 一个或极少不同的值 | × | × |
| 小数目不同的值 | √ | × |
| 大数目不同的值 | × | √ |
| 频繁更新的列 | × | √ |
| 外键列 | √ | √ |
| 主键列 | √ | √ |
| 频繁修改索引列 | × | √ |
终于介绍完啦!小伙伴们,这篇关于《数据库基础操作》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!
版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
基于Xtrabackup及可传输表空间实现多源数据恢复
- 上一篇
- 基于Xtrabackup及可传输表空间实现多源数据恢复
- 下一篇
- 一次数据库表命名导致的bug
查看更多
最新文章
-
- 数据库 · MySQL | 15小时前 |
- MySQL 在线 ALTER TABLE 前怎么判断是否会重建表
- 339浏览 收藏
-
- 数据库 · MySQL | 17小时前 | MySQL · 锁 · 事务 · InnoDB · Savepoint ROLLBACK TO SAVEPOINT InnoDB锁
- MySQL SAVEPOINT 回滚后哪些锁仍然保留
- 226浏览 收藏
-
- 数据库 · MySQL | 18小时前 |
- MySQL InnoDB 死锁后为什么只回滚一个事务
- 201浏览 收藏
-
- 数据库 · MySQL | 20小时前 | MySQL · 数据库 · 外键约束 · 数据一致性 · 表结构设计 · mysql 外键 foreign key ON DELETE SET NULL 可空列
- MySQL 外键 ON DELETE SET NULL 为什么要求列可空
- 325浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL JSON_TABLE 展开数组时如何保留缺失字段
- 501浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL CTE 多次引用时为什么可能重复物化
- 237浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 执行计划 · 索引优化 · mysql explain OR条件 Index Merge
- MySQL OR 条件什么时候会选择 Index Merge
- 373浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL 事务隔离级别下普通 SELECT 为什么看不到新提交
- 385浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 索引 · 性能优化 · 执行计划 · mysql explain optimizer hint FORCE INDEX USE INDEX
- MySQL optimizer hint 和 FORCE INDEX 怎么选择
- 478浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
查看更多
AI推荐
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 95次使用
-
- OpenCompass
- OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
- 26次使用
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 250次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 176次使用
-
- AI Prompt Library
- 探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
- 110次使用
查看更多
相关文章
-
- MySQL 明明加了索引,为什么查询还是很慢?先查这 6 个点
- 2026-06-27 374浏览
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- golang 基于 mysql 简单实现分布式读写锁
- 2023-01-07 384浏览
-
- 详解如何利用GORM实现MySQL事务
- 2023-01-07 184浏览
-
- Go语言实现操作MySQL的基础知识总结
- 2023-01-23 265浏览

