目录
一、库的操作
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删除表
#创建数据库————本质是在/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)
创建数据库的时候,有两个编码集:
1、数据库编码集:数据库存储数据的编码集。
2、数据库校验集:支持数据库进行字段比较使用的编码,本质也是一种读取数据库中数据采用的编码格式。
#查询当前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)
#查看数据库支持的所有字符集
show charset;
#查看数据库支持的所有校验集
show collation;
#在数据库目录下查看d1数据库的字符集和校验集
[root@VM-4-11-centos mysql]# cat d2/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
#创建数据库时指定字符集
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
#创建一个数据库,校验规则使用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)
选择不同的校验集,数据库筛选出来的结果不一样
#查看数据库
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版本,就执行这句话。
#修改数据库的字符集和校验集
mysql> alter database test1 charset=gbk collate gbk_chinese_ci;
Query OK, 1 row affected (0.01 sec)
#删除数据库————本质是在/var/lib/mysql中删除一个目录
#不建议直接删除数据库,建议备份后删除
mysql> drop database database1;
Query OK, 0 rows affected (0.01 sec)
#未启动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 参数后面指定多个数据库名称,用空格分隔。
mysql> source /root/MySQL/test.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
恢复的过程就是将备份的命令全部重新执行了一遍。
#仅备份几张张表
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
#同时备份多个数据库
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
注:备份是在shell命令行进行的,而非MySQL客户端。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
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)
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:表索引
#查看当前处于哪个数据库
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)
#查看创建表时的详细信息
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)
#在表中插入数据
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)
#在表中插入字段,新增字段位于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)
#修改表名为user
mysql> alter table use1 rename to user;
Query OK, 0 rows affected (0.01 sec)
#查一下创建表的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
#将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,
修改表中某一列的数据类型是覆盖式修改的。为了防止创建表时设置的字段丢失,先复制原表的创建信息,再进行修改。
#删除user
mysql> alter table user drop image_path;
Query OK, 2 rows affected (0.05 sec)
Records: 2 Duplicates: 0 Warnings: 0
删除操作要谨慎,删除后对应的列的数据将被删除。
mysql> drop table user;
Query OK, 0 rows affected (0.00 sec)