MySQL复习基础语句
发布日期:2021-07-01 02:41:51 浏览次数:2 分类:技术文章

本文共 11779 字,大约阅读时间需要 39 分钟。

MySQL 语句

文章目录

MySQL语句的规范

  • 关键字、函数名,全部大写
  • 数据库名、表名、字段名称,全部小写
  • SQL语句必须以分号结尾

MySQL参数

mysql 参数 描述
-D, --database=name 打开指定数据库
–delimiter = name 指定分隔符
-h, --host=name 服务器名称
-p, --password[=name] 密码
-P, --port=# 端口
–prompt=name 设置提示符
-u, --user=name 用户名
-V, --version 输出版本信息并且退出

登录MySQL

# 第一种 服务器主机地址+不接密码mysql -h localhost -u root -p# 第二种 服务器主机地址+密码mysql -h localhost -u root -proot# 第三种 省略服务器主机地址+不接密码,默认localhostmysql -u root -p# 第四种 省略服务器主机地址+密码,默认localhostmysql -u root -proot# 第五种 一条语句完全登录,默认端口3306,默认主机IP地址localhostmysql -u[用户名] -p[密码] -P3306 -hlocalhost

退出MySQL

# 三选一mysql> exit;mysql> quit;mysql> \q;

启动/关闭MySQL服务

# 启动MySQL服务net start mysql# 关闭MySQL服务net stop mysql

查看当前用户的加密方式

USE mysql;SELECT user,plugin FROM user WHERE user='root';

修改MySQL提示符

# 未连接MySQL时,通过参数指定cmd> mysql -uroot -p[密码] --prompt# 连接上MySQL后,通过prompt命令修改prompt 提示符

MySQL提示符,

可以多个连用。其中简单的四种:

\D:完整的日期

\d:当前的数据库

\h:服务器名称

\u:当前用户

例如:"\u@\h \d>",表示“当前用户@主机 (test)”

将用户的加密方式改为mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword'; # 修改YourPassword即可FLUSH PRIVILEGES;

新建数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name;/* {}必选项 |选择项 []可选项 */

在 中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下:

CREATE DATABASE [IF NOT EXISTS] <数据库名>

[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];

