MySQL之库和表操作

目录

一:对库的操作

1.创建数据库

2.查看数据库列表

3.显示创建数据库的语句

4.删除数据库

5.字符集与校验集

6.确认当前所处的数据库

7.修改数据库

8.备份和恢复

9.查看连接情况

二:对表的操作

1.创建表

2.查看表

3.删除表

4.修改表

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

一:对库的操作

1.创建数据库

语法:create database (if not exists) 库名 (charset=编码集) (collate 校验集);

注:(1).此处及后续()中的内容可写可不写

(2).编码集和校验集后续介绍

(3).当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,

校验规则是:utf8_general_ ci

sql 复制代码
mysql> create database d1;
sql 复制代码
mysql> create database if not exists d2;
Query OK, 1 row affected (0.00 sec)

当对应数据库存在时,则不再创建一个新的;不存在时,则新创建一个

本质是在 /var/lib/mysql下创建一个目录

2.查看数据库列表

sql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| hello              |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
7 rows in set (0.00 sec)

3.显示创建数据库的语句

语法: show create database 库名;

sql 复制代码
mysql> show create database d1;
+----------+-------------------------------------------------------------+
| Database | Create Database                                             |
+----------+-------------------------------------------------------------+
| d1       | CREATE DATABASE `d1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)

说明:

(1).数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字

(2)./*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

4.删除数据库

语法:drop database 库名;

sql 复制代码
mysql> drop database d1;
Query OK, 0 rows affected (0.03 sec)

执行删除之后的结果:

数据库内部看不到对应的数据库

对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

因此不要随意删除数据库

5.字符集与校验集

在创建数据库时,有两个编码集:数据库字符集和数据库校验集

字符集:数据库未来存储数据采用的编码格式

校验集:支持数据库进行字段比较而使用的编码,本质是一种读取数据库中数据的采用的编码格式

当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_

general_ ci

数据库无论对数据做任何操作,必须保证操作和编码时的编码是一致的

(1)查看系统默认字符集以及校验规则

sql 复制代码
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)

(2)查看数据库支持的字符集

sql 复制代码
mysql> show charset;

(3) 查看数据库支持的字符集校验规则

sql 复制代码
mysql> show collation;

(4) 查看每个默认内部的校验规则

sql 复制代码
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

(5) 使用指定编码创建数据库

创建一个使用utf8字符集的 db2 数据库

sql 复制代码
create database db2 charset=utf8;

创建一个使用utf字符集,并带校对规则的 db3 数据库

sql 复制代码
create database db3 charset=utf8 collate utf8_general_ci;

(6) 校验规则对数据库的影响

创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]

sql 复制代码
mysql> create database test1 collate utf8_general_ci;

mysql> use test1;

mysql> create table person(name varchar(20));

mysql> insert into person values('a');

mysql> insert into person values('A');

mysql> insert into person values('b');

mysql> insert into person values('B');

创建一个数据库,校验规则使用utf8_ bin[区分大小写]

sql 复制代码
mysql> create database test2 collate utf8_bin;

mysql> use test2;

mysql> create table person(name varchar(20));

mysql> insert into person values('a');

mysql> insert into person values('A');

mysql> insert into person values('b');

mysql> insert into person values('B');

不区分大小写的查询以及结果

sql 复制代码
mysql> use test1;

mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
| A    |
+------+

区分大小写的查询以及结果

sql 复制代码
mysql> use test2;

mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
+------+

可以看出校验集是会影响比较结果的

6.确认当前所处的数据库

sql 复制代码
mysql> select database();
+------------+
| database() |
+------------+
| test2      |
+------------+

7.修改数据库

语法:alter database 库名 (charset=字符集) (collate 对应的校验集)

对数据库的修改主要指的是修改数据库的字符集,校验规则

sql 复制代码
mysql> alter database test2 charset=gbk collate gbk_chinese_ci;
Query OK, 1 row affected (0.00 sec)

8.备份和恢复

备份:

语法: # mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

示例:将mytest库备份到文件(退出连接)

sql 复制代码
# mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql

备份数据库中的表

sql 复制代码
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql

同时备份多个数据库

sql 复制代码
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

还原:

sql 复制代码
mysql> source D:/mysql-5.7.22/mytest.sql; 

9.查看连接情况

show processlist; 可以告诉我们当前有哪些用户连接到我们的MySQL

二:对表的操作

1.创建表

(1)语法:

create table(if not exists) table_name (

field1 datatype,

field2 datatype,

field3 datatype

) character set 字符集 collate 校验规则 engine 存储引擎;

说明:field 表示列名

datatype 表示列的类型

character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准

collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

(2)实例

sql 复制代码
mysql> create table if not exists t1(
    -> id int,
    -> name varchar(20) comment'用户名',
    -> password char(32) comment'密码',
    -> birthday date comment'生日'
    -> )character set utf8 collate utf8_general_ci engine MyIsam;
Query OK, 0 rows affected (0.01 sec)

说明:不同的存储引擎,创建表的文件不一样。

users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:

users.frm:表结构

users.MYD:表数据

users.MYI:表索引

默认存储引擎是innodb

2.查看表

(1) 显示当前所在数据库有几张表

sql 复制代码
mysql> show tables;
+-----------------+
| Tables_in_test2 |
+-----------------+
| person          |
| t1              |
+-----------------+

(2) 查看具体一个表的详细信息/表结构信息

语法: desc 表名

sql 复制代码
mysql> desc t1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| password | char(32)    | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

(3)显示创建表时的详细信息

语法:show create table 表名 \G;

sql 复制代码
mysql> show create table t1 \G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `password` char(32) DEFAULT NULL COMMENT '密码',
  `birthday` date DEFAULT NULL COMMENT '生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8

3.删除表

语法格式:drop table 表名;

sql 复制代码
mysql> drop table person;
Query OK, 0 rows affected (0.02 sec)

4.修改表

(1)修改表名为employee

语法: alter table 原表名 rename to 新表名;

sql 复制代码
mysql> alter table t1 rename to employee;
Query OK, 0 rows affected (0.00 sec)

(2)在指定列后新增一列

语法:alter table 表名 add 新列名 列类型 其它 after 原有列名;

sql 复制代码
mysql> alter table employee add imagepath varchar(128) comment'图片路径' after birthday;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employee;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int(11)      | YES  |     | NULL    |       |
| name      | varchar(20)  | YES  |     | NULL    |       |
| password  | char(32)     | YES  |     | NULL    |       |
| birthday  | date         | YES  |     | NULL    |       |
| imagepath | varchar(128) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

(3)指定列属性做修改

语法: alter table 表名 modify 列名 新的列属性;

sql 复制代码
mysql> alter table employee modify name varchar(60);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employee;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int(11)      | YES  |     | NULL    |       |
| name      | varchar(60)  | YES  |     | NULL    |       |
| password  | char(32)     | YES  |     | NULL    |       |
| birthday  | date         | YES  |     | NULL    |       |
| imagepath | varchar(128) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

(4) 删除一列

语法:alter table 表名 drop 列名;

sql 复制代码
mysql> alter table employee drop imagepath;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employee;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(60) | YES  |     | NULL    |       |
| password | char(32)    | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

(5) 修改列名称

语法:alter table 表名 change name 新列名以及相关属性;

sql 复制代码
mysql> alter table employee change name xingming varchar(60);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employee;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| xingming | varchar(60) | YES  |     | NULL    |       |
| password | char(32)    | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
相关推荐
.Shu.1 小时前
Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【五、InnoDB 高阶机制与实战调优】
数据库·mysql
新法国菜3 小时前
MySql知识梳理之DDL语句
数据库·mysql
DarkAthena3 小时前
【GaussDB】全密态等值查询功能测试及全密态技术介绍
数据库·gaussdb
ShawnLeiLei4 小时前
2.3 Flink的核心概念解析
数据库·python·flink
石皮幼鸟5 小时前
数据完整性在所有场景下都很重要吗?
数据库·后端
大只鹅5 小时前
Centos7.9 Docker26容器化部署 MySql9.4 一主一从的同步复制部署
mysql·centos
叁沐6 小时前
MySQL 28 读写分离有哪些坑?
mysql
nightunderblackcat6 小时前
新手向:异步编程入门asyncio最佳实践
前端·数据库·python
DarkAthena6 小时前
【GaussDB】使用MySQL客户端连接到GaussDB的M-Compatibility数据库
数据库·mysql·gaussdb
livemetee7 小时前
Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
大数据·数据库·笔记·学习·flink