[ 数据库 ] MySQL 入门到放弃(二) --- MySQL 常见操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 我之前学习 MySQL 是在b站看的狂神说MySQL,收获很大。初学 Mysql 的话建议大家去看一看。

一、对数据库的操作



1. 创建数据库


CREATE DATABASE [IF NOT EXISTS] li; --[]可选  {}必选


CREATE DATABASE `数据库名` CHARACTER SET utf8 COLLATE utf8_general_ci


2. 删除数据库


DROP DATABASE [IF EXISTS] LI;


3. 使用数据库


USE school --如果表名或者字段名是一个特殊字符,就需要带``(tab键的上面)


4. 查找数据库


查看所有数据库:SHOW DATABASES


可以对照 sqlyog 可视化历史记录查看 sql


固定的语法或关键字必须要强行记住!


二、数据库的数据类型



MySQL中的数据类型大的方面来分,可以分为:数值、以及字符串、日期和时间三个方面。


下面就分开来进行总结。


1. 数值数据类型


1. 整型:

image.png


上面定义的都是有符号的,当然了,也可以加上unsigned关键字,定义成无符号的类型,那么对应的取值范围就要翻翻了,比如:tinyint unsigned的取值范围为0~255


2. 浮点型

image.png


decimal 字符串形式的浮点数 金融计算的时候一般使用 decimal DECIMAL(P,D);


(p是有效数字的长度、D是小数点后的位数)


2. 字符串数据类型


image.png


注意:

1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。


2.同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。


3.超过char和varchar的n设置后,字符串会被截断。


4.char的上限为255字节,varchar的上限65535字节,text的上限为65535。


5.char在存储的时候会截断尾部的空格,varchar和text不会。


6.varchar会使用1-3个字节来存储长度,text不会。


3. 时间日期数据类型


image.png


4. 其他类型


1. enum(“member1″, “member2″, … “member65535″)

enum数据类型就是定义了一种枚举,最多包含65535个不同的成员。


当定义了一个enum的列时,该列的值限制为列定义中声明的值。


如果列声明包含NULL属性,则NULL将被认为是一个有效值,并且是默认值。


如果声明了NOT NULL,则列表的第一个成员是默认值。


2. set(“member”, “member2″, … “member64″)

set数据类型为指定一组预定义值中的零个或多个值提供了一种方法,这组值最多包括64个成员。


值的选择限制为列定义中声明的值。


三、数据库的字段属性(重点)



上面大概总结了MySQL中的数据类型,当然了,上面的总结肯定是不全面的,如果要非常全面的总结这些内容,好几篇文章都不够的。下面就再来总结一些常用的属性。


(每一个表,都必须存在以下五个字段!未来做项目用的,表示一个记录存在的意义


id:主键


version:乐观锁


is_delete:伪删除


gmt_create:创建时间


gmt_update:修改时间)


1.auto_increment


通常理解为自增,自动在上一条记录的基础上+1(默认)


通常用来设计唯一的主键,必须是整数类型


可以自定义设计主键自增的起始值和步长


auto_increment能为新插入的行赋一个唯一的整数标识符。为列赋此属性将为每个新插入的行赋值为上一次插入的ID+1。


MySQL要求将auto_increment属性用于作为主键的列。此外,每个表只允许有一个auto_increment列。例如:id smallint not null auto_increment primary key


2.binary


binary属性只用于char和varchar值。


当为列指定了该属性时,将以区分大小写的方式排序。与之相反,忽略binary属性时,将使用不区分大小写的方式排序。


例如:hostname char(25) binary not null


3.default


设置默认的值!


如果不指定该列的值,则会有默认的值!


default属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQL不允许插入函数或表达式值。


此外,此属性无法用于BLOB或TEXT列。如果已经为此列指定了NULL属性,没有指定默认值时默认值将为NULL,否则默认值将依赖于字段的数据类型。


例如:subscribed enum('0', '1') not null default '0'


4.index


如果所有其他因素都相同,要加速数据库查询,使用索引通常是最重要的一个步骤。


索引一个列会为该列创建一个有序的键数组,每个键指向其相应的表行。


以后针对输入条件可以搜索这个有序的键数组,与搜索整个未索引的表相比,这将在性能方面得到极大的提升。

create table employees
(
id varchar(9) not null,
firstname varchar(15) not null,
lastname varchar(25) not null,
email varchar(45) not null,
phone varchar(10) not null,
index lastname(lastname),
primary key(id)
);


我们也可以利用MySQL的create index命令在创建表之后增加索引:


create index lastname on employees (lastname(7));


这一次只索引了名字的前7个字符,因为可能不需要其它字母来区分不同的名字。因为使用较小的索引时性能更好,所以应当在实践中尽量使用小的索引。


5.not null


假设设置为 not null ,如果不给它赋值,就会报错


NULL ,如果不填写值,默认就是null


如果将一个列定义为not null,将不允许向该列插入null值。建议在重要情况下始终使用not null属性,因为它提供了一个基本验证,确保已经向查询传递了所有必要的值。


6.null


为列指定null属性时,该列可以保持为空,而不论行中其它列是否已经被填充。记住,null精确的说法是“无”,而不是空字符串或0。


7. Unsigned:


无符号的整数


声明了该列不能声明为负数


8. zerofill:


0填充的(不能是负数)


