MySQL常用命令大全
文章目录
一.命令行指令
- 1.启动mysql:
net start mysql
- 2.连接与断开服务器:
mysql -h 地址 -P 端口 -u 用户名 -p 密码
二.数据库操作
- 1.查看当前数据库:
select databases;
- 2.显示当前时间,用户名,数据库版本:
select now() ,user() ,version() ;
- 3.创建库:
create database [if not exists] 数据库名 数据库选项
- 其中数据库选项:
CHARACTER SET charset_name
COLLATE collation_name
- 4.查看已有库:
show databases;
- 5.查看当前库信息:
show create database 数据库名
- 6.修改数据库选项信息:
alter database 库名 选项信息
- 7.删除库:
drop database [ if exists] 数据库名
三.表操作
- 1.创建表:
create [temporary] table [if not exists] [库名.]表名 (表的结构定义) [表选项]
- 1)每个字段必须有数据类型,最后一个字段和后不能有逗号
- 2)temporary 表示临时表,会话结束时表自动消失
- 3)对于字段的定义如下:
- 字段名 数据类型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
- [UNIQUE [KEY] |[PRIMARY] KEY] [COMMENT ‘string’]
- 4)表选项
- a.字符集
- CHARSET = charset_name 如果表没有设定,则使用数据库字符集
- b.存储引擎
- ENGINE = engine_name
- 表在管理数据时往往采用不同的数据结构,结构不同会导致处理方式提供的特性操作也不同
- 常见的存储引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
- 不同的存储引擎在保存表的结构和数据时常采用不同的方式
- MyISAM 表文件含义: .frm 表定义, .MYD 表数据, .MYI 表索引
- InnoDB表文件含义: .frm 表定义,表空间数据和日志文件
- SHOW ENGINES --显示存储引擎的状态信息
- SHOW ENGINES 引擎名 {LOGS|STATUS} --显示存储引擎的日志或状态信息
- 2.查看所有表:
SHOW TABLES [LIKE 'pattern']
,SHOW TABLES FROM 库名
- 3.查看表结构:
SHOW CREATE TABLE 表名
或DESC 表名
- 4.修改表
- 1)修改表本身的选项:
ALTER TABLE 表名 表选项
, 例子:ALTER TABLE 表名 ENGINE = MYISAM;
- 2)对表重命名:
RENAME TABLE 原表名 TO 新表名
- 3)修改表的字段结构:
ALTER TABLE 表名 操作名
,有如下操作名:
操作名 | 说明 |
---|---|
ADD [COLUMN] 字段名 字段类型 | 增加字段 |
ADD PRIMARY KEY(字段名) | 增加主键 |
ADD UNIQUE [索引名] (字段名) | 创建唯一索引 |
ADD INDEX [索引名] (字段名) | 创建普通索引 |
DROP[ COLUMN] 字段名 | 删除字段 |
MODIFY[ COLUMN] 字段名 字段属性 | 支持对字段属性进行修改 |
CHANGE[ COLUMN] 原字段名 新字段名 字段属性 | 支持对字段名进行修改 |
DROP PRIMARY KEY | 删除主键 |
DROP INDEX 索引名 | 删除索引 |
DROP FOREIGN KEY | 删除外键 |
- 5.
DROP TABLE [IF EXISTS] 表名
- 6.删除表的数据:
- 1)
DELETE FROM 表名 [where ...];
,不会清空自增 - 2)
TRUNCATE [TABLE] 表名
,清空所有数据,不能带条件,会清空自增 - 7.复制表结构:
CREATE TABLE 表名 LIKE 要复制的表名
- 8.复制表结构和数据:
CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名
四.数据操作
- 1.增加数据:
INSERT [INTO] 表名 [(字段列表)] VALUES(值列表) [,(值列表),...]
- 如果要插入的值列表包含所有字段且和建表顺序一致,则可以省略字段列表
- 可同时插入多条数据记录
- 字段列表可用*代替表示所有字段
- 2.删除数据:
DELETE FROM 表名 [删除条件子句]
,没有删除条件子句会删除这个表所有的数据 - 3.修改数据:
UPDATE 表名 SET 字段名 = 新值 [,字段名2 = 新值...] [更新条件]
五.字符集编码
MySQL 数据库 表 字段 均可设置编码,数据编码与客户端编码不需一致SHOW VARIABLES LIKE 'character_set_%'
: 查看所有字符集编码character_set_client
: 客户端向服务器发送数据时使用的编码character_set_results
: 服务器端将结果返回给客户端时使用的编码character_set_connection
:连接层编码SET 变量名 = 变量值;
:如下,SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection=gbk;
SET NAMES gbk;
相当与上面三条语句执行
六.数据查询语句
语法: SELECT [ALL|DISTINCT] select_expr from ->where ->group by [合计函数] ->having ->order by ->limit
- 1.select_expr
- 1)计算公式,函数调用,字段也是表达式,例如:
SELECT amount,1+2,NOW() FROM a;
- 2)可使用as关键字为每个列设定别名,适用于简化列标识,避免多个列标识符重复,as可省略不写
- 2.from子句,用于表示查询来源
- 1)可使用as关键字为表取别名,as可省略不写
- 2)from子句后可同时出现多个表,多个表会横向叠加到一起,二数据会形成笛卡尔积,例如:
select * from a,b;
- 3.where子句
- 用于从from获得的数据源中进行筛选,1表示真,0表示假表达式由运算符和运算数组成
- 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
- 搜索条件的组成:逻辑操作符,比较操作符
操作符名称 | 语法 | 描述 |
---|---|---|
AND 或 && | a AND b 或 a && b | 逻辑与,同时为真才为真 |
OR 或|| | a OR b 或 a || b | 逻辑或,一个为真则为真 |
NOT 或! | NOT a 或 !a | 逻辑非,若操作数为假,结果则为真 |
IS NULL | a IS NULL | 若操作符为NULL,则结果为真 |
IS NOT NULL | a IS NOT NULL | 若操作符不为NULL,则结果为真 |
BETWEEN | a BETWEEN b AND c | 若a范围在b与c之间则结果为真 |
LIKE | a LIKE b | SQL模式匹配,若a匹配b,则结果为真,其中通配符% 代表0或多个字符,_ 代表一个字符 |
IN | a IN (a1,a2,a3,….) | 若a等于a1,a2…中的某一个,则结果为真 |
exists | exists(select * from a) | 只要子句中结果大于等于1行则结果就为真 |
- 4.group by子句(分组)
- group by 字段或字段别名 [排序方式]
- 分组后会进行排序,升序:
ASC
,降序:DESC
- 以下聚合函数需配合group by 子句一起使用:
-
count()
返回不同的非NULL值数目,如count(*),count(1),count(字段) -
sum()
求和 -
max()
求最大值 -
min()
求最小值 -
avg()
求平均值 -
group_concat()
返回一个带有来自一个组的连接的非NULL值的字符串结果,为组内字符串连接 - 5.having子句
- 与where功能用法相同只是执行时机不同,where在开始时执行数据检测,对原数据进行过滤
- having对筛选出来的结果再次进行过滤
- where不可使用聚合函数,一般需要用到聚合函数才会用having
注:SQL标准要求having子句必须引用group by 子句中的列或用于聚合函数中的列
- 6.order by 子句
- order by 排序字段或别名 排序方式 [,排序字段2或别名 排序方式 …]
- order by 子句支持对多个字段的排序
- 7.limit子句(分页,限制结果数量)
- 仅对处理好的结果进行数量限制,将处理好的结果看作是一个集合,按照记录出现的先后顺序,索引从0开始
- 1)
limit 起始位置, 获取条数
- 2)
limit 获取条数
(表示直接从第一条数据(索引为0)开始) - 8.distinct选项:用于去除重复记录,默认为ALL
七.多表连接查询
1.union: SELECT ... UNION [ALL|DISTINCT] SELECT ...
Union [DISTINCT]:distinct为默认方式可不写,对两个结果集进行并集操作,不包括重复行即返回所有行都是唯一的,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;注:建议对每个select查询加上小括号.需要各select查询的字段数量一样,即每个select查询的字段列表(数量,类型)应该一致,因为结果中的字段名以第一条select语句为准
2.子查询,需要用括号括起来
1)from型
from要求后面是一个表,必须给子查询结果取个别名,简化每个查询内的条件
例如:select * from (select * from a where id>0) b;
2)where型
子查询返回一个值不需要给子查询取别名
例如:select * from a where money = (select max(money) from a);
3)列子查询
使用in或not in子查询,查询结果返回单列
使用exists和 not exists条件,返回1或0,常用于判断条件,例如:select column1 from t1 where exists (seelct * from t2);
3.join连接查询:将多个表的字段进行连接,可指定连接条件
1)内连接(inner join)
默认就是内连接,可省略inner
只有数据存在时才可发送连接请求,即连接结果不能出现空行,on表示连接条件,其表达式与where类似
2)交叉连接(cross join)
没有条件的内连接,例如:select * from a cross join b;
3)外连接(outer join)
如果数据不存在,也会出现在连接结果中包括左外连接和右外连接
- 左外连接(left outer join):如果数据不存在,左表记录会出现,右表以NULL填充
- 右外连接(right outer join):如果结果数据不存在,右表记录会出现,而左表以NULL填充
注:可省略outer,但不能省略left或right,在关键字左边的为左表,在右边的为右表
本文地址:https://blog.csdn.net/sun_0128/article/details/107092186