欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql的命令总结

程序员文章站 2022-06-03 09:31:49
Mysql常用命令 启动 net start mysql 关闭 net stop mysql 连接mysql mysql uroot ppssword mysql uroot P3307 ppssword 修改密码 mysqladmin uroot p123456 password 123 增加用户 ......

mysql常用命令

启动

net start mysql

关闭

net stop mysql

连接mysql

mysql -uroot -ppssword
mysql -uroot -p3307 -ppssword

修改密码

mysqladmin -uroot - p123456 password 123

增加用户

create user 'lisi'@'%' identified by '123456'

用户授权

grant select,insert on test.user to 'lisi'@'%'

授予李四查询和插入的权限,生效范围是test数据库下的user表。需要注意的是如果不对用户授权,用户都可能无法登陆。

设置用户密码

set password for 'lisi'@'%' = password('lisi')

设置lisi的用户密码为lisi

删除用户

drop user 'lisi'@'%'

新建数据库

create database db_name

显示数据库

show databases

删除数据库

drop database db_name

使用数据库

use db_name

查询mysql的版本好

select version()

查询系统时间

select now()

新建表

create table table_name(
    id int primary key auto_increment,
    name varchar(50) not null
);

插入表

insert into table_name values (value1,value2),(value1,value2);

可以一次性插入多个值,需要注意的是值必须与属性列一一对应

查询表

select *  from table_name

删除数据

delete from table_name where 列名=value;

修改数据

update table_name set  列名1=value1 where 列名2=value2;

增加字段

alter table table_name add 属性列 类型 约束

删除字段

alter table table_name drop column_name

新建主键索引

alter table table_name add primary key(id)

新建普通索引

alter table table_name add index 索引的名字 (属性列)

索引的名字一般是  表名_属性名

新建唯一索引

alter table table_name add unique 索引的名字 (属性列)

删除索引

alter table table_name drop index 索引名

导出数据库

mysqldump -uroot -ppassword 数据库的名字 > 导出路径\表名.sql

导出表

mysqldump -uroot -ppassword 数据库的名字 表名 > 导出路径\表名.sql

数据库还原

mysql -uroot -ppassword 库名 < sql所在的路径

查看引擎

show engines;
show variables like '%storage_engine%';

必知必会

1. show相关
    1. show databases : 返回可用的数据库列表
    2. show tables : 返回当前选择的数据内可用表的列表
    3. show columns from tab_name : 返回表的所有字段
    4. describe tab_name : 同上
    5. show status : 显示广泛的服务器状态信息
    6. show create database/table : 显示创建特定数据库或表的mysql语句
    7. show errors/warnings : 显示服务器错误或警告信息
    8. help show : 显示允许的show语句
2. 查询相关
    1. select distinct col_name from tab_name : 查询不同的值,也就是去重
    2. select col_name from tab_name limit start_index, rows : 限制查询结果(一般用于分页查询),后面的参数代表开始索引和查询的行数
    3. select col_names from tab_name order by col_names : 默认是升序排序,可以使用desc来改变排序规则,也可以指定多个列来进行排序(可以使用非查询列来进行排序)
    4. select col_names from tab_name where 条件 : 过滤查询
        1. where子句的操作符
            1. = : 等于
            2. <> : 不等于
            3. != : 不等于
            4. < : 小于
            5. <= : 小于等于
            6. > : 大于
            7. >= : 大于等于
            8. between 1 and 2 : 在指定的两个值之间
    5. null的判断 : 使用 is null进行判断(注意null与0,空字符串,仅仅包含空格是不相同的)
    6. 多个条件同时匹配中间用and连接,匹配任一条件中间用or连接,二者并存的时候需要考虑次序问题,一定要加上括号,避免产生歧义
    7. select col_names from tab_name where col_name in (1,2) : 表示或1或2都可以,也就是or的简单写法  
    8. not的使用,not in找出与条件列表不匹配的行
    9. like,%,_的使用,like表示模糊查询,%表示匹配任意字符出现任意次数(包括0个字符),_匹配任意的单个字符
        1. 不要过度使用通配符,通配符会消耗很大的内存,花费时间更长.

