前言
欢迎你来阅读我的这篇文章,这是我浓缩了 《MySQL 必知必会》 上的内容所编写的一篇快速入门文章,注意在学习该文章的时候一定要搭配实践,不然的话单看是没有效果的,有时间我会给这篇文章加上实践的,如果访问量够大那么我这几天就加上
数据类型
MySQL 中数据字段的类型对数据库的优化很重要,错误的数据类型会严重影响应用的功能和性能
数值类型
MySQL 支持所有标准SQL数值数据类型
除了BIT和BOLLEAN以外其他的数值类型都有有符号和无符号两种状态
默认都是有符号,如果不需要存储负值可以使用 UNSIGNED 关键字,这样可表示的数值增大一倍
有符号的数值类型可以表示正数和负数,而无符号的数值类型只能表示正数
数据类型 | 有符号范围 | 无符号范围 | 说明 |
---|---|---|---|
BIT | 位字段,1~64位 | ||
TINYINT | -128~127 | 0~255 | 整数值 |
SMALLINT | -32768~32767 | 0~65535 | 整数值 |
MEDIUMINT | -8388608~8388607 | 0~16777215 | 整数值 |
INT 或 INTEGER | -2147483648~2147483647 | 0~4294967295 | 整数值 |
BIGINT | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 | 整数值 |
REAL | 4字节的浮点值 | ||
FLOAT | 单精度浮点数 | ||
DOUBLE | 双精度浮点数 | ||
DEC 或 DECIMAL | 精度可变的浮点数 | ||
BOOL 或 BOOLEAN | TRUE 或 FLASE | TRUE 或 FLASE | 布尔标志 |
串类型
最常用的数据类型就是串类型,串类型有两种基本的类型,分别为定长串和变长串
定长串存储长度固定的字符串,长度是在创建表的时候指定的
变长串存储长度可变的字符串,有些变长串是完全变长,有些具有最大的定值长度无法超过定值
数据库处理定长串的速度比处理变长串的速度快得多
数据类型 | 说明 |
---|---|
CHAR | 1~255个字符的定长串,它的长度要在创建时指定,否则MySQL将假定为 CHAR(1) |
VARCHAR | 长度可变,但是最多不超过255字节,如果在创建时指定为 VARCHAR(n) 则可以存储0到n个字符的变长串(n<=255) |
TINYTEXT | 最大长度为 255B 的变长文本 |
MEDIUMTEXT | 最大长度为 16KB 的变长文本 |
TEXT | 最大长度为 64KB 的变长文本 |
LONGTEXT | 最大长度为 4GB 的变长文本 |
不管是何种类型的串类型,串值都必须在引号内(单双引号都可以,通常单引号更好)
如果数值是计算中使用的数值,则应该存储在数值数据类型中,如果是作为字符串使用,则应该保存在串数据类型列中
日期和时间类型
MySQL中使用特殊的类型来存储日期和时间
数据类型 | 说明 |
---|---|
DATE | 表示从 1000-01-01 ~ 9999-12-31 的日期,格式为 YYYY-MM-DD |
TIME | 格式为 HH:MM:SS |
DATETIME | DATE和TIME的组合 格式为 YYYY-MM-DD HH:MM:SS |
TIMESTAMP | DATE和TIME的组合,比DATETIME小一些,表示从 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 的时间,格式为 YYYY-MM-DD |
YEAR | 用两位数字表示,范围是70(1970年)~69(2069年),用四位数字表示,范围是1910年到2155年 |
二进制数据类型
二进制数据类型可以存储任何数据,如图像、多媒体、压缩文件等等
数据类型 | 最大长度 |
---|---|
TINYBLOB | 255 Byte |
BLOB | 64 KB |
MEDIUMBLOB | 16 MB |
LONGBLOB | 4 GB |
小结
数据类型已经全部总结了,如果有错误或者有遗漏的可以在下方评论区提出来
表中数据类型的搭配对于表的性能有很大的影响,在设计表的时候应该慎重选择数据类型
数据库
创建数据库
在登录MySQL服务器之后可以使用CREATE DATABASE
创建数据库
1 | CREATE DATABASE 数据库名字; |
如果数据库已经存在执行该语句将导致错误
选择数据库
最初登录到MySQL服务器之后没有数据库打开供我们使用,而在执行其他操作之前我们必须要选择一个数据库,此时我们可以使用 USE
语句选择数据库
1 | USE 数据库名字; |
执行成功将输出
1 | Database changed |
删除数据库
在MySQL中要删除已创建的数据库可以使用DROP DATABASE
语句
1 | -- 删除数据库 |
IF EXISTS
是一个可选的子句,表示如果数据库存在就删除,避免因为数据库不存在而产生错误
注意!在执行任何删除操作时一定要三思而后行,不要等到数据被删除后再追悔莫及 |
表
关于创建、更新、删除表的基本操作
创建表
MySQL中创建表有两种方法
- 使用MySQL语句创建
- 使用MySQL管理工具创建,但是其本质上还是MySQL语句
我们这里使用MySQL语句CREATE TABLE
创建表 - 表的名字要跟在
CREATE TABLE
后面 - 列的名字和定义要使用 “,” 分开
示例
1 | CREATE TABLE users |
NULL 和 NOT NULL
为什么在数据类型后面还跟了NOT NULL
或NULL
呢?NOT NULL
表示的意思是这个字段的值不能为NULL
而NULL
的意思相反,表示这个字段的值可以为NULL
默认值
在user_email
后面的DEFAULT 'zjh_34@qq.com'
的意思是是什么呢?看到这个单词你应该就能猜出来了吧
不要自我怀疑,这个子句就是设置默认值的,这个子句设置了user_email
的默认值为zjh_34@qq.com
主键
可以通过PRIMARY KEY
语句设置主键PRIMARY KEY
不只能设置一个主键,也可以设置多个主键,使用方式如下
1 | PRIMARY KEY (字段名1,字段名2,字段名...) |
数据库引擎
==这个容我偷偷懒晚些写😁==
更新表
更新表可以使用ALTER TABLE
语句,按照常理来说我们的表在设计时应该考虑好,在设计好之后不应有大规模的改动
来,举个添加列的栗子给你看看
1 | ALTER TABLE users |
在这个栗子里我们给前面创建的users
表添加了一个名为user_city
的列
既然可以添加列,那么我们肯定也能删除列
删除我们刚才添加的列可以这样做
1 | ALTER TABLE users |
注意!使用ALTER TABLE语句的时候要极为注意,如果增加了不需要的列可能会无法删除它们,如果删除了不应该删除的列,可能会丢失列中的所有数据 |
==定义外键,晚些写==
重命名表
重命名表可以使用RENAME TABLE
语句
举个栗子
1 | RENAME TABLE 表名 TO 新表名 |
也可以通过下面这种方式重命名多个表
1 | RENAME TABLE 表名1 TO 新表名1, |
删除表
删除表可以使用DROP TABLE
语句,这个语句是删除整张表,并非它的内容,这个语句非常简单,看栗子吧
1 | DROP TABLE 表名; |
这个语句删除了一个表(如果这个表存在的话),删除表没有确认,不能撤销,在执行这条语句后将永久删除该表
小结
学习了创建、更新、重命名、删除表语句CREATE TABLE
用来创建新表ALTER TABLE
用来改变表列RENAME TABLE
用来重命名表DROP TABLE
用来删除表
数据
检索数据
最经常使用的检索数据的SQL语句就是SELECT
语句了,在这里我将会讲一些常用的SELECT
语句的用法
检索单个列
我们从一个简单的检索单列数据的SQL语句开始
1 | SELECT user_name |
这个SQL语句的意思是从users
表中检索出名为user_name
的列
输出如下
1 | +-------------+ |
检索多个列
如果想要检索多个列的数据也是很简单的,请看栗子
1 | SELECT user_name,user_email |
这个栗子我们检索了user_name
和user_email
这两列,列名之间用逗号(,)分隔,输出如下
1 | +-------------+-----------------+ |
检索所有列
我们如果想要检索所有的列的时候不必一个一个输入列名,可以使用在列名的位置使用通配符(*)来达到
1 | SELECT * |
输出如下
1 | +---------+-------------+-----------------+----------+------------------------+------------------+ |
过滤数据
过滤数据我们可以使用WHERE
子句,先看栗子
1 | SELECT * |
这个语句检索所有列,但是只返回user_email
等于zjh_34@qq.com
的行,输出如下
1 | +---------+-------------+---------------+----------+------------------------+------------------+ |
WHERE子句的操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 介于(在指定的两个值之间) |
范围值检查
需要检查某个范围的值时,我们可以使用BETWEEN
操作符,其语法与其他的操作符不同,因为它需要两个值
下面这个栗子说明如何使用BETWEEN
操作符,它会检索年龄在18到27之间的所有用户
1 | SELECT * |
在使用BETWEEN
必须要指定两个值,检索范围的最小值和最大值,这两个值必须使用AND
关键字分隔
空值检查
SELECT
有一个特殊的WHERE
子句可以用来检查值为NULL
的列,其语法如下
1 | SELECT * |
这条语句将返回没有邮箱地址的所有行
插入数据
INSERT
是SQL中比较重要的语句,它的作用是插入(或添加)行到表中
插入单行数据
下面的栗子插入了新的一行到了表中
1 | INSERT INTO users |
这便向表中插入了新的一行,当然还有一种更安全的方法,请看栗子
1 | INSERT INTO users( |
这个栗子完成了和前一个INSERT
语句相同的工作,但是在表名的后面的括号里面明确的给出了列名,应为提供了列名所以VALUES
必须以其指定的次序匹配指定的列名,它的有点事表的结构更改,此INSERT
语句仍然能够正确工作
插入多行数据
INSERT
可以插入一行到一个表中,但是如果想要插入多个行怎么办?
可以使用一种方法,那就是使用多条INSERT
语句
1 | INSERT INTO users( |
上一种方法看起来可能繁琐了些,你可以使用下面这种方法,请看栗子
1 | INSERT INTO users( |
虽然第二种方法比第一种简洁一点,但是第一种插入语句的速度比第二中插入语句的速度快
更新数据
更新(修改)表中的数据可以使用UPDATE
语句
==注意,在使用UPDATE
的时候一定要注意细心,应为稍不注意可能就会更新(修改)表中的所有行==
UPDATE
很容易使用,来,上栗子!
1 | UPDATE users |
UPDATE
后面跟的是要更新(修改)的表的名字,在这个栗子中要更新的是user_id
为c34v32
的用户的user_id
使用SET
子句将其设置成指定值
那么该如何修改多个列呢?还是看栗子
1 | UPDATE users |
这个栗子中更新user_id
为j34x54
的user_email
和user_id
列
删除数据
从表中删除数据可以使用DELETE
语句,看栗子
1 | DELETE FROM users |
DELETE FROM
指定删除数据的表名,使用WHERE
过滤要删除的行
那么该如何删除所有数据呢?
你可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变
==在删除记录时要格外小心!因为您不能重来==
1 | DELETE FROM user; |
结语
这篇MySQL学习笔记是我浓缩了我这几天学到的MySQL知识写出来了,当然还不是很完善,可能有些地方比较重要但是我漏写了,你可以在下面的评论区提出来,我补上,下次我的学校放月假了我会更新一篇SQL基础知识,在里面讲解一些SQL中的概念,比如什么是字段?什么是数据库?之类的。好了,这篇笔记到此结束,听一首歌吧