MySQL语句与指令

注:sql语句不区分大小写,多条sql语句用分号( ; )分隔。

       以下columnName代表列名,tableName代表表名。

 

命令

基本

1、mysql -u用户名 -p     mysql登录-u为用户名 -p为密码

2、use 数据库名; 使用某个数据库。

3、show table; 展示此数据库中所有的表;

4、desc 表名;  查看此表的表结构;

 新建用户

1、查看现有用户

mysql> select host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host      | user             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A                              |
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.01 sec)

2、新建用户

格式:create user "username"@"host" identified by "password";

样例:create user 'test'@'localhost' identified by '123';

create user 'test'@'192.168.7.22' identified by '123';

create user 'test'@'%' identified by '123';

注:host="localhost"为本地登录用户,host="ip"为ip地址登录,host="%",为外网ip登录

mysql> create user 'zcq'@'localhost' identified by '15284377';
Query OK, 0 rows affected (0.03 sec)

mysql> select host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host      | user             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A                              |
| localhost | zcq              | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A                              |
+-----------+------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

3、删除用户

格式:drop user 'username'@'host';

注:host="localhost"为本地登录用户,host="ip"为ip地址登录,host="%",为外网ip登录

mysql> drop user 'zcq'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> select host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host      | user             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A                              |
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

4、授权

格式:grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';

(1). GRANT命令说明:
        priveleges(权限列表),可以是all priveleges, 表示所有权限,也可以是select、update等权限,多个权限的名词,相互之间用逗号分开。

        on用来指定权限针对哪些库和表。

      *.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。

         to 表示将权限赋予某个用户, 如 jack@'localhost' 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

         identified by指定用户的登录密码,该项可以省略。

         WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。

              备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。

(2).授权原则说明:

    权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

       a、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。

       b、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

       c、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

       d、为每个用户设置满足密码复杂度的密码。

       e、定期清理不需要的用户。回收权限或者删除用户。

  /*授予用户通过外网IP对于该数据库的全部权限*/

  grant all privileges on `test`.* to 'test'@'%' ;

  /*授予用户在本地服务器对该数据库的全部权限*/

  grant all privileges on `test`.* to 'test'@'localhost';   

   grant select on test.* to 'user1'@'localhost';  /*给予查询权限*/

   grant insert on test.* to 'user1'@'localhost'; /*添加插入权限*/

   grant delete on test.* to 'user1'@'localhost'; /*添加删除权限*/

   grant update on test.* to 'user1'@'localhost'; /*添加权限*/

  flush privileges; /*刷新权限*/

5、查看权限

show grants;
//查看某个用户权限
show grants for 'jack'@'%';
mysql> show grants for 'zcq'@'localhost';
+-----------------------------------------------+
| Grants for zcq@localhost                      |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO `zcq`@`localhost`       |
| GRANT SELECT ON `test`.* TO `zcq`@`localhost` |
+-----------------------------------------------+
2 rows in set (0.00 sec)

6、删除权限

revoke privileges on databasename.tablename from 'username'@'host';

例:

(1)//删除此用户在test_db表中所有权限

  revoke all on test_db.* from 'test_user'@'localhost';

(2)//删除用户指定(select)权限

  revoke select on test.* from 'cxn'@'localhost';

mysql> show grants for 'cxn'@'localhost';
+-----------------------------------------------+
| Grants for cxn@localhost                      |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO `cxn`@`localhost`       |
| GRANT SELECT ON `test`.* TO `cxn`@`localhost` |
+-----------------------------------------------+
2 rows in set (0.00 sec)

mysql> revoke select on test.* from 'cxn'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'cxn'@'localhost';
+-----------------------------------------+
| Grants for cxn@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO `cxn`@`localhost` |
+-----------------------------------------+
1 row in set (0.00 sec)

 

7、更改用户名

rename user 'jack'@'%' to 'jim'@'%';

mysql> rename user 'zcq'@'localhost' to 'cxn'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'zcq'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'zcq' on host 'localhost'
mysql> select host,user,authentication_string from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host      | user             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | cxn              | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A                              |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A                              |
+-----------+------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

8、修改密码

(1).用update直接编辑user表

update mysql.user set authentication_string=password("new password") where User="username" and Host="localhost"; 

9、查看用户

select * from mysql.user where user='用户名';
mysql> select * from mysql.user where user='cxn';
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------------------+--------------------------+----------------------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+------------------+----------------+------------------------+---------------------+--------------------------+-----------------+
| Host      | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher             | x509_issuer              | x509_subject               | max_questions | max_updates | max_connections | max_user_connections | plugin                | authentication_string                     | password_expired | password_last_changed | password_lifetime | account_locked | Create_role_priv | Drop_role_priv | Password_reuse_history | Password_reuse_time | Password_require_current | User_attributes |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------------------+--------------------------+----------------------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+------------------+----------------+------------------------+---------------------+--------------------------+-----------------+
| localhost | cxn  | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          | 0x                     | 0x                       | 0x                         |             0 |           0 |               0 |                    0 | mysql_native_password | *5CAC74FFF456F77AF6F4B5F45014B01048925F1A | N                | 2020-06-16 10:07:17   |              NULL | N              | N                | N              |                   NULL |                NULL | NULL                     | NULL            |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------------------+--------------------------+----------------------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+------------------+----------------+------------------------+---------------------+--------------------------+-----------------+
1 row in set (0.00 sec)

