【MySQL】库和表的增删查改

【MySQL】库和表的增删查改_第1张图片


目录

一、库的操作

1、创建数据库

2、数据库所使用的编码

2.1查询编码集和校验集

2.2查看数据库的字符集和校验集

2.3创建数据库指定字符集和校验集

2.4不同的校验集所筛选的数据结果不一样

3、查看数据库

4、修改数据库

5、删除数据库

6、数据库的备份和恢复

6.1备份整个数据库

6.2恢复整个数据库

6.3仅备份一张表或备份多个数据库

7、查看数据库的连接情况

二、表的操作

1、表的创建

2、表的查看

2.1查看表

2.2查看创建表时的详细信息

3、表的修改

3.1在表中插入数据

3.2在表中新增字段

3.3修改表名

3.4修改表中某一列的列名

3.5修改表中某一列的数据类型

4、表的删除

4.1删除表中的某一列

4.2删除表


一、库的操作

1、创建数据库

#创建数据库————本质是在/var/lib/mysql中创建一个目录
mysql> create database database1;
Query OK, 1 row affected (0.01 sec)
#进入数据库
mysql> use test1;
Database changed
#创建表
mysql> create table if not exists person(name varchar(20));
Query OK, 0 rows affected (0.34 sec)

2、数据库所使用的编码

创建数据库的时候,有两个编码集:

1、数据库编码集:数据库存储数据的编码集。

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

2.1查询编码集和校验集

#查询当前MySQL的编码集
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)
#查询当前MySQL的校验集
mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.01 sec)

2.2查看数据库的字符集和校验集

#查看数据库支持的所有字符集
show charset;
#查看数据库支持的所有校验集
show collation;
#在数据库目录下查看d1数据库的字符集和校验集
[root@VM-4-11-centos mysql]# cat d2/db.opt
default-character-set=utf8
default-collation=utf8_general_ci

2.3创建数据库指定字符集和校验集

#创建数据库时指定字符集
mysql> create database d2 charset=utf8;
Query OK, 1 row affected (0.00 sec)

mysql> create database d3 character set utf8;
Query OK, 1 row affected (0.00 sec)

#创建数据库时指定字符集和校验集
mysql> create database d4 charset=utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

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

2.4不同的校验集所筛选的数据结果不一样

#创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(10));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
#进行查询
mysql> use test1;
mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
| A    |
+------+
2 rows in set (0.01 sec)
#创建一个数据库,校验规则使用utf8_ bin[区分大小写]
create database test2 collate utf8_bin;
use test2
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
#进行查询
mysql> use test2;
mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
+------+
2 rows in set (0.01 sec)

选择不同的校验集,数据库筛选出来的结果不一样

3、查看数据库

#查看数据库
mysql> show databases;
#进入数据库
mysql> use test1;
Database changed
#查看当前数据库中的所有表
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| person          |
+-----------------+
1 row in set (0.00 sec)
#查看自己当前处于哪个表
mysql> select database();
+------------+
| database() |
+------------+
| test1      |
+------------+
1 row in set (0.01 sec)
#查看数据库当初的创建指令
mysql> show create database test2;
+----------+---------------------------------------------------------------------------------+
| Database | Create Database                                                                 |
+----------+---------------------------------------------------------------------------------+
| test2    | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
+----------+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)

1、MySQL 建议我们关键字使用大写,但是不是必须的。

2、数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字

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

4、修改数据库

#修改数据库的字符集和校验集
mysql> alter database test1 charset=gbk collate gbk_chinese_ci;
Query OK, 1 row affected (0.01 sec)

5、删除数据库

#删除数据库————本质是在/var/lib/mysql中删除一个目录
#不建议直接删除数据库,建议备份后删除
mysql> drop database database1;
Query OK, 0 rows affected (0.01 sec)

6、数据库的备份和恢复

6.1备份整个数据库

#未启动MySQL客户端使用,备份的是对该数据库的有效操作
mysqldump -P3306 -uroot -p -B test1 > test.sql

这是一个 MySQL 命令,用于将数据库中的数据导出到一个 SQL 文件中。具体来说,这个命令会将名为 test1 的数据库中的所有数据导出到名为 test.sql 的文件中。

以下是这个命令中各个参数的含义:

  • -P3306:指定 MySQL 服务器的端口号为 3306。
  • -uroot:使用 root 用户名连接到 MySQL 服务器。
  • -p:提示用户输入密码,以便连接到 MySQL 服务器。
  • -B test1:指定要导出的数据库名称为 test1。
  • > test.sql:将导出的数据输出到名为 test.sql 的文件中。

请注意,在执行这个命令之前,你需要确保具有足够的权限来导出数据库中的数据。另外,如果你想导出多个数据库,可以在 -B 参数后面指定多个数据库名称,用空格分隔。

6.2恢复整个数据库

mysql> source /root/MySQL/test.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

恢复的过程就是将备份的命令全部重新执行了一遍。

