一、MySQL简介
MySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
注:以上内容来自百度百科
提示:以下是本篇文章正文内容,所有内容均为我学习MySQL过程中做的笔记,欢迎阅读!
关于SQL语句的注意事项:
1、SQL语句中的 [ ] 中的内容为可选,可以写也可以不写。
2、每个SQL语句句末的分号可以写也可以不写。
3、SQL语句对大小写不敏感,大写小写都行。-- 为注释符号。
4、除了汉字,所有的SQL语句必须是英文状态下输入的才行,不然会报错。
5、数据库名、表名或字段名上的``符号(我叫它斜引号),这个符号不是单引号,而是tab键上面的那个键的符号,这个符号可写可不写。如果你的数据库名、表名或字段名是一个特殊字符或者关键字时,就需要带上这个符号。
二、数据库操作
2.1、创建数据库
基本语法:
CREATE DATABASE [ IF NOT EXISTS ] 数据库名;
举例,创建一个名为stu的数据库:
CREATE DATABASE IF NOT EXISTS stu;
在创建数据库时,我们应该要使用
IF NOT EXISTS
进行判断创建的数据库是否已经存在,这样可以避免运行SQL语句出现报错。
2.2、删除数据库
基本语法:
DROP DATABASE [ IF EXISTS ] 数据库名;
举例,删除一个名为stu的数据库:
DROP DATABASE IF EXISTS stu;
2.3、使用数据库
基本语法:
USE 数据库名;
举例,使用一个名为stu的数据库:
USE stu;
值得注意的是,如果你的数据库名、表名或字段名是一个特殊字符或者关键字时,就需要带``,这个符号不是单引号,而是tab键上面的那个键的符号,即斜引号。
举例,使用数据库名为stu或table的数据库:
USE ` stu` ;
USE ` table ` ;
2.4、查看数据库
基本语法:
SHOW DATABASE ;
指查看所有的数据库。
三、数据库列的类型
3.1、数值类型
类型名
描述
tinyint
十分小的数据,只占1个字节
smallint
较小的数据,占2个字节
mediumint
中等大小的数据,占3个字节
int
标准的整数,占4个字节(常用)
bigint
较大的数据,占8个字节
float
浮点数,占4个字节
double
浮点数,占8个字节
decimal
字符串形式的浮点数,占8个字节
3.2、字符串类型
类型名
描述
char
固定的字符串大小,范围0~255
varchar
可变字符串,范围0~65535(常用)
tinytext
微型文本,范围2^8-1
text
文本串,范围2^16-1
3.3、时间与日期类型
类型名
描述
date
日期,格式为YY-MM-DD
time
时间,格式为HH:mm:ss
datetime
日期与时间,格式为YY-MM-DD HH:mm:ss (常用)
timestamp
时间戳,从1970年1月1日到现在的毫秒数
year
年份
四、数据库的字段属性
4.1、字段属性
Unsigned:
Unsigned属性,指无符号的整数,如果声明了该属性,则该字段对应的列的数据不能为负数。
zerofill:
zerofill属性,指0填充,即不足的位数用0来填充。
自增:
自动在上一条记录的基础上加1(默认),一般用来设置唯一的主键。可以自定义自增的起始值和步长。
非空:
如果设置为not null,则必须填写值,否则会报错;如果设置为null,可以不填写值,则默认值为null。
默认:
设置为默认的值,如果不指定该列的值,则会有默认值。
五、数据库表的操作
5.1、表的创建
基本语法:
CREATE TABLE [ IF NOT EXISTS ] ` 表名` (
` 字段名` 列类型 [ 属性] [ 索引] [ 注释] ,
` 字段名` 列类型 [ 属性] [ 索引] [ 注释] ,
. . .
` 字段名` 列类型 [ 属性] [ 索引] [ 注释]
) [ 表的类型] [ 字符集设置] [ 注释]
举例,创建一个student表:
CREATE TABLE IF NOT EXISTS ` student` (
` id` INT ( 10 ) NOT NULL auto_increment COMMENT '学号' ,
` name` VARCHAR ( 20 ) NOT NULL DEFAULT '匿名' COMMENT '姓名' ,
` age` INT ( 3 ) NOT NULL COMMENT '年龄' ,
PRIMARY KEY ( ` id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8
5.2、表的修改与删除
修改表的基本语法:
ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE 表名 ADD 字段名 列类型
ALTER TABLE 表名 MODIFY 字段名 列类型 [ 类属性]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [ 列类型] [ 列属性]
ALTER TABLE 表名 DROP 字段名
举例,修改表名、字段名、字段约束以及删除字段:
ALTER TABLE student RENAME AS student1
ALTER TABLE student1 ADD sex INT ( 2 )
ALTER TABLE student1 MODIFY age VARCHAR ( 12 )
ALTER TABLE student1 CHANGE age age1 INT ( 2 )
ALTER TABLE student1 DROP age1
删除表的基本语法:
DROP TABLE [ IF EXISTS ] 表名
举例,删除student表:
DROP TABLE IF EXISTS student
六、DML语言数据管理
6.1、DML语言
DML语言,即数据库操作语言,包括数据的插入、修改与删除操作,即insert、update、delete。
6.2、插入数据
基本语法:
INSERT INTO 表名( [ 字段名1 ] , [ 字段名2 ] , [ 字段名3 ] , . . . )
VALUES ( 值1 , 值2 , 值3 , . . . )
字段名1对应值1,字段名2对应值2,字段名n对应值n,一定要一一对应。
举例,在student表中插入值:
INSERT INTO ` student` ( ` id` , ` name` , ` age` ) VALUES ( 202101 , '酷酷的猿' , 20 )
或者也可以这样写:
INSERT INTO ` student`
VALUES ( 202101 , '酷酷的猿' , 20 )
我一般会把斜引号也省略,因为student并不是一个特殊字符。
6.3、修改数据
基本语法:
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , . . .
WHERE 条件语句
举例,修改student表中学号为202101的学生的姓名和年龄:
UPDATE ` student` SET ` name` = '张三' , ` age` = 21
WHERE id = 202101
也可以只修改一个:
UPDATE ` student` SET ` name` = '张三' WHERE id = 202101
6.4、删除数据
基本语法:
DELETE FROM 表名
DELETE FROM 表名 WHERE 条件语句
举例,删除表的数据:
DELETE FROM ` student`
DELETE FROM ` student` WHERE id = 202101
DELETE
命令可以使用
TRUNCATE
命令替代,推荐使用
TRUNCATE
(TRUNCATE命令会重新设置自增列,不会影响事务)。
七、SQL语句的操作符
7.1、操作符及其含义
操作符
含义
=
等于
<> 或 !=
不等于
>
大于
<
小于
>=
大等于
<=
小等于
BETWEEN … AND …
在某个范围内
AND
用于连接多个条件,相当于 &&
OR
用于连接多个条件,相当于 ll
八、DQL查询数据
8.1、Select语句
基本语法:
SELECT * FROM 表名
SELECT 字段名1 , 字段名2 , 字段名3 , . . . FROM 表名
SELECT 字段名1 AS 别名1 , 字段名2 AS 别名2 , 字段名3 AS 别名3 FROM 表名
SELECT DISTINCT 字段名 FROM 表名
举例:
SELECT * FROM ` student`
SELECT ` id` , ` name` , ` age` FROM ` student`
SELECT ` id` AS 学号, ` name` AS 姓名, ` age` AS 年龄 FROM ` student`
SELECT DISTINCT ` name` FROM `
student`
8.2、Where语句
基本语法:
SELECT . . . FROM 表名 WHERE 条件语句
举例:
SELECT * FROM ` student` WHERE age>= 18 AND age<= 22
SELECT * FROM ` student` WHERE age>= 18 && age<= 22
SELECT * FROM ` student` WHERE age BETWEEN 18 AND 22
8.3、模糊查询
举例:
SELECT * FROM ` student` WHERE ` name` LIKE '张%'
SELECT * FROM ` student` WHERE ` name` LIKE '张_'
SELECT * FROM ` student` WHERE ` name` LIKE '张__'
SELECT * FROM ` student` WHERE ` name` LIKE '%三%'
SELECT * FROM ` student` WHERE id IN ( 202101 , 202102 , 202103 )
SELECT ` name` FROM ` student` WHERE age IS NOT NULL
8.4、JoinOn联表查询
基本语法:
SELECT 别名1. 字段名1 别名2. 字段名2 FROM 左表表名 别名 INNER JOIN 右表表名 别名 ON 别名1. 字段名 = 别名2. 字段名
SELECT 别名1. 字段名1 别名2. 字段名2 FROM 左表表名 别名 LEFT JOIN 右表表名 别名 ON
别名1. 字段名 = 别名2. 字段名
SELECT 别名1. 字段名1 别名2. 字段名2 FROM 左表表名 别名 RIGHT JOIN 右表表名 别名 ON 别名1. 字段名 = 别名2. 字段名
举例,联表查询:
SELECT s. id s. name FROM student s INNER JOIN result r ON s. id = r. id
SELECT s. id s. name FROM student s LEFT JOIN result r ON s. id = r. id
SELECT s. id s. name FROM student s RIGHT JOIN result r ON s. id = r. id
8.5、分页和排序
基本语法:
ORDER BY 字段名 DESC
ORDER BY 字段名 ASC
LIMIT 起始值,页面的大小
举例:
SELECT * FROM student WHERE age = 20 ORDER BY id DESC
SELECT * FROM student WHERE age = 20 ORDER BY id ASC
SELECT * FROM student WHERE age = 20 ORDER BY id ASC LIMIT 0 , 5
SELECT * FROM student WHERE age = 20 ORDER BY id ASC LIMIT 5 , 5
SELECT * FROM student WHERE age = 20 ORDER BY id ASC LIMIT1 10 , 5
8.6、子查询
基本语法:
SELECT name, age
FROM ` student` s
INNER JOIN ` result` r
ON s. id = r. id
INNER JOIN ` subject` sub
ON r. subNo = sub. subNo
WHERE subName = 'MySQL从入门到删库跑路'
九、MySQL常用函数
可以前往MySQL官网查看:
MySQL官方文档
十、MySQL事务
注:MySQL事务(以下内容来自菜鸟教程)
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
10.1、原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
10.2、一致性
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
10.3、隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
10.4、持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
十一、总结
这篇文章是我在学习MySQL过程中总结的基础知识,总结的目的是为了方便今后查阅。如果你想系统的学习MySQL,建议查阅官方文档,或者前往B站、菜鸟教程等网站进行学习。
等一下,为什么每次给我点赞的小伙伴,个个都长得那么帅、那么漂亮,又那么有素质呢,我真是搞不懂!