3. 正则相关
    1. 正则与like的区别
        1. like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它,相应的行也不会返回
        2. regexp在列值内匹配,如果被匹配的文本在列值中出现,regexp将会找到它,相应的行被返回
        3. 例子:
            1. select prod_name from products where prod_name like '1000';
            2. select prod_name from products where prod_name regexp '1000'
            3. 上面两个sql语句查询结果是不相同,如果数据库中在prod_name为1000的行
    2. 点的使用,mysql中的.是一个特殊字符,表示匹配任意一个字符.
        1. select prod_name from products where prod_name regexp '.000';
        2. select prod_name from products where prod_name like '%000%'; 
        3. 上面两个sql的查询结果是相同的.
    3. 正则表达式or的匹配的多种写法
        1. select prod_name from products where prod_name regexp '1000|2000';  /*匹配其中之一*/
        2. elect prod_name from products where prod_name regexp '[123] ton';  /*匹配几个字符之一*/
        3. select prod_name from products where prod_name regexp '[1-5] ton';  /*匹配范围,匹配1到5之间的任意数字 + ton*/
    4. 匹配特殊字符,也就是匹配.等等
        1. 使用转义字符,一般正则表达式的转义字符是 \,但是在mysql中要求两个,也就是\\,一个是mysql解释,一个是正则表达式解释
            1. select prod_name from products where prod_name regexp '\\.';/*匹配特殊字符需要使用转义字符,比如说:\\.匹配.     \\-匹配-    \\\匹配\  */ 
    5. 字符类(使用过程中注意的是要使用[]进行包裹,也就是使用两个中括号才可以正确匹配,即[[:digit:]]):
    <table>
        <tr>
            <th>类</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>[:alnum:]</td>
            <td>任意子母和数字(同[a-za-z0-9])</td>
        </tr>
        <tr>
            <td>[:alpha:]</td>
            <td>任意字符(同[a-za-z])</td>
        </tr>
        <tr>
            <td>[:blank:]</td>
            <td>空格和制表符(同[\\t])</td>
        </tr><tr>
            <td>[:cntrl:]</td>
            <td>ascii控制字符(ascii0到31和127)</td>
        </tr><tr>
            <td>[:digit:]</td>
            <td>任意数字(同[0-9])</td>
        </tr><tr>
            <td>[:graph:]</td>
            <td>与[:print:]相同,但不包括空格</td>
        </tr><tr>
            <td>[:lower:]</td>
            <td>任意小写子母(同[a-z])</td>
        </tr><tr>
            <td>[:print:]</td>
            <td>任意可打印字符</td>
        </tr><tr>
            <td>[:punct:]</td>
            <td>既不在[:alnum:]又不在[:cntrl:]中的任意字符</td>
        </tr><tr>
            <td>[:space:]</td>
            <td>包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])</td>
        </tr><tr>
            <td>[:upper:]</td>
            <td>任意大写子母(同[a-z])</td>
        </tr>
        <tr>
            <td>[:xdigit:]</td>
            <td>任意十六进制数字(同[a-fa-f0-9])</td>
        </tr>
    </table>    
    5. 重复元字符
     <table>
        <tr>
            <th>元字符</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>*</td>
            <td>0个或多个匹配</td>
        </tr>
        <tr>
            <td>+</td>
            <td>一个或多个匹配(等于{1,})</td>
        </tr>
        <tr>
            <td>?</td>
            <td>0个或一个匹配(等于{0,1})</td>
        </tr><tr>
            <td>{n}</td>
            <td>指定数目的匹配</td>
        </tr><tr>
            <td>{n,}</td>
            <td>不少于指定数目的匹配</td>
        </tr><tr>
            <td>{n,m}</td>
            <td>匹配数目的范围(m不找过255)</td>
        </tr>
    </table>    
    6. 定位符
    <table>
        <tr>
            <th>元字符</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>^</td>
            <td>文本的开始</td>
        </tr>
        <tr>
            <td>$</td>
            <td>文本的结束</td>
        </tr>
        <tr>
            <td>[[:<:]]</td>
            <td>词的开始</td>
        </tr><tr>
            <td>[[:>:]]</td>
            <td>词的结尾</td>
        </tr>
    </table>    
    7. 上面三种的举例:
        1. select prod_name from products where prod_name regexp '[[:digit:]]{2}';/*数字连续出现两次*/
        2. select prod_name from products where prod_name regexp '^[0-9\\.]';/*以0-9 .开始*/
        3. select prod_name from products where prod_name regexp '[0-9\\.]$'; /*以0-9 .结束*/
        4. select prod_name from products where prod_name regexp '[[:<:]]jet';/*以jet开始*/
        5. select prod_name from products where prod_name regexp '0[[:>:]]';/*以0结尾*/

