总结一下MySQL常用命令。适用于Windows。
<尖括号表示需要手动输入的内容>
[括号内是可选内容]
本篇博客按照菜鸟教程MySQL篇进行整理,主要是按照基础操作进行划分。要想完整学习SQL语句,建议看SQL篇:SQL 教程 | 菜鸟教程 (runoob.com)
(菜鸟教程MySQL篇害人不浅 但是SQL篇还行 不建议直接看这上面的MySQL)
如果你致力于JavaWeb的开发并需要用到Java操作数据库,能看懂SQL语句就行了,JPA都不需要你亲自手写SQL语句(来自某花了一周时间才会写SQL的作者)。
零、数据库管理
1.连接数据库:(在cmd窗口下)mysql -u <用户名> -p <密码>
2.创建用户:CREATE USER '<用户名>'@'<主机名>' IDENTIFIED BY '<密码>'
3.用户授权:GRANT <权限> ON <数据库名>.<表名> TO ‘<用户名>’@‘<主机名>’
注:要授予所有权限,可以用ALL
一、操作数据库
1.查看所有数据库:SHOW DATABASES
查看创建数据库时详细信息:SHOW CREATE DATABASE <数据库名>
2.创建数据库:CREATE DATABASE <数据库名>
3.删除数据库:DROP DATABASE <数据库名>
4.选择数据库:USE <数据库名>
二、操作表
(一)表的基本操作
1.查看某个数据库下的所有表:SHOW TABLES
查看表的详细细节/结构:DESC <表名>
2.创建数据表:CREATE TABLE <表名> (<列名1> <数据类型1> [AUTO_INCREMENT] [NOT NULL] [DEFAULT <默认值>] [PRIMARY KEY], <列名2> <数据类型2>, ...)
注:CREATE TABLE时后面加的参数(AUTO_INCREMENT, NOT NULL, DEFAULT等等均可以在MODIFY/CHANGE添加),这些参数称为约束。
(1) AUTO_INCREMENT表示自增。
(2)NOT NULL表示添加数据时,该字段不能为空。
(3)PRIMARY KEY用于定义主键,用于索引。如果有联合主键,也可以写成该形式:
CREATE TABLE <表名> (<列名1> <数据类型1>, <列名2> <数据类型2>, ..., PRIMARY KEY(列名1, 列名2, ...))
。
主键不能为空,不能重复。主键索引是唯一索引的特殊类型。
设置主键后,用INSERT INTO
语句插入重复数据将报错。用INSERT IGNORE INTO
插入重复数据将自动跳过重复数据,不报错,但会提示Warning。
(4)DEFAULT用于设定默认值。
3.删除数据表:DROP TABLE <表名>
4.复制表的结构到新表:CREATE TABLE <新表> LIKE <旧表>
复制表的数据与结构:CREATE TABLE <新表> SELECT * FROM <旧表>
复制表的所有结构,包括索引:可以用SHOW CREATE TABLE <表名>
查看创建数据表语句,然后创建一相同结构、索引的表,最后用INSERT INTO ... SELECT * FROM ...
语句复制表内容。
5.对重复数据操作:占个坑,可见链接MySQL 处理重复数据 | 菜鸟教程 (runoob.com)。
(二)临时表
临时表只在当前连接可用。关闭连接,MySQL将自动删除临时表。
要创建临时表,只需将TABLE替换为TEMPORARY TABLE。
删除临时表不需要加TEMPORARY。
三、操作表内数据
1.插入数据:INSERT INTO <表名> (<字段1>, <字段2>, ...) VALUES (<值1>, <值2>,...)
2.查询数据:SELECT <字段1>, <字段2>,... FROM <表1> <表2> [WHERE Clause] [LIMIT N] [OFFSET M]
注:(1) 可用星号*代替字段,表示查找表的所有字段数据
(2) LIMIT表示返回的记录数,OFFSET表示查询数据记录的偏移量。
3.修改/更新表内数据:UPDATE <表名> SET <字段1> = <数据1>, <字段2> = <数据2>,... [WHERE Clause]
4.删除表内某个数据:DELETE FROM <表名> [WHERE Clause]
删除整个表,然后重新构建表:TRUNCATE <表名>
四、修饰用子句
这些子句/符号可以用于查询数据SELECT、删除数据DELETE和修改数据UPDATE。包含的子句及其优先级关系如下图:这里只列写其中几种。
(一)WHERE子句
WHERE用于过滤记录。可用于WHERE的操作符如下图:
同时,可以用AND和OR指定一个或多个条件。如:
WHERE ID = 10000 AND NAME = ‘TOM’
。查询多个表的字段,要在字段前加上表名,即表名.字段。
注意:想要判断数据是否为空,用
IS NULL
或IS NOT NULL
。
(二)LIKE子句
LIKE子句使得WHERE可以设定模糊条件。
语法格式:WHERE <字段1> LIKE <条件1> AND <字段2> = <条件2>
。
LIKE常用符号:
1.%,表示任意个字符。
2._,表示单个字符。
样例如下图:
常用的就是&和_,也有其他符号(MySQL支持正则表达式的匹配),这里占个坑,以后弄明白了来填。
(三)UNION组合
UNION用于将多个SELECT语句的结果组合到一个结果中,其中的重复数据将不显示。
语法格式:SELECT <字段1> <字段2> FROM <表1> [WHERE Clause] UNION [ALL] SELECT <字段1> <字段2> FROM <表2> [WHERE Clause]
,其中[ALL]
表示返回所有结果,包括重复数据。
UNION前后查询的字段不一定要相同,但两侧列数一致。
(四)ORDER BY排序
ORDER BY用于设定字段的查询结果按某种方式排序输出。
语法格式:SELECT <字段1> <字段2> FROM <表1> <表2> ORDER BY <字段a> [ASC/DESC], <字段b> [ASC/DESC]
,其中ASC(升序)为默认值,DESC(降序)可选。
(五)GROUP BY分组
1.GROUP BY语句可根据一个或多个列对查询结果分组。在被分组的列上用函数修饰。
语法格式:SELECT <字段1>, fucktion(<字段2>) [AS <字符>] FROM <表名> GROUP BY <字段1>
,运行后将按照字段1对function 运算后的结果进行分组并输出。AS后的字符是分组输出后列的别名,用于重命名。
具体使用可以见链接:SQL中GROUP BY用法示例 - 简书 (jianshu.com)
2.在GROUP BY后可加HAVING,对GROUP BY分组后的对象进行筛选过滤。
(六) JOIN连接多个表
JOIN分为四类:INNER JOIN,LEFT JOIN,RIGHT JOIN,CROSS JOIN。
首先谈谈内连接与外连接。
内连接:连接结果仅包含符合连接条件(WHERE/INNER JOIN中ON后面的内容)的行。参与连接的两表都应符合连接条件。查询结果列出被连接表符合连接条件要求列出的所有列。
外连接:外连接就是在内连接的基础上,加上基准表没有显示的对应项进行显示,即使没显示的对应项不符合连接条件。
接下来说一说这四个JOIN。
0.MySQL没有FULL JOIN,取而代之的是UNION。
1.INNER JOIN:获取两表中字段匹配关系的记录。语法格式:SELECT <字段a1> <字段a2> <字段b1> <字段b2> FROM <表a> INNER JOIN <表b> ON <表a>.<字段a1> = <表b>.字段<b1>
INNER JOIN也可以用WHERE实现,即SELECT <字段a1> <字段a2> <字段b1> <字段b2> FROM <表a>, <表b> WHERE <表a>.<字段a1> = <表b>.字段<b1>
但使用WHERE会在某些时候会损失查询性能。
2.LEFT JOIN:从左表读取全部数据,即使右表没有对应数据。即以左表为基准表。
3.RIGHT JOIN:从右表读取全部数据,即使左表没有对应数据。即以右表为基准表。
4.CROSS JOIN:返回左表的所有行,每行与右表的所有行进行全组合。与不加WHERE修饰的SELECT语句等价。
(好混乱555)
五、事务
事务用于执行成批的SQL语句,如INSERT,UPDATE,DELETE等。在MySQL中,只有使用Innodb引擎的数据库才支持事务。
1.开启事务:BEGIN
2.确认事务:COMMIT
3.事务回滚:ROLLBACK
,结束事务并撤销未COMMIT的所有语句。
回滚至某保存点:ROLLBACK TO <保存点名>
4.在事务中建立保存点:SAVEPOINT [<保存点名>]
删除保存点:RELEASE SAVEPOINT <保存点名>
(一定要加保存点!)
六、ALTER命令
1.删除字段:ALTER TABLE <表名> DROP <字段>
2.添加字段:ALTER TABLE <表名> ADD <字段> <数据类型> [FIRST/AFTER <字段>]
3.仅修改字段数据类型:ALTER TABLE <表名> MODIFY <字段名> <新数据类型> []
修改字段名和数据类型:ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>
注:此处也可以添加CREATE TABLE时用的约束。
4.修改字段默认值:ALTER TABLE <表名> ALTER <字段> SET DEFAULT <默认值>
删除字段默认值:ALTER TABLE <表名> ALTER DROP <字段> DEFAULT
5.修改表名:ALTER TABLE <旧表名> RENAME <新表名>
七、索引
索引是对表内某列数据建立索引文件,以便提高查询效率。
索引长度:当数据类型为CHAR/VARCHAR时,可以声明索引长度,将针对前length个字符建立索引;当数据类型为BLOB或TEXT时,必须声明索引长度length。
声明索引长度的方法:<列名>(length)
如:CREATE INDEX name_index ON test(name(5))
(一)普通索引
1.在某表上创建索引:CREATE INDEX <索引名> ON <表名>(<列名>)
2.修改表结构时添加索引:ALTER TABLE <表名> ADD INDEX <索引名>(<列名>)
3.创建表时直接指定索引:类似建表时加在最后的PRIMARY KEY,在括号内的最后加INDEX <索引名> (<列名>)
例如:INDEX index_username (username(5))
:在CREATE TABLE test中,对test表中的username列建立索引,长度为5.
4.删除索引:DROP INDEX <索引名> ON <表名>
如:DROP INDEX index_username ON test
(二)唯一索引
唯一索引要求索引列的值唯一。允许有多个空值。
声明唯一索引,只需将所有INDEX替换为UNIQUE INDEX。
八、函数与运算符
函数:MySQL 函数 | 菜鸟教程 (runoob.com)
运算符:MySQL 运算符 | 菜鸟教程 (runoob.com)