前言
MySQL可以说是最常用的小型数据库,加上现在越来越流行的分布式架构,哪怕是一般的中大型项目也可以用MySQL来进行部署。
数据库的操作最常用的就是增删改查,还有一些切换数据库等操作。以下命令不加说明的,均是MySQL模式下命令,命令行模式下的命令要设置好系统环境变量才能使用。
一、数据库操作
创建数据库
语法:
CREATE DATABASE database_name;
删除数据库
删除数据库务必谨慎!因为执行删除命令后,所有数据将消失。
语法:
DROP DATABASE database_name;
选择数据库
语法:
USE database_name;
二、数据表操作
数据类型
数值类型
日期和时间类型
字符串类型
二进制串用于存储非传统数据,如图像、音频和视频文件、程序可执行文件等
注意:char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,比如CHAR(30)就可以存储30个字符。
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们区别在于可容纳存储范围不同。
有4种TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。对应的这4种BLOB类型,可存储的最大长度不同,可根据实际情况选择。
创建数据表
语法:
CREATE TABLE table_name (
column_name column_type
);
示例:
CREATE TABLE IF NOT EXISTS t_student(
stu_id INT NOT NULL AUTO_INCREMENT,
stu_name VARCHAR(100) NOT NULL,
stu_email VARCHAR(200),
PRIMARY KEY (stu_id)
);
结果:
删除数据表
语法:
DROP TABLE table_name;
插入数据
语法:
INSERT INTO table_name(
field1, field2, ... fieldN
) VALUES(
value1, value2, ... valueN
);
#插入多条数据
INSERT INTO table_name(
field1, field2, ... fieldN
) VALUES(
valueA1, valueA2, ... valueAN
) VALUES(
valueB1, valueB2, ... valueBN
);
示例:
INSERT INTO t_student(
stu_id, stu_name, stu_email
) VALUE (
10001, 'Tom', '10001@qq.com'
);
结果:
查询数据
语法:
SELECT field1, field2 ...
FROM table_name
[WHERE Clause]
[LIMIT N][OFFSET N]
1.查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
2.SELECT命令可以读取一条或者多条记录。
3.可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
4.可以使用WHERE语句来包含任何条件。
5.可以使用LIMIT属性来设定返回的记录数。
6.可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
WHERE 子句
语法:
SELECT field1, field2, ... field2 FROM table_name1, table_name2
[WHERE condition1 [AND [OR]]] condition2 ...
1.查询语句中可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
2.可以在WHERE子句中指定任何条件。
3.可以使用AND或者OR指定一个或多个条件。
4.WHERE子句也可以运用于SQL的DELETE或者UPDATE命令。
5.WHERE子句类似于程序语言中的if条件,根据MySQL表中的字段值来读取指定的数据。
UPDATE 更新
语法:
UPDATE table_name SET field1 = new_value1, field2 = new_value2
[WHERE Clause]
1.可以同时更新一个或多个字段。
2.可以在WHERE子句中指定任何条件。
3.可以在一个单独表中同时更新数据。
4.UPDATE语句必须加WHERE条件,否则将更新所有记录
DELETE语句
语法:
DELETE FROM table_name
[WHERE Clause]
1.如果没有指定WHERE子句,MySQL表中的所有记录将被删除。
2.可以在WHERE子句中指定任何条件
3.可以在单个表中一次性删除记录。
delete,drop,truncate 都有删除表的作用,区别在于:
1、delete和truncate仅仅删除表数据,drop连表数据和表结构一起删除,打个比方,delete是单杀,truncate是团灭,drop是把电脑摔了。
2、delete是DML语句,操作完以后如果没有不想提交事务还可以回滚,truncate和drop是DDL语句,操作完马上生效,不能回滚,打个比方,delete是发微信说分手,后悔还可以撤回,truncate和drop是直接扇耳光说滚,不能反悔。
3、执行的速度上,drop>truncate>delete,打个比方,drop是神舟火箭,truncate是和谐号动车,delete是自行车
LIKE子句
描述:
我们知道在MySQL中使用SQL SELECT命令来读取数据, 同时我们可以在SELECT语句中使用WHERE子句来获取指定的记录。
WHERE子句中可以使用等号=来设定获取数据的条件,如"stu_email = '10001@qq.com'"。
但是有时候我们需要获取stu_email字段含有"com"字符的所有记录,这时我们就需要在WHERE子句中使用SQL LIKE子句。
SQL LIKE子句中使用百分号%字符来表示任意字符,类似于UNIX或正则表达式中的星号*****。
如果没有使用百分号%, LIKE子句与等号=的效果是一样的。
语法:
SELECT field1, field2, ... fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] field2 = 'somevalue'
1.你可以在WHERE子句中指定任何条件。
2.你可以在WHERE子句中使用LIKE子句。
3.你可以使用LIKE子句代替等号=。
4.LIKE通常与%一同使用,类似于一个元字符的搜索。
5.你可以使用AND或者OR指定一个或多个条件。
6.你可以在DELETE或UPDATE命令中使用WHERE...LIKE子句来指定条件。
7.%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
8._:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
[]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
[^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
9.查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符 “%”、“_”、“[” 的语句无法正常实现,而把特殊字符用 “[ ]” 括起便可正常查询。
UNION
描述:
UNION操作符用于连接两个以上的SELECT语句的结果组合到一个结果集合中。多个SELECT语句会删除重复的数据。
语法:
SELECT field1, field2, ... fieldN
FROM table_name
[WHERE condition]
UNION [ALL | DESTINCT]
SELECT field2, field2, ... fieldN
FROM table_name
[WHERE condition];
1.filed1, field2, ...fieldN:要检索的列。
2.table_name:要检索的数据表。
3.WHERE conditions:可选,检索条件。
4.DISTINCT:可选,删除结果集中重复的数据。默认情况下UNION操作符已经删除了重复数据,所以DISTINCT修饰符对结果没啥影响。
5.ALL:可选,返回所有结果集,包含重复数据。
ORDER BY排序
语法:
SELECT field1, field2, ... fieldN
FROM table_name
ORDER BY field1 [ASC [DESC]], [field2 ...] [ASC [DESC]]
1.可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
2.可以设定多个字段来排序。
3.可以使用ASC或DESC关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
4.可以添加WHERE...LIKE子句来设置条件。
GROUP BY分组
描述:
GROUP BY语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用COUNT, SUM, AVG,等函数。
语法:
SELECT column_name function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
JOIN 连接
描述:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
语法
# INNER JOIN
SELECT a.filed1, a.filed2, ... b.filed1, ...
FROM table_name1 a INNER JOIN table_name2 b
ON a.id = b.id;
# LEFT JOIN
SELECT a.filed1, a.filed2, ... b.filed1, ...
FROM table_name1 a LEFT JOIN table_name2 b
ON a.id = b.id;
# RIGHT JOIN
SELECT a.filed1, a.filed2, ... b.filed1, ...
FROM table_name1 a RIGHT JOIN table_name2 b
ON a.id = b.id;
NULL 值处理
我们已经知道MySQL使用SQL SELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
IS NULL: 当列的值是NULL,此运算符返回true。 IS NOT NULL:当列的值不为NULL,运算符返回true。 <=>:比较操作符(不同于=运算符),当比较的的两个值相等或者都为NULL时返回true。 关于NULL的条件比较运算是比较特殊的。你不能使用=NULL或!=NULL在列中查找NULL值 。
在MySQL中,NULL值与任何其它值的比较(即使是 NULL)永远返回 NULL,即NULL=NULL返回NULL 。
MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。
ALTER命令
描述:
当我们需要修改数据表名或者修改数据表字段时,需要ALTER命令。
删除表字段
ALTER TABLE table_name DROP column_name;
添加表字段
ALTER TABLE table_name ADD column_name datatype;
修改表字段
# MODIFY
ALTER TABLE table_name MODIFY column_name new_datatype;
# CHANGE
ALTER TABLE table_name CHANGE old_column_name new_column_name new_datatype;
最后
我这边整理了一份:MySQL相关资料、Java的系统化资料:(包括Java核心知识点、面试专题和20年最新的互联网真题、电子书等)有需要的朋友可以关注公众号【程序媛小琬】即可获取。