4. 计算字段相关:
    1. 函数的使用
        1. concat()函数来拼接两个或多个列(其他的dbms使用+或者||来实现拼接)
            1. select concat(vend_name, ' (', vend_country ,') ') from vendors; /*各个串之间使用逗号隔开*/
        2. trim()函数:
            1. rtrim() : 去掉串右边空格
            2. ltrim() : 去掉串左边空格
            3. trim()  : 去电串两边空格
    2. 使用别名
        1. as的使用,别名用在计算字段或者不规则字段等的重命名
    3. 算数计算:
        1. mysql的算数运算符有加减乘除(+-*/)

5. 数据处理函数
    1. 文本处理函数
        1. trim() : 去掉两边空格
        2. upper() : 将文本转化为大写
        3. left() : 返回串左边的字符
        4. length() : 返回串的长度
        5. locate() : 找出串的一个子串
        6. lower() : 将串转化为小写
        7. ltrim() : 去掉串左边空格
        8. right() : 返回串右边字符
        9. rtrim() : 去掉串右边空格
        10. soundex() : 返回串的soundex值,描述其语音表示的字母数字模式的算法
            1. 简单的来说就是匹配发音相似的内容
        11. substring() : 返回子串的字符
        12. upper() : 将串转化为大写
    2. 常用日期和时间处理函数(mysql中的日期格式为yyyy-mm-dd)
        1. adddate() : 增加一个日期(天,周等)
        2. addtime() : 增加一个时间(时,分等)
        3. curdate() : 返回当前日期
        4. curtime() : 返回当前时间
        5. date() : 返回日期时间的日期部分(仅仅想要日期比较,就用date()函数)
        6. datediff() : 计算两个日期之差
        7. date_add() : 高度灵活的日期运算函数
        8. date_format() : 返回一个格式化的日期和时间串
        9. day() : 返回一个日期的天数部分
        10. dayofweek() : 对于一个日期,返回对应的星期几
        11. hour() : 返回一个时间的小时部分
        12. minute() : 返回一个时间的分钟部分
        13. month() : 返回一个日期的月份部分
        14. now() : 放回当前日期和时间
        15. second() : 返回一个时间的秒部分
        16. time() : 返回一个日期时间的时间部分
        17. year() : 返回一个日期的年份部分
    3. 数值处理函数
        1. abs() : 返回一个数的绝对值
        2. cos() : 返回一个角度的余弦
        3. exp() : 返回一个数的指数值
        4. mod() : 返回除操作的余数
        5. pi() : 返回圆周率
        6. rand() : 返回一个随机数
        7. sin() : 返回一个角度的正弦
        8. sqrt() : 返回一个数的平方根
        9. tan() : 返回一个角度的正切
    4. 日期例子:
        1. 日期的等值比较 : select cust_id, order_num from orders where date(order_date) = '2005-09-01';
        2. 日期的区间比较 : select cust_id, order_num from orders where date(order_date) between '2005-09-01' and '2005-09-30';
        3. 日期的区间比较优化 : select cust_id, order_num from orders where year(order_date) = 2005 and month(order_date) = 9;

6. 汇总数据:
    1. 聚集函数 
        1. avg() : 返回某列的平均值(忽略值为null的行)
        2. count() : 返回某列的行数
        3. max() : 返回某列的最大值(忽略值为null的行)
        4. min() : 返回某列的最小值(忽略值为null的行)
        5. sum() : 返回某列值之和(忽略值为null的行)
    2. 例子 : 
        1. 返回商品的平均价格,排除相同价格:select avg(distinct prod_price) as avg_price from products where vend_id = 1003;
        2. 返回商品的总数,商品的最大值,商品的最小值,商品的平均值:select count(*),min(prod_price) as min_price,max(prod_price) as max_price,avg(prod_price) as avg_price from products;

7. 分组数据
    1. group by 和 having
        1. group by子句不能是聚集函数和别名
        2. having是用来过滤分组的
    2. 查询子句的顺序
        1. select * from tab_name where group by .. having .. order by.. limit