[ ]中的内容是可选的。语法说明如下:

  • <数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。
  • [IF NOT EXISTS]:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。
  • [DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。
  • [DEFAULT] COLLATE:指定字符集的默认校对规则。

MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。后面我们会单独讲解 MySQL 的字符集和校对规则。

最简单的创建 MySQL 数据库的语句

在 MySQL 中创建一个名为 test_db 的数据库。在 MySQL 命令行客户端输入 SQL 语句CREATE DATABASE test_db;即可创建一个数据库,输入的 SQL 语句与执行结果如下。

mysql> CREATE DATABASE test_db;

Query OK, 1 row affected (0.12 sec);

“Query OK, 1 row affected (0.12 sec);”提示中,“Query OK”表示上面的命令执行成功,“1 row affected”表示操作只影响了数据库中一行的记录,“0.12 sec”则记录了操作执行的时间。

若再次输入CREATE DATABASE test_db;语句,则系统会给出错误提示信息,如下所示:

mysql> CREATE DATABASE test_db;

ERROR 1007 (HY000): Can’t create database ‘test_db’; database exists

提示不能创建“test_db”数据库,数据库已存在。MySQL 不允许在同一系统下创建两个相同名称的数据库。

可以加上IF NOT EXISTS从句,就可以避免类似错误,如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db;

Query OK, 1 row affected (0.12 sec)

创建 MySQL 数据库时指定字符集和校对规则

使用 MySQL 命令行工具创建一个测试数据库,命名为 test_db_char,指定其默认字符集为 utf8,默认校对规则为 utf8_chinese_ci(简体中文,不区分大小写),输入的 SQL 语句与执行结果如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db_char

-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_chinese_ci;
Query OK, 1 row affected (0.03 sec)

这时,可以使用SHOW CREATE DATABASE查看 test_db_char 数据库的定义声明,发现该数据库的指定字符集为 utf8,运行结果如下所示:

mysql> SHOW CREATE DATABASE test_db_char;+--------------+-----------------------------------------------------+| Database     | Create Database                                     |+--------------+-----------------------------------------------------+| test_db_char | CREATE DATABASE `test_db_char` /*!40100 DEFAULT CHARACTER SET utf8 */ |+--------------+-----------------------------------------------------+1 row in set (0.00 sec)

“1 row in set (0.00 sec)”表示集合中有 1 行信息,处理时间为 0.00秒。时间为 0.00 秒并不代表没有花费时间,而是时间非常短,小于 0.01 秒。

查询数据库

数据库可以看作是一个专门存储数据对象的容器,每一个数据库都有唯一的名称,并且数据库的名称都是有实际意义的,这样就可以清晰的看出每个数据库用来存放什么数据。在 数据库中存在系统数据库和自定义数据库,系统数据库是在安装 MySQL 后系统自带的数据库,自定义数据库是由用户定义创建的数据库。

在 MySQL 中,可使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库。查看数据库的语法格式为:

SHOW DATABASES [LIKE '数据库名'];

语法说明如下:

  • LIKE 从句是可选项,用于匹配指定的数据库名称。LIKE 从句可以部分匹配,也可以完全匹配。
  • 数据库名由单引号' '包围。

查看所有数据库/数据库列表

列出当前用户可查看的所有数据库:

mysql> SHOW DATABASES;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sakila             || sys                || world              |+--------------------+6 row in set (0.22 sec)

可以发现,在上面的列表中有 6 个数据库,它们都是安装 MySQL 时系统自动创建的,其各自功能如下:

  • information_schema:主要存储了系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息和分区信息等。
  • mysql:MySQL 的核心数据库,类似于 SQL Server 中的 master 表,主要负责存储数据库用户、用户访问权限等 MySQL 自己需要使用的控制和管理信息。常用的比如在 mysql 数据库的 user 表中修改 root 用户密码。
  • performance_schema:主要用于收集数据库服务器性能参数。
  • sakila:MySQL 提供的样例数据库,该数据库共有 16 张表,这些数据表都是比较常见的,在设计数据库时,可以参照这些样例数据表来快速完成所需的数据表。
  • sys:MySQL 5.7 安装完成后会多一个 sys 数据库。sys 数据库主要提供了一些视图,数据都来自于 performation_schema,主要是让开发者和使用者更方便地查看性能问题。
  • world:world 数据库是 MySQL 自动创建的数据库,该数据库中只包括 3 张数据表,分别保存城市,国家和国家使用的语言等内容。

创建并查看数据库

先创建一个名为 test_db 的数据库:

mysql> CREATE DATABASE test_db;

Query OK, 1 row affected (0.12 sec)

再使用 SHOW DATABASES 语句显示权限范围内的所有数据库名,如下所示:

mysql> SHOW DATABASES;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sakila             || sys                || test_db            || world              |+--------------------+7 row in set (0.22 sec)

你看,刚才创建的数据库已经被显示出来了。

使用 LIKE 从句

先创建三个数据库,名字分别为 test_db、db_test、db_test_db。

  1. 使用 LIKE 从句,查看与 test_db 完全匹配的数据库:
mysql> SHOW DATABASES LIKE 'test_db';+--------------------+| Database (test_db) |+--------------------+| test_db            |+--------------------+1 row in set (0.03 sec)
  1. 使用 LIKE 从句,查看名字中包含 test 的数据库:
mysql> SHOW DATABASES LIKE '%test%';+--------------------+| Database (%test%)  |+--------------------+| db_test            |+--------------------+| db_test_db         |+--------------------+| test_db            |+--------------------+3 row in set (0.03 sec)
  1. 使用 LIKE 从句,查看名字以 db 开头的数据库:
mysql> SHOW DATABASES LIKE 'db%';+----------------+| Database (db%) |+----------------+| db_test        |+----------------+| db_test_db     |+----------------+2 row in set (0.03 sec)
  1. 使用 LIKE 从句,查看名字以 db 结尾的数据库:
mysql> SHOW DATABASES LIKE '%db';+----------------+| Database (%db) |+----------------+| db_test_db     |+----------------+| test_db        |+----------------+2 row in set (0.03 sec)

查看数据库的创建信息/定义声明

SHOW CREATE DATABASE 
;

修改数据库

在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:

ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET 
<字符集名>
|[ DEFAULT ] COLLATE
<校对规则名>
}

