SQL

MySQL常用命令

2022-01-15  本文已影响0人  不ji的石头

net start mysql80 win开启mysql进程

net stop mysql80 win关闭mysql进程

MySQL -uroot -p<password> 登录MySQL

create database <dbname> 创建名字为dbname的数据库

show databases; 查看MySQL里面有几个数据库,默认自带四个

use <dbname> 使用dbname数据库

show tables 查看当前库所有表名

desc <tableName> 查看表结构

select * form <tableName> 对tableName进行全表查询

select <field1>, <field2>... from <tableName> 从tableName表查询field1,filed2...

使用as取别名,但是不改变表filed名。(as可以省略,别名不能有空格,有空格可以用单引号)

select <field> as <myfield> for <tableName> 讲查询结果field->myfield

查询计算

select <field>*<n> as <myfiled> form <tableName> 将filed查询结果乘n并且改为myfiled

条件查询 where

**= 等于

<> 或者 !+ 不等于

<= 大于等于 >= 小于等于 > 大于 < 小于

between ... and ... 等价于 >= and <= (左小右大)

and 并且逻辑(优先级高于or, 可以()来提高or优先级)

or 或者逻辑

in (<v1>, <v2>,<v3>...) 在里面就为true

not in (<v1>,<v2>...)

模糊查询%(任意多个) _(任意一个)可以用\转义

排序 order by (默认升序) order by <field1>,<field2> desc 按field1降序,如果相等再比field2

order by <n> 按查询结果的第n列排序

语句执行顺序:select ... from ... where ... order by ... : from->where->select->order by

分组查询(group by可以多个字段联合分组):select <field> from <table> where <condition> group by <field> order by <field>执行顺序from-where-group by-select-order by

having:可以对分组之后的数据进一步过滤,效率比较低,尽量使用where过滤

注意:在分组查询里面select<field>里面的field只能是分组字段和分组函数,不然没有意义。

注意:null的判断要用is 或者is not

连接查询

子查询:就是select或where或from语句里面嵌套select语句嵌套

建表:create table <tableName> (<field1> <type> <opt>,<field2> <type> <opt>, ...);

删表:drop table <tableName>(删除的表不存在会报错), drop table if exists <tableName>(避免报错)

增加数据insert into:insert into <tableName> (<field1>,<field2> ...) values <v1>,<v2> ...

更新数据:update <tableName> set <field1>=<v1>,<field2>=<v2> ... where <condition> 注意:没有条件会全部更新

删除数据(DML)

delete delete from<tableName> where <condition> 注意:没有条件会删除所有的数据,可以回滚,效率低

truncate(DDL) truncate table <tableName> 删除不可以回滚, 效率高

开启事务:start transaction

提交事务:commit

回滚事务:rollback

事务的特性(ACID):

  1. 原子性(A):最小执行单元不可再分.
  2. 一致性(C):一个事务里面的操作同时成功或失败。
  3. 隔离性(I):事务之间互不影响。
  4. 持久性(D):事务提交之后会落盘。

设置MySQL隔离级别:set global transaction isolation level <isolationLevel>

查看当前的隔离级别:select @@tx_isolation

创建索引: create index <indexName> on <tableName>(<field>) 给表tableName的field字段加索引。

删除索引drop index <indexName> on <tableName>(<field>) 删除表tableName的field字段的索引。

索引失效几种情况:

  1. 模糊查询以%开头。
  2. where语句中使用or,并且or两端有一端字段没有索引。
  3. 复合索引不满足最左前缀原则。
  4. 索引字段在where子句里面参与了运算或者函数运算等。

创建视图:create view <viewName> as <opt> 用opt(DQL)操作的查询结果创建视图

删除视图:drop view <viewName>

创建用户:create user <userName> indentified by <password>

lower 转小写

upper 转大写

substr 取子串 substr(<strName>,<start>,<len>) 截取strName从start(1开始)开始长度为len

concat 字符串拼接 concat(<str1>,<str2>) 结果为str1+str2

length 取长度

trim 去除前后的空白

str_to_date 将varchar字符串转换成日期date

date_format 将日期date转化为varchar字符串

format 数字格式化

round 四舍五入 round(<num>,<n>) 将num四舍五入保留小数点后n(可以为负数)位

rand() 生成随机数

ifnull 可以将null转换为具体值 ifnull(<field>,<value>) 如果field为null则当作值value

now() 可以获取当前时间

多行处理函数(group by 分组)(默认所有为一组):

count 计数(忽略null) count(<field>) 统计field不为null的行数 count(*) 统计总行数

sum 求和

avg 求平均

max 求最大值

min 求最小值

注意:分组函数不能放在where子句里面

select version(); 查看当前MySQL的版本

\c 可以终止sql的输入

source path 导入path路径的数据

mysqldump <databaseName> <path> 把库databaseName导出为sql脚本文件到path目录下

执行顺序 from-where-group by-having-select-order by-limit

case when then 语句 case <field> when <v1> then <opt1> when <v2> then <opt2> else <opt3> end

distinct 查询结果去重 select distinct <field1>,<field2> from <tableName> 联合去重

distinct 只能在所有查询字段最前面

union:结果集合并注意:结果集合并时两个语句的列要相等

limit:将查询结果一部分取出来,分页查询 limit<n> 取查询结果的前n个 limit <start>,<len> 取start(0开始)开始的n个

笛卡儿积:表连接查询是没加条件查询的结果条数是所有表的积。避免:加条件查询。

create table <tableName> as <opt> 将opt的查询结果新建应该tableName表

unique约束字段自动添加索引

上一篇 下一篇

猜你喜欢

热点阅读