10、刷新权限

flush privileges;

11、导出权限配置

mysql导出数据需要两个方面的权限,系统权限file,即使你是all privieges 权限,也要单独给一个file权限,否则你是导出不了数据的

(1)、file 权限,次权限是全局的,不能针对某个数据库

grant file  on  *.* to zabbix@'72.7.99.133';

(2)、文件系统安全

show variables like 'secure_file_priv';

secure_file_priv=NULL  没有导出权限

secure_file_priv=/data/tmpfile   只能在制定路径导出数据

secure_file_priv=''   可以在任意路径导出数据

修改配置可修改mysql配置文件,查看是否有

vi my.cnf   添加

secure_file_priv = ''

表示不限制目录,等号一定要有,修改完配置文件后,重启mysql生效

此参数是静态参数,必须重启数据库

语句

查询

5、SELECT * FROM tableName; 查看从此表中的所有数据。

6、SELECT columnName1,columnName2 FROM tableName;   从此表中查看指定列的数据。

7、SELECT DISTINCT columnName FROM tableName;  从此表中查看指定列的不同值的数据。      

      注:DISTINCT关键字指示数据库返回不同的值。DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。

8、SELECT columnName FROM tableName ORDER BY columnName  DESC; 查看此表中指定列数据并按照指定列来进行排序。 其中DESC为降序,ASC为升序,如果不写默认升序。

9、WHERE条件子句

 WHERE子句操作符
 操作符        说明      操作符    说明       
= 等于  >  大于
!=     不等于     >=       大于等于   
<   小于  <= 小于等于
BETWEEN 在两个指定值之间 IS  NULL 为NULL值
IS NOTNULL  不为NULL值 NOT  否定后边条件 

 

    例:SELECT * FROM tableName WHERE columnName = “xxxxx”;

           SELECT * FROM tableName WHERE columnName > 10;

           SELECT * FROM tableName WHERE columnName IS NULL;

           SELECT * FROM tableName WHERE columnName BETWEEN 5 AND 10;

           SELECT * FROM tableName WHERE columnName NOT BETWEEN 5 AND 10;

    注:多个筛选条件可以用AND和OR来进行连接,SQL在处理OR时会优先处理AND,注意用( )来进行限制。

 

10、IN操作符

       IN操作符用来指定条件范围,范围中每个条件都可以进行匹配。

       SELECT * FROM tableName WHERE columnName IN (“xxxxx”,”xxxxx”);

11、通配符

       使用LIKE操作符加上通配符可以实现模糊搜索。

       %通配符,表示任意字符出现任意次数,%不会匹配到NULL值。

       SELECT * FROM tableName WHERE columnName LIKE “%xxx%”;

       _通配符,用途和%一样,但是只能匹配到单个字符,并非多个

       SELECT * FROM tableName WHERE columnName LIKE “_xxx”;

       [ ]通配符,用来指定一个字符集,它必须匹配指定位置的一个字符

       SELECT * FROM tableName WHERE columnName LIKE “[XX]”;

12、字符串拼接

      SELECT CONCAT( columnName1,“(”,columnName2,“)”) FROM tableName;、

      注:CONCAT将方法内的所有字符串进行拼接。

13、算数计算

      SQL支持进行加减乘除的计算

      SELECT columnName1,columnName2,columnName1*columnName2 AS columnName3 FROM tableName; 

      注:AS为别名

14、文本处理函数

                     常用文本处理函数

      函数名                    说明

     LEFT()      返回字符串左边的字符  

           LENGTH()        返回字符串的长度  

            LOWER()      将字符串转换为小写

            LTRIM()       去掉字符串左边的空格  

            RTRIM()       去掉字符串右边的空格

      TRIM()       去掉字符串左右两边的空格

            RIGHT()       返回字符串右边的字符      

           UPPER()        将字符串转换为大写    

      例:SELECT UPPER(columnName1),LOWER(columnName2) FROM tableName; 

15、日期与时间的处理函数

      SELECT * FROM tableName WHERE YEAR( columnDate) = ‘2019’;

16、聚集函数

                SQL聚集函数

               函数              说明

               AVG()         返回某列的平均值

       COUNT()            返回某列的行数     

           MAX()         返回某列的最大值   

         MIN()          返回某列的最小值    

           SUM()             返回某列之和    

     例:SELECT AVG(columnName1)AS columnName2 FROM tableName;

     注:MAX()、MIN()、SUM()忽略列值为NULL的行。

17、SELECT COUNT(*) FROM tableName;  对表中行的数目进行计数,不管列中包含的是空值NULL还是非空值

        SELECT COUNT(columnName) FROM tableName;  对指定列中有值的行进行计数。