语法说明如下:

  • ALTER DATABASE 用于更改数据库的全局特性。
  • 使用 ALTER DATABASE 需要获得数据库 ALTER 权限。
  • 数据库名称可以忽略,此时语句对应于默认数据库。
  • CHARACTER SET 子句用于更改默认的数据库字符集。

修改数据库字符集

查看 test_db 数据库的定义声明的执行结果如下所示:

mysql> SHOW CREATE DATABASE test_db;+----------+--------------------------------------------------------+| Database | Create Database                                        |+----------+--------------------------------------------------------+| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET utf8 */|+----------+--------------------------------------------------------+1 row in set (0.05 sec)

使用命令行工具将数据库 test_db 的指定字符集修改为 gb2312,默认校对规则修改为 utf8_unicode_ci,输入 SQL 语句与执行结果如下所示:

mysql> CREATE DATABASE test_db    -> DEFAULT CHARACTER SET gb2312    -> DEFAULT COLLATE gb2312_chinese_ci;mysql> SHOW CREATE DATABASE test_db;+----------+--------------------------------------------------------+| Database | Create Database                                        |+----------+--------------------------------------------------------+| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET gb2312 */|+----------+--------------------------------------------------------+1 row in set (0.00 sec)

删除数据库

当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。

在 中,当需要删除已创建的数据库时,可以使用 DROP DATABASE 语句。其语法格式为:

DROP DATABASE [ IF EXISTS ] 
<数据库名>

语法说明如下:

  • <数据库名>:指定要删除的数据库名。
  • IF EXISTS:用于防止当数据库不存在时发生错误。
  • DROP DATABASE:删除数据库中的所有表格并同时删除数据库。使用此语句时要非常小心,以免错误删除。如果要使用 DROP DATABASE,需要获得数据库 DROP 权限。

注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。

数据库列表中删除

下面在 MySQL 中创建一个测试数据库 test_db_del。

mysql> CREATE DATABASE test_db_del;Query OK, 1 row affected (0.08 sec)mysql> SHOW DATABASES;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sakila             || sys                || test_db            || test_db_char       || test_db_del        || world              |+--------------------+9 rows in set (0.00 sec)

使用命令行工具将数据库 test_db_del 从数据库列表中删除,输入的 SQL 语句与执行结果如下所示:

mysql> DROP DATABASE test_db_del;Query OK, 0 rows affected (0.57 sec)mysql> SHOW DATABASES;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sakila             || sys                || test_db            || test_db_char       || world              |+--------------------+8 rows in set (0.00 sec)

此时数据库 test_db_del 不存在。再次执行相同的命令,直接使用 DROP DATABASE test_db_del,系统会报错,如下所示:

mysql> DROP DATABASE test_db_del;ERROR 1008 (HY000): Can't drop database 'test_db_del'; database doesn't exist

如果使用IF EXISTS从句,可以防止系统报此类错误,如下所示:

mysql> DROP DATABASE IF EXISTS test_db_del;Query OK, 0 rows affected, 1 warning (0.00 sec)

使用 DROP DATABASE 命令时要非常谨慎,在执行该命令后,MySQL 不会给出任何提示确认信息。DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。因此最好在删除数据库之前先将数据库进行备份。

选择/打开数据库

在 MySQL 中,USE 语句用来完成一个数据库到另一个数据库的跳转。

当用 CREATE DATABASE 语句创建数据库之后,该数据库不会自动成为当前数据库,需要用 USE 来指定当前数据库。其语法格式为:

USE 
<数据库名>
;

该语句可以通知 MySQL 把<数据库名>所指示的数据库作为当前数据库。该数据库保持为默认数据库,直到语段的结尾,或者直到遇见一个不同的 USE 语句。

