热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL基础操作与优化

本文详细介绍了MySQL的基础连接、数据库及表的操作,涵盖创建、修改、删除等常用命令,并深入解析了数据类型、列属性、索引、外键和存储引擎等内容。

## 连接与退出 MySQL


要连接到 MySQL 数据库,可以使用以下命令格式:


mysql -h 主机地址 -P 端口号 -u 用户名 -p 密码
例如: mysql -h 127.0.0.1 -P 3306 -u root -p

要退出 MySQL 客户端,只需输入 exit; 或者 quit;



## 数据库操作


### 创建数据库


CREATE DATABASE 数据库名 [选项];
例如: CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

字符集和校对规则:
- 字符集:通常使用 utf8
- 校对规则:
- _ci 结尾的表示不区分大小写。
- _cs 结尾的表示区分大小写。
- _bin 结尾的表示二进制编码比较。



### 查看数据库


SHOW DATABASES;


### 查看数据库创建语句


SHOW CREATE DATABASE 数据库名;


### 修改数据库选项


ALTER DATABASE 数据库名 [新选项];
例如: ALTER DATABASE test DEFAULT CHARACTER SET gbk;


### 删除数据库


DROP DATABASE 数据库名;


### 使用数据库


USE 数据库名;


## 表的操作


### 创建数据表


CREATE TABLE 表名 (
字段1 类型 [选项],
字段2 类型 [选项],
...
) [表选项信息];

例如: CREATE TABLE test (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
content VARCHAR(100) NOT NULL DEFAULT '' COMMENT '内容',
time INT(10) NOT NULL DEFAULT 0 COMMENT '时间',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表';

语法解析:
- NOT NULL:不允许为空。
- AUTO_INCREMENT:自增字段,通常用于主键。
- PRIMARY KEY:定义主键。
- ENGINE:设置存储引擎。
- CHARSET:设置字符集。
- COMMENT:备注信息。



### 查看数据表


SHOW TABLES;


### 模糊查询数据表


SHOW TABLES LIKE '模糊查询表名%';


### 查看表结构


DESC 表名;


### 查看表创建语句


SHOW CREATE TABLE 表名;


### 删除数据表


DROP TABLE [IF EXISTS] 表名;
例如: DROP TABLE IF EXISTS test;


### 修改表名


ALTER TABLE 旧表名 RENAME TO 新表名;


### 修改表结构


#### 添加列


ALTER TABLE 表名 ADD 新列名 类型 [选项];
例如: ALTER TABLE test ADD name CHAR(10) NOT NULL DEFAULT '' COMMENT '名字';


#### 删除列


ALTER TABLE 表名 DROP COLUMN 列名;
例如: ALTER TABLE test DROP COLUMN content;


#### 修改列定义


ALTER TABLE 表名 MODIFY COLUMN 列名 新类型 [新选项];
例如: ALTER TABLE test MODIFY COLUMN name VARCHAR(100) NOT NULL DEFAULT 'admin' COMMENT '修改后名字';


#### 修改列顺序


- 将某列放在最前面:


ALTER TABLE 表名 MODIFY COLUMN 列名 类型 [选项] FIRST;
例如: ALTER TABLE test MODIFY COLUMN name VARCHAR(100) NOT NULL DEFAULT 'admin' COMMENT '最前面' FIRST;


- 将某列放在另一列后面:


ALTER TABLE 表名 MODIFY COLUMN 列名 类型 [选项] AFTER 另一列名;
例如: ALTER TABLE test MODIFY COLUMN name VARCHAR(100) NOT NULL DEFAULT 'admin' COMMENT 'time字段后面' AFTER time;


#### 重命名列


ALTER TABLE 表名 CHANGE 原列名 新列名 新类型 [新选项];
例如: ALTER TABLE test CHANGE name username VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户名字';


#### 修改表选项


ALTER TABLE 表名 [表选项信息];
例如: ALTER TABLE test ENGINE=MyISAM DEFAULT CHARSET=gbk;


## 数据操作


### 插入数据


INSERT INTO 表名 (字段列表) VALUES (值列表);
例如: INSERT INTO user (id, name, age) VALUES (1, 'admin_a', 50);
INSERT INTO user (name) VALUES ('admin_b');


### 查询数据


SELECT [字段列表] FROM 表名 [查询条件];
例如: SELECT * FROM user; -- 查询所有字段
SELECT name FROM user WHERE age > 0; -- 查询特定字段并加条件


### 删除数据


DELETE FROM 表名 [删除条件];
例如: DELETE FROM user WHERE age <1; -- 删除年龄小于1的数据


### 更新数据


UPDATE 表名 SET 字段1 = 新值1, 字段2 = 新值2 [更新条件];
例如: UPDATE user SET age = 100 WHERE name = 'admin_a';


## MySQL 数据类型


MySQL 支持三种主要的数据类型:数值型、字符串型和日期时间型。



### 数值型


包括整数类型(如 TINYINT, SMALLINT, INT, BIGINT)和浮点数类型(如 FLOAT, DOUBLE, DECIMAL)。



### 字符串型


包括定长字符串(如 CHAR)和变长字符串(如 VARCHAR),以及文本类型(如 TEXT, MEDIUMTEXT, LONGTEXT)。



### 日期时间型


包括 DATE, TIME, DATETIME, TIMESTAMPYEAR



## MySQL 列属性


MySQL 提供了多种列属性来约束和描述字段,包括:NULL, NOT NULL, DEFAULT, PRIMARY KEY, AUTO_INCREMENT, COMMENT



### 空属性


NULLNOT NULL 分别表示允许或不允许空值。



### 默认值


DEFAULT 设置默认值,通常与 NOT NULL 一起使用。



### 主键


PRIMARY KEY 是唯一的且不能为空,用来唯一标识表中的每一行。



### 自动增长


AUTO_INCREMENT 为每次插入记录时自动递增。



### 列描述


COMMENT 用于给字段添加注释。



## 索引


索引是一种特殊的文件结构,能够加速数据检索。常见的索引类型包括普通索引、唯一索引、主键索引、组合索引和全文索引。



### 创建索引


CREATE [UNIQUE] INDEX 索引名 ON 表名 (列名称 [排序]);
例如: CREATE UNIQUE INDEX number ON student(seat_number DESC);


### 删除索引


DROP INDEX 索引名 ON 表名;
例如: DROP INDEX number ON student;


## 外键


外键用于维护两个表之间的关系。被约束的表称为副表,引用的表称为主表。外键只能在 InnoDB 存储引擎中使用。



## 存储引擎


MySQL 支持多种存储引擎,常用的有 InnoDBMyISAM。其中 InnoDB 支持事务、行级锁和外键,而 MyISAM 支持全文索引。



## 三范式


三范式是设计数据库表结构时遵循的规范化原则,分为第一范式、第二范式和第三范式,旨在消除冗余数据,确保数据的一致性和完整性。


推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
author-avatar
银仔-zxy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有