不足的位数,使用0来填充 int(3) , 5 -->005


zerofill属性可用于任何数值类型,用0填充所有剩余字段空间。例如,无符号int的默认宽度是10;因此,当“零填充”的int值为4时,将表示它为0000000004。例如:


orderid int unsigned zerofill not null


9. unique:


被赋予unique属性的列将确保所有值都有不同的值,只是null值可以重复。一般会指定一个列为unique,以确保该列的所有值都不同。例如:email varchar(45) unique


10. primary key


primary key属性用于确保指定行的唯一性。指定为主键的列中,值不能重复,也不能为空。为指定为主键的列赋予auto_increment属性是很常见的,因为此列不必与行数据有任何关系,而只是作为一个唯一标识符。主键又分为以下两种:


(1)单字段主键


如果输入到数据库中的每行都已经有不可修改的唯一标识符,一般会使用单字段主键。注意,此主键一旦设置就不能再修改。


(2)多字段主键


如果记录中任何一个字段都不可能保证唯一性,就可以使用多字段主键。这时,多个字段联合起来确保唯一性。如果出现这种情况,指定一个auto_increment整数作为主键是更好的办法。


四、创建数据库表(重点)



1. 定义数据表


1. 规则:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>


<用户名>可替换为[<表定义子句>|<视图定义子句>|<授权定义子句>]


2. 举例:

为用户WANG定义一个学生-课程模式S-T


CREATE SCHEMA “S-T” AUTHORIZATION WANG;


3. 注意:

上面是sqlserver数据库,而mysql数据库跟这个规则有区别,mysql数据库直接在命令窗口写create database S-T;


2. 格式


CREATE TABLE [IF NOT EXISTS] `表名`(    


`字段名` 列类型 [属性] [索引] [注释],


`字段名` 列类型 [属性] [索引] [注释],


`字段名` 列类型 [属性] [索引] [注释],


........


`字段名` 列类型 [属性] [索引] [注释],  


 PRIMARY KEY(`id`))[表类型][表字符集设置][注释]


3. 创建实例:


1. 要求:

1. 目标:创建一个school数据库


2. 创建学生表(列、字段)  使用SQL创建


3. 学号int  登录密码varchar(20),性别(2),出生如期(datatime),家庭住址,email


4. 注意点:使用(),表的名称和字段尽量使用 ``括起来


5. AUTO_INCREMENT  自增


6. 字符串使用 '' 单引号括起来


7. 所有语句后面加 , (英文的), 最后一个不用加


8. PRIMARY KEY 主键,一般一个表只有一个唯一的主键,建议写在最后面


2. 代码:

CREATE TABLE IF NOT EXISTS `student` (     
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`address` VARCHAR(20) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
 PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8


4. 常用命令


SHOW CREATE DATABASE school -- 查看创建数据库的语句


SHOW CREATE TABLE student -- 查看student数据表的定义语句


DESC student -- 显示表的结构


五、数据表的类型



1. 关于数据库引擎


INNODB:默认使用


MYISAM:早些年使用

image.png


MYISAM INNODB

事物支持 不支持 支持

数据行锁定 不支持 支持

外键约束 不支持 支持

全文索引 支持 不支持

表空间的大小 较小 较大,是MYISAM的两倍


2. 常规使用操作:


MYISAM:节约空间,速度较快


INNODB:安全性高,支持事物的处理,多表多用户操作


3. 在物理空间存在的位置


所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库


本质还是文件的存储


4. MySQL 引擎在物理文件上的区别


InnoDB 在数据库表中只有一个 *.frm文件,以及上级目录下的ibdata1文件


MYISAM对应的文件


*.frm 表结构的定义文件


*.MYD 数据文件(data)


*MYI 索引文件(index)


色湖之数据库表的字符集编码


CHARSET=utf8


不设置的话,会是mysql默认的字符集编码 (不支持中文!)


MySQL的默认编码是Latin1,不支持中文


在my.ini中配置默认的编码


character-set-server=utf8


六、修改删除表



1. 修改


1. 修改表名:


ALTER TABLE 旧表名  RENAME AS 新表名

ALTER TABLE teacher RENAME AS teacher1


2. 增加表的字段

ALTER TABLE  表名  ADD 字段名 列类型


ALTER TABLE teacher ADD age INT(11)


3. 修改表的字段

-- ALTER TABLE 表名 MODIFY 字段名 列类型[]


ALTER TABLE teacher1 MODIFY age VARCHAR(10)-- 修改约束--


ALTER TABLE 表名 CHANGE 旧名字  新名字 列类型[]


ALTER TABLE teacher1 CHANGE age age1 INT(1)


4. 字段重命名-- 删除表的字段:

ALTER TABLE 表名 DROP 字段名


ALTER TABLE teacher1 DROP age1


2. 删除


1. 删除表:

DROP TABLE IF EXISTS treacher1


2. 注意点:

`` 字段名,使用这个符号包裹


注释 – /**/


sql 关键字大小写不敏感,建议写小写


所有的符号都用英文  


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
32 4
SpringBoot入门(4) - 添加内存数据库H2
|
12天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
25 2
SpringBoot入门(4) - 添加内存数据库H2
|
5天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
40 13
|
9天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
45 2
|
12天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
52 4
|
13天前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
53 6
|
6天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
38 0
|
7天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
34 0
|
15天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
16天前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!