MySQL SQL语句

80 阅读8分钟

//数据库用户创建

//语法:CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

//创建数据库用户hhr

mysql> CREATE USER 'hhr'@'127.0.0.1' IDENTIFIED BY 'hhr123!';

Query OK, 0 rows affected (0.00 sec)

//刷新授权表

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.006 sec)

//使用新创建的用户和密码登录

[root@localhost ~]# mysql -uhhr -phhr123! -h127.0.0.1

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

//删除数据库用户

//语法:DROP USER 'username'@'host';

//删除数据库用户hhr

mysql> DROP USER 'hhr'@'127.0.0.1';

Query OK, 0 rows affected (0.00 sec)

//刷新授权表

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.006 sec)

1.4 查看命令SHOW

mysql> SHOW CHARACTER SET; //查看支持的所有字符集

+----------+---------------------------------+---------------------+--------+

| Charset | Description | Default collation | Maxlen |

+----------+---------------------------------+---------------------+--------+

| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |

| dec8 | DEC West European | dec8_swedish_ci | 1 |

| cp850 | DOS West European | cp850_general_ci | 1 |

| hp8 | HP West European | hp8_english_ci | 1 |

| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |

| latin1 | cp1252 West European | latin1_swedish_ci | 1 |

......

......

mysql> SHOW VARIABLES LIKE '%char%'; //查看数据库的字符编码

.....

.....

mysql> SELECT CHARSET(email) FROM tbtest; //查看某表中某字段使用的字符编码

.....

.....

mysql> SHOW ENGINES; //查看当前数据库支持的所有存储引擎

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment

| Transactions | XA | Savepoints |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| InnoDB | DEFAULT | Supports transactions, row-level locking, and

foreign keys | YES | YES | YES |

| MRG_MYISAM | YES | Collection of identical MyISAM tables

| NO | NO | NO |

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |

| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |

| MyISAM | YES | MyISAM storage engine | NO | NO | NO |

| CSV | YES | CSV storage engine | NO | NO | NO |

| ARCHIVE | YES | Archive storage engine | NO | NO | NO |

| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |

| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

9 rows in set (0.00 sec)

mysql> SHOW DATABASES; //查看数据库信息

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| hhr |

+--------------------+

5 rows in set (0.00 sec)

mysql> SHOW TABLES FROM hhr; //不进入某数据库而列出其包含的所有表

+----------------------+

| Tables_in_hhr |

+----------------------+

| hhrtable |

+----------------------+

1 row in set (0.00 sec)

//查看表结构

//语法:DESC [db_name.]table_name;

mysql> DESC hhr.hhrtable;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| name | varchar(100) | NO | | NULL | |

| age | tinyint(4) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

3 rows in set (0.03 sec)

//查看某表的创建命令,可以看到创建表时设置的参数

//语法:SHOW CREATE TABLE table_name;

mysql> SHOW CREATE TABLE hhr.hhrtable;

+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+

