MySQL常用命令

总结一下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的操作符如下图:

WHERE中操作符,摘自菜鸟教程

同时,可以用AND和OR指定一个或多个条件。如:WHERE ID = 10000 AND NAME = ‘TOM’
查询多个表的字段,要在字段前加上表名,即表名.字段。
注意:想要判断数据是否为空,用IS NULLIS NOT NULL

(二)LIKE子句

LIKE子句使得WHERE可以设定模糊条件。
语法格式:WHERE <字段1> LIKE <条件1> AND <字段2> = <条件2>
LIKE常用符号:
1.%,表示任意个字符。
2._,表示单个字符。
样例如下图:

LIKE子句样例,摘自菜鸟教程笔记

常用的就是&和_,也有其他符号(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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容