只有使用 USE 语句来指定某个数据库作为当前数据库之后,才能对该数据库及其存储的数据对象执行操作。

设置默认数据库

使用命令行工具将数据库 test_db 设置为默认数据库,输入的 SQL 语句与执行结果如下所示:

mysql> USE test_db;Database changed

在执行选择数据库语句时,如果出现“Database changed”提示,则表示选择数据库成功。

查看数据库引擎

SHOW ENGINES;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2uQAJYca-1599829919425)(https://s2.ax1x.com/2020/02/09/1h1aCQ.png)]

详细,见http://c.biancheng.net/view/2418.html

查看当前服务器版本

SELECT VERSION();

查看当前日期时间

SELECT NOW();

查看当前用户

SELECT  USER();

查看错误信息

SHOW WARNINGS;

创建数据表

CREATE TABLE [IF NOT EXSITS] table_name(column_name data_type [约束条件1] [约束条件2] [...],....);

注意,约束条件如下:

  1. 如果规定其数据类型data_type为整形无符号值,在其随后加上**UNSIGNED **即可。
  2. 字段值为空:NULL非空:NOT NULL
  3. AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。AUTO_INCREMENT要和主键一起使用,但是主键不一定要用AUTO_INCREMENT。
  4. PRIMARY KEY关键字用于定义列为主键。 另外可以使用多列来定义主键,列间以逗号分隔。
  5. UNIQUE KEY:唯一约束。保证记录的唯一性。唯一约束的字段可以为空值(NULL),但是如果保存了多个NULL,最终只会保留1个。 每张表可以存在多个UNIQUE KEY。
  6. ENGINE 设置存储引擎,CHARSET 设置编码。
  7. **DEFAULT:默认值。**当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

实例:

CREATE TABLE IF NOT EXISTS `user`(   `user_id` INT UNSIGNED AUTO_INCREMENT,   `user_title` VARCHAR(100) NOT NULL,   `user_author` VARCHAR(40) NOT NULL,   `submission_date` DATE,   PRIMARY KEY ( `user_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;

查看数据表

查看数据表列表

SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr];

注意两点:

  1. 若运行命令 USE db_name ,像得到db_name中的数据表列表,则SHOW TABLES; 即可。
  2. 在使用SHOW TABLES FROM other_db_name;后,不会更改当前正在使用的数据库,即不需要再USE db_name

查看数据表的创建信息/定义声明

同“查看数据表的存储引擎/查看数据表的字符集”:

SHOW CREATE TABLE table_name;

查看数据表结构

SHOW COLUMNS FROM tb_name;

修改数据表

修改数据表的操作分为增、删、改、查。

插入记录/数据

INSERT [INTO] table_name [(columns_anme1,...)] VALUES(value1,...);

注意:如果数据是字符型必须使用单引号或者双引号,如:“value”

查询记录/数据

SELECT column_name,column_nameFROM table_name[WHERE Clause][LIMIT N][ OFFSET M];
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

修改记录/数据

 

删除记录/数据

查看索引状态

SHOW INDEX FROM tbl_name [FROM db_name];# 以网格显示索引SHOW INDEXES FROM tbl_name\G;

如果seq_in_index:后有值,说明创建了索引。

MySQL检查长度

可用SQL语言:

SELECT LENGTH(fieldname) FROM tablename;#例子SELECT length(name_chn) FROM str_test;

详细见

区别大小写字母

# 将查询条件用binary()括起来SELECT * FROM emp WHERE binary username= 'jack';# 修改该字段的collation 为 binaryALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;# 建表时时候加以标识CREAT TABLE emp(   username varchar(20) binary)# 查询区分大小写,加上binary属性SELECT * FROM emp WHERE binary username='jack'SELECT * FROM emp WHERE binary username='JACK'

更多见

转载地址:https://melodyjerry.blog.csdn.net/article/details/108541867 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux的一些简单命令
下一篇:[转]Java面向对象的七大原则

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月16日 07时34分03秒