| hhrtable | CREATE TABLE hhr (

id int(11) NOT NULL,

name varchar(100) NOT NULL,

age tinyint(4) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

//查看某表的状态

//语法:SHOW TABLE STATUS LIKE 'table_name'\G

mysql> use hhr; //进入数据库hhr

Database changed

mysql> SHOW TABLE STATUS LIKE 'hhrtable'\G //查看hhrtable表的状态

*************************** 1. row ***************************

Name: hhrtable

Engine: InnoDB

Version: 10

Row_format: Dynamic

Rows: 0

Avg_row_length: 0

Data_length: 16384

Max_data_length: 0

Index_length: 0

Data_free: 0

Auto_increment: NULL

Create_time: 2018-08-13 00:53:21

Update_time: NULL

Check_time: NULL

Collation: latin1_swedish_ci

Checksum: NULL

Create_options:

Comment:

1 row in set (0.00 sec)

1.5 ALTER修改操作

//修改数据库属性

//语法:ALTER DATABASE 'DB_NAME' CHARACTER SET charset_name | COLLATE collation_name

//修改数据库字符集为utf8

mysql> ALTER DATABASE hhr CHARACTER SET utf8;

Query OK, 1 row affected (0.000 sec)

//修改表

//语法:ALTER TABLE <table_name> [option]

//给hhrtable表添加新的一列,先查看表结构

mysql> DESC hhrtable;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(7) | NO | | NULL | |

| name | varchar(20) | NO | | NULL | |

| age | tinyint(4) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

3 rows in set (0.001 sec)

//给hhrtable表添加一列'phone'

mysql> ALTER TABLE hhrtable ADD phone int(11);

Query OK, 0 rows affected (0.001 sec)

Records: 0 Duplicates: 0 Warnings: 0

//查看表结构

mysql> DESC hhrtable;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(7) | NO | | NULL | |

| name | varchar(20) | NO | | NULL | |

| age | tinyint(4) | YES | | NULL | |

| phone | int(11) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

4 rows in set (0.000 sec)

//修改hhrtable表中'phone'列为'sex'

mysql> ALTER TABLE hhrtable CHANGE phone sex varchar(4);

Query OK, 0 rows affected (0.005 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> DESC hhrtable;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(7) | NO | | NULL | |

| name | varchar(20) | NO | | NULL | |

| age | tinyint(4) | YES | | NULL | |

| sex | varchar(4) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

4 rows in set (0.001 sec)

//修改表名为rhhtable

mysql> ALTER TABLE hhrtable RENAME TO rhhtable;

Query OK, 0 rows affected (0.002 sec)

mysql> SHOW TABLES;

+---------------+

| Tables_in_hhr |

+---------------+

| rhhtable |

+---------------+

1 row in set (0.000 sec)

//修改数据库字符编码

mysql> ALTER DATABASE dbtest CHARACTER SET utf8 COLLATE utf8_general_ci;

//修改表字符编码

mysql> ALTER TABLE tbtest CHARACTER SET utf8 COLLATE utf8_general_ci;

1.6 获取帮助

//获取命令使用帮助

//语法:HELP commond;

mysql> HELP CREATE TABLE; //获取创建表的帮助

Name: 'CREATE TABLE'

Description:

Syntax:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

(create_definition,...)

[table_options]

[partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

[(create_definition,...)]

[table_options]

[partition_options]

[IGNORE | REPLACE]

[AS] query_expression

......

......

2、DML操作


DML操作包括增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT),均属针对表的操作。

2.1 INSERT语句

//DML操作之增操作insert

//语法:INSERT [INTO] table_name [(column_name,...)] {VALUES | VALUE} (value1,...),(...),...

mysql> use hhr;

Database changed

//一次插入一条记录

mysql> INSERT INTO hhrtable (id,name,age) VALUE (1,'tom',20);

Query OK, 1 row affected (0.01 sec)

//一次插入多条记录

mysql> INSERT INTO hhrtable (id,name,age) VALUES (2,'jerry',23),(3,'hhr',25),(4,'sean',28),(5,'zhangshan',26),(6,'zhangshan',20),(7,'lisi',NULL);

Query OK, 4 rows affected (0.01 sec)

Records: 4 Duplicates: 0 Warnings: 0

2.2 SELECT语句

字段column表示法:

| 表示符 | 含义 |

| :-- | :-- |

| * | 所有字段 |

| as | 字段别名,如col1 AS alias1 当表名很长时用别名代替 |

条件判断语句WHERE:

| 操作类型 | 常用操作符 |

| :-- | :-- |

| 操作符 | >,<,>=,<=,=,!= BETWEEN column# AND column# LIKE:模糊匹配 RLIKE:基于正则表达式进行模式匹配 IS NOT NULL:非空 IS NULL:空 |

| 条件逻辑操作 | AND OR NOT |

ORDER BY:排序,默认为升序(ASC):

| ORDER BY语句 | 含义 |

| :-- | :-- |

| ORDER BY ‘column_name’ | 根据column_name进行升序排序 |

| ORDER BY ‘column_name’ DESC | 根据column_name进行降序排序 |

| ORDER BY ’column_name’ LIMIT 2 | 根据column_name进行升序排序并只取前2个结果 |

| ORDER BY ‘column_name’ LIMIT 1,2 | 根据column_name进行升序排序并且略过第1个结果取后面的2个结果 |

//DML操作之查操作select

//语法:SELECT column1,column2,... FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];

mysql> use hhr;

Database changed

mysql> select * from hhrtable;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 6 | zhangshan | 20 |

| 7 | lisi | NULL |

+----+-----------+------+

7 rows in set (0.00 sec)

mysql> SELECT name FROM hhrtable;

+-----------+

| name |

+-----------+

| tom |

| jerry |

| hhr |

| sean |

| zhangshan |

| zhangshan |

| lisi |

+-----------+

7 rows in set (0.01 sec)

mysql> SELECT * FROM hhrtable ORDER BY age;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 7 | lisi | NULL |

| 1 | tom | 20 |

| 6 | zhangshan | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 5 | zhangshan | 26 |

| 4 | sean | 28 |

+----+-----------+------+

7 rows in set (0.00 sec)

mysql> SELECT * FROM hhrtable ORDER BY age DESC;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 3 | hhr | 25 |

| 2 | jerry | 23 |

| 1 | tom | 20 |

| 6 | zhangshan | 20 |

| 7 | lisi | NULL |

+----+-----------+------+

7 rows in set (0.00 sec)

mysql> SELECT * FROM hhrtable ORDER BY age limit 2;

+----+------+------+

| id | name | age |

+----+------+------+

| 7 | lisi | NULL |

| 1 | tom | 20 |

+----+------+------+

2 rows in set (0.00 sec)

mysql> SELECT * FROM hhrtable ORDER BY age limit 1,2;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 6 | zhangshan | 20 |

+----+-----------+------+

2 rows in set (0.00 sec)

mysql> SELECT * FROM hhrtable WHERE age >= 25;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

+----+-----------+------+

3 rows in set (0.00 sec)

mysql> SELECT * FROM hhrtable WHERE age >= 25 AND name = 'zhangshan';

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 5 | zhangshan | 26 |

+----+-----------+------+

1 row in set (0.00 sec)

mysql> SELECT * FROM hhrtable WHERE age BETWEEN 23 and 28;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

+----+-----------+------+

4 rows in set (0.00 sec)

mysql> select * from hhrtable where age is not null;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 6 | zhangshan | 20 |

+----+-----------+------+

6 rows in set (0.00 sec)

mysql> select * from hhrtable where age is null;

+----+------+------+

| id | name | age |

+----+------+------+

| 7 | lisi | NULL |

+----+------+------+

1 row in set (0.00 sec)

2.2 update语句

//DML操作之改操作update

//语法:UPDATE table_name SET column1 = new_value1[,column2 = new_value2,...] [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];

mysql> select * from hhrtable;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 6 | zhangshan | 20 |

| 7 | lisi | NULL |

+----+-----------+------+

7 rows in set (0.00 sec)

mysql> update hhrtable set age = 30 where name = 'lisi';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from hhrtable where name = 'lisi';

+----+------+------+

| id | name | age |

+----+------+------+

| 7 | lisi | 30 |

+----+------+------+

1 row in set (0.00 sec)

2.4 delete语句

//DML操作之删操作delete

//语法:DELETE FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];

mysql> select * from hhrtable;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 6 | zhangshan | 20 |

| 7 | lisi | 30 |

+----+-----------+------+

7 rows in set (0.00 sec)

mysql> delete from hhrtable where id = 7; //删除某条记录

Query OK, 1 row affected (0.00 sec)

mysql> select * from hhrtable;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 6 | zhangshan | 20 |

+----+-----------+------+

6 rows in set (0.00 sec)

mysql> delete from hhrtable; //删除整张表的内容

Query OK, 6 rows affected (0.00 sec)

mysql> select * from hhrtable;

Empty set (0.00 sec)

mysql> desc hhrtable;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| name | varchar(100) | NO | | NULL | |

| age | tinyint(4) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

2.5 truncate语句

truncate与delete的区别:

| 语句类型 | 特点 |

| :-- | :-- |

| delete | DELETE删除表内容时仅删除内容,但会保留表结构 DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项 可以通过回滚事务日志恢复数据 非常占用空间 |

| truncate | 删除表中所有数据,且无法恢复 表结构、约束和索引等保持不变,新添加的行计数值重置为初始值 执行速度比DELETE快,且使用的系统和事务日志资源少 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放 对于有外键约束引用的表,不能使用TRUNCATE TABLE删除数据 不能用于加入了索引视图的表 |

//语法:TRUNCATE table_name;

mysql> select * from hhrtable;

+----+-----------+------+

| id | name | age |

+----+-----------+------+

| 1 | tom | 20 |

| 2 | jerry | 23 |

| 3 | hhr | 25 |

| 4 | sean | 28 |

| 5 | zhangshan | 26 |

| 6 | zhangshan | 20 |

| 7 | lisi | NULL |

+----+-----------+------+

7 rows in set (0.00 sec)

mysql> truncate hhrtable;

Query OK, 0 rows affected (0.01 sec)

mysql> select * from hhrtable;

Empty set (0.00 sec)

mysql> desc hhrtable;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| name | varchar(100) | NO | | NULL | |

| age | tinyint(4) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

3、DCL操作


3.1 创建授权grant

权限类型(priv_type)

| 权限类型 | 含义 |

| :-- | :-- |

| ALL | 所有权限 |

| SELECT | 读取内容的权限 |

| INSERT | 插入内容的权限 |

| UPDATE | 更新内容的权限 |

| DELETE | 删除内容的权限 |

| … | … |

指定要操作的对象db_name.table_name

| 表示方式 | 含义 |

| :-- | :-- |

| . | 所有库的所有表 |

| db_name | 指定库的所有表 |

| db_name.table_name | 指定库的指定表 |

WITH GRANT OPTION:被授权的用户可将自己的权限副本转赠给其他用户,说白点就是将自己的权限完全复制给另一个用户。不建议使用。

//语法:GRANT priv_type,... ON [object_type] db_name.table_name TO ‘username'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| hhr |

+--------------------+

5 rows in set (0.00 sec)

//授权hhr用户在数据库本机上登录访问所有数据库

mysql> GRANT ALL ON . TO 'hhr'@'localhost' IDENTIFIED BY 'hhr123!';

Query OK, 0 rows affected, 1 warning (0.00 sec)

//也可表示为:

mysql> GRANT ALL ON . TO 'hhr'@'127.0.0.1' IDENTIFIED BY 'hhr123!';

Query OK, 0 rows affected, 1 warning (0.00 sec)

//授权hhr用户在192.168.129.33上远程登录访问hhr数据库

mysql> GRANT ALL ON hhr.* TO 'hhr'@'192.168.129.33' IDENTIFIED BY 'hhr123!';

Query OK, 0 rows affected, 1 warning (0.00 sec)

//授权hhr用户在所有位置上远程登录访问hhr数据库

mysql> GRANT ALL ON hhr.* TO 'hhr'@'%' IDENTIFIED BY 'hhr123!';

Query OK, 0 rows affected, 1 warning (0.00 sec)

//刷新授权表

mysql> FLUSH PRIVILEGES;

3.2 查看授权

//查看当前登录用户的授权信息

mysql> SHOW GRANTS;

+---------------------------------------------------------------------+

| Grants for root@localhost |

+---------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION |

| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |

+---------------------------------------------------------------------+

2 rows in set (0.00 sec)

//查看指定用户hhr的授权信息

mysql> SHOW GRANTS FORM 'hhr'@'localhost';

+-------------------------------------------------------+

| Grants for hhr@localhost |

+-------------------------------------------------------+

| GRANT ALL PRIVILEGES ON . TO 'hhr'@'localhost' |

+-------------------------------------------------------+

1 row in set (0.00 sec)

mysql> SHOW GRANTS FORM 'hhr'@'127.0.0.1';