18、DISTINCT不能用于COUNT( * ),但是能用于MAX()和MIN()。

        SELECT MIN(DISTINCT  columnName1)AS columnName2 FROM tableName;

19、SELECT * FROM tableName  GROUP  BY  columnName;  创建分组进行查询

20、SELECT * FROM tableName  GROUP  BY  columnName1  HAVING columnName2=‘xx’;  通过HAVING进行分组过滤来查询。WHERE过滤指定的行不是分组,因此需要用HAVING。

21、SELECT子句顺序

              SELECT子句及其顺序

      子句           说明                 是否必须使用

          SELECT       要返回的列或表达式             是 

            FROM         从中检索数据的表       仅在从表选择数据时使用 

          WHERE        行级过滤                          否  

        GROUP  BY              分组说明          仅在按钮计算聚集时使用

          HAVING        组级过滤                  否  

        ORDER  BY           输出排序顺序                  否     

22、子查询

        例:SELECT * FROM tableName1 WHERE  columnName = (SELECT columnName FROM tableName2);

SELECT (SELECT columnName1 FROM tableName1 )AS columnName2,columnName3 FROM  tableName2;

            可以进行多层嵌套。

23、联结表查询

SELECT  columnName1,columnName2  FROM  tableName1,tableName2  WHERE   tableName1.columnName3 = tableName2.columnName3;

            表可以定义别名

SELECT  columnName1,columnName2  FROM  tableName1 a,tableName2 b WHERE   a.columnName3 = b.columnName3;

 

24、高级联结

自联结:SELECT  columnName1,columnName2  FROM  tableName1  WHERE   tableName1.columnName3 = (SELECT  columnName3 FROM  tableName1 WHERE columnName4 = “xxx”);

内联结:SELECT  tableName1.columnName1,tableName2.columnName2  FROM  tableName1 INNER JOIN tableName2  ON  tableName1.columnName3 = tableName2.columnName3;

外联结:SELECT  tableName1.columnName1,tableName2.columnName2  FROM  tableName1 RIGHT OUTER JOIN tableName2  ON  tableName1.columnName3 = tableName2.columnName3;

注:在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表。

25、组合查询

可以用UNION操作符来组合数条SQL查询。UNION从查询结果集中自动去除了重复行。如果要返回所有匹配行,可使用UNION ALL。在用UNION组合查询时,只能使用一条ORDER BY子句,它必须位于最后一条SELECT语句后。

例:SELECT columnName1,columnName2 FROM tableName WHERE columnName1 IN (“xxxxx”,”xxxxx”)

      UNION

      SELECT columnName1,columnName2 FROM tableName WHERE columnName2 =“xxxx”

      ORDER BY columnName3 desc;

 

 

插入

1、插入数据

     INSERT  INTO  tableName(columnName1,columnName2,columnName3)VALUES (“xxxx”,“xxxx”,“xxxx”);

2、插入检索出的数据

     INSERT  INTO  tableName1(columnName1,columnName2,columnName3)SELECT  columnName1,columnName2,columnName3 FROM  tableName2;

3、从一个表复制到另一个表

      SELECT * INTO tableName FROM tableName2;

 

 

更新

UPDATE tableName  SET columnName1 = ‘xxx’,columnName2=‘xxx’ WHERE columnName3 = ‘xxx’;

 

删除列

DELETE FROM tableName WHERE columnName = “xxx”;

 

创建

 1、创建表

CREATE TABLE tableName

(

      columnName1 INTEGER   NOT NULL   DEFAULT ‘1’ COMMENT ‘xxx’,

      columnName2      CHAR(20)    NOT NULL   DEFAULT NULL COMMENT ‘xxx’,

      columnName3      DECIMAL(8,2)    NOT NULL   DEFAULT NULL COMMENT ‘xxx’,

      columnName4 TIMESTAMP    NOT NULL    DEFAULT  CURRENT_ TIMESTAMP   COMMENT ‘xxx’,

      columnName5 TIMESTAMP    NOT NULL    DEFAULT  CURRENT_ TIMESTAMP  ON  UPDATE TIMESTAMP  COMMENT ‘xxx’,

      PRIMARY  KEY(columnName1)

);

 

注:DEFAULT为默认值   COMMENT为备注   CURRENT_ TIMESTAMP为当时的时间戳   CURRENT_ TIMESTAMP  ON  UPDATE TIMESTAMP为每次更新此行数据都默认更改为当时时间。

 

2、更新表

添加列

ALERT   TABLE  tableName   ADD   columnName  CHAR(20)    NOT NULL   DEFAULT NULL COMMENT ‘xxx’;

移除列

ALERT   TABLE  tableName   DROP  COLUMN  columnName;

 

删除表

 DROP  TABLE   tableName;

 

索引

 CREATE  INDEX  indexName  ON    tableName  columnName;

posted on 2019-01-17 16:27  CCConcerning  阅读(214)  评论(0)    收藏  举报