MySQL常用命令大全

文章目录

  • 一.命令行指令
  • 二.数据库操作
  • 三.表操作
  • 四.数据操作
  • 五.字符集编码
  • 六.数据查询语句
  • 七.多表连接查询
    • 1.union: `SELECT ... UNION [ALL|DISTINCT] SELECT ...`
    • 2.子查询,需要用括号括起来
    • 3.join连接查询:将多个表的字段进行连接,可指定连接条件

一.命令行指令

  • 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,在关键字左边的为左表,在右边的为右表

你可能感兴趣的:(mysql复习,mysql,数据库,sql)