6.3仅备份一张表或备份多个数据库

#仅备份几张张表
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
#同时备份多个数据库
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

注:备份是在shell命令行进行的,而非MySQL客户端。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。

7、查看数据库的连接情况

mysql> show processlist;
+----+------+-----------+-------+---------+------+----------+------------------+
| Id | User | Host      | db    | Command | Time | State    | Info             |
+----+------+-----------+-------+---------+------+----------+------------------+
| 40 | root | localhost | test1 | Query   |    0 | starting | show processlist |
+----+------+-----------+-------+---------+------+----------+------------------+
1 row in set (0.01 sec)

二、表的操作

1、表的创建

mysql> create table if not exists use1(
    -> id int,
    -> name varchar(20) comment '用户名',
    -> birthday date comment '用户生日'
    -> )character set utf8 collate utf8_general_ci engine MyIsam;
Query OK, 0 rows affected (0.02 sec)

mysql> create table if not exists use2(
    -> name varchar(20) comment '用户名',
    -> passwword char(32) comment '用户密码',
    -> birthday date comment '用户生日'
    -> )charset=utf8 collate=utf8_general_ci engine=InnoDB;
Query OK, 0 rows affected (0.15 sec)

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

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

users.frm:表结构

users.MYD:表数据

users.MYI:表索引

2、表的查看

2.1查看表

#查看当前处于哪个数据库
mysql> select database();
+------------+
| database() |
+------------+
| use_db     |
+------------+
1 row in set (0.01 sec)
#查看数据库中存在的表
mysql> show tables;
+------------------+
| Tables_in_use_db |
+------------------+
| use1             |
| use2             |
+------------------+
2 rows in set (0.00 sec)
#查看表的属性
mysql> desc use1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

2.2查看创建表时的详细信息

#查看创建表时的详细信息
mysql> show create table use1;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| use1  | CREATE TABLE `use1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `birthday` date DEFAULT NULL COMMENT '用户生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8        |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

#加上\G选项精简信息
mysql> show create table use1 \G
*************************** 1. row ***************************
       Table: use1
Create Table: CREATE TABLE `use1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `birthday` date DEFAULT NULL COMMENT '用户生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

3、表的修改

3.1在表中插入数据

#在表中插入数据
mysql> insert into user values (1,'张三','2000-10-1');
Query OK, 1 row affected (0.00 sec)
mysql> insert into user values (2,'李四','1978-10-1');
Query OK, 1 row affected (0.01 sec)

#查看表内容
mysql> select* from user;
+------+--------+------------+
| id   | name   | birthday   |
+------+--------+------------+
|    1 | 张三   | 2000-10-01 |
|    2 | 李四   | 1978-10-01 |
+------+--------+------------+
2 rows in set (0.03 sec)
mysql> insert into t3 (id,online) values (123,1);
Query OK, 1 row affected (0.03 sec)

3.2在表中新增字段

#在表中插入字段,新增字段位于birthday之后
mysql> alter table user add image_path varchar(128) comment '用户头像路径' after birthday;
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0
#打印表
mysql> select* from user;
+------+--------+------------+------------+
| id   | name   | birthday   | image_path |
+------+--------+------------+------------+
|    1 | 张三   | 2000-10-01 | NULL       |
|    2 | 李四   | 1978-10-01 | NULL       |
+------+--------+------------+------------+
2 rows in set (0.00 sec)

3.3修改表名

#修改表名为user
mysql> alter table use1 rename to user;
Query OK, 0 rows affected (0.01 sec)

3.4修改表中某一列的列名

#查一下创建表的SQL
mysql> show create table user\G;
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(60) DEFAULT NULL,
  `birthday` date DEFAULT NULL COMMENT '用户生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

#修改name列名为xingming。注意新字段需要完整定义
mysql> alter table user change name xingming varchar(60) DEFAULT NULL;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

3.5修改表中某一列的数据类型

#将name字段的属性由varchar(20)修改为varchar(60)
#但是这样修改将会丢失COMMENT '用户姓名'字段
mysql> alter table user modify name varchar(60);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

#9列为原先创建表时的语句,10列为修改后的语句。
#COMMENT '用户姓名'将丢失,所以修改表中某一列的属性时,将创建时的SQL复制过来再进行修改
`name` varchar(20) DEFAULT NULL COMMENT '用户姓名',
`name` varchar(60) DEFAULT NULL,

修改表中某一列的数据类型是覆盖式修改的。为了防止创建表时设置的字段丢失,先复制原表的创建信息,再进行修改。

4、表的删除

4.1删除表中的某一列

#删除user
mysql> alter table user drop image_path;
Query OK, 2 rows affected (0.05 sec)
Records: 2  Duplicates: 0  Warnings: 0

删除操作要谨慎,删除后对应的列的数据将被删除。

4.2删除表

mysql> drop table user;
Query OK, 0 rows affected (0.00 sec)

你可能感兴趣的:(MySQL,mysql,数据库,sql)