【MySQL-1】MySQL数据库的基本操作
目录
4.4.2.1 如果备份的不是整个数据库,而是其中的一张表,怎么做?
6.3.2 在表中的id字段后加上一个telephone字段
1. 整体学习思维导图
2. 数据库的创建
创建数据库的MySQL语句
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
-
大写的字母表示关键字
-
COLLATE 表示校验规则 CHARACTER 表示字符集
-
查看默认的设定可以找到下载的my.cnf文件,我这边默认的
-
# vim /etc/my.cnf
-
COLLATE 表示校验规则
-
[]表示可选项,我们可以按照自己的需求指定,也可以使用默认字符集和校验规则为utf8
-
[IF NOT EXISTS] 用于检查该数据库是否存在
-
[DEFAULT] 不设置采用默认
2.1 创建一个数据库
其实创建一个数据库就相当于创建一个目录,这一点我们可以在相关目录下发现:
mysql> create database if not exists mydatabase1;
Query OK, 1 row affected (0.00 sec)
mysql> system clear;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
- 按照以上sql指令我们可以创建一个名为mydatabase1的数据库,并且我们可以在总的数据库表中查看到它。
- 同时我们可以去到相关路径查看到它的字符集和校验规则。
[root@iZ2ze0j6dd76e0o9qypo2rZ mydatabase1]# cat db.opt
default-character-set=utf8
default-collation=utf8_general_ci
2.2 创建一个指定字符集和校验规则的数据库
mysql> create database if not exists mydatabase2 charset=utf8 collate utf8_genneral_ci;
Query OK, 1 row affected (0.00 sec)
[root@iZ2ze0j6dd76e0o9qypo2rZ mysql]# cat mydatabase2/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
3. 字符集和校验规则
3.1 查看系统默认字符集以及校验规则
-- 默认的字符集
mysql> show variables like 'character_set_database';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
-- 默认的校验规则
mysql> show variables like 'collation_database';
+--------------------+-------------------+
| Variable_name | Value |
+--------------------+-------------------+
| collation_database | latin1_swedish_ci |
+--------------------+-------------------+
3.2 查看数据库所支持的字符集和校验规则
mysql> show charset;
mysql> show collation;
3.3 不同校验规则所带来的影响
使用mydatabase1并且创建一个含有name属性的表,往表中插入一些数据,筛选表中含有a的数据。
mysql> use mydatabase1
Database changed
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');
mysql> insert into person values('C');
mysql> insert into person values('d');
mysql> select * from person where name='a';
+------+
| name |
+------+
| A |
| a |
+------+
使用mydatabase1并且创建一个含有name属性的表,往表中插入一些数据,筛选表中含有a的数据。
mysql> use mydatabase2;
Database changed
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');
mysql> insert into person values('C');
mysql> insert into person values('d');
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
+------+
由上可知,不同的校验规则会带来不同的影响,比如以上的校验规则,一个区分大小写,一个不区分大小写。
4. 操作数据库
展示数据库。
show databases;
4.1查看数据库的创建信息
show create database 数据库的名称;
show create database mydatabase1\G; -- \G用于整理展示
*************************** 1. row ***************************
Database: mydatabase1
Create Database: CREATE DATABASE `mydatabase1` /*!40100 DEFAULT CHARACTER SET utf8 */
4.2 修改数据库的字符集和校验规则
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
我们将一个数据库的字符集修改成utf8,校验规则修改成utf8_bin。
mysql> alter database mydatabase1 charset=utf8 collate utf8_bin;
-- 修改前
[root@iZ2ze0j6dd76e0o9qypo2rZ mysql]# cat mydatabase1/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
-- 修改后
[root@iZ2ze0j6dd76e0o9qypo2rZ mysql]# cat mydatabase1/db.opt
default-character-set=utf8
default-collation=utf8_bin
4.3 数据库的删除
前提注意:我们不要随便去删除一个数据库
drop database 数据库名称;
-- 删除前
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase1 |
| mydatabase2 |
| mysql |
| performance_schema |
| sys |
+--------------------+
-- 删除语句
mysql> drop database mydatabase2;
-- 删除后
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
4.4 备份与恢复数据库
4.4.1 备份
我们在对一个数据库进行一些操作时,通常需要备份一份,以防错误的操作导致数据库的数据损坏。
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径.sql
[root@iZ2ze0j6dd76e0o9qypo2rZ MySQL]# mysqldump -P3306 -u root -p -B mydatabase1 > /root/MySQL/mydatabase.sql
Enter password:
[root@iZ2ze0j6dd76e0o9qypo2rZ MySQL]# ll
total 4
-rw-r--r-- 1 root root 2012 Nov 3 21:34 mydatabase.sql
我们可以使用vim查看其中的内容,可以看见其中有很多我们以前的操作。
4.4.2 还原
mysql> source /root/MySQL/路径名字.sql(路径)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
4.4.2.1 如果备份的不是整个数据库,而是其中的一张表,怎么做?
mysqldump -P3306 -uroot -p 数据库名字 表名字 > 自定义名字.sql
4.4.2.2 备份多个数据库
mysqldump -P3306 -u root -p 密码 -B 数据库名 数据库名 > 数据库备份存储的文件路径.sql
-
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原 。
5. 查看连接情况
show processlist;
-- 查看结果
*************************** 1. row ***************************
Id: 8
User: root
Host: localhost
db: mydatabase1
Command: Query
Time: 0
State: starting
Info: show processlist
该指令可以查看有哪些用户正在使用该服务器,可以观察到外部用户的恶意入侵。
6. 表的创建
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
-
Field 表示列名
-
datatype表示数据类型
6.1 创建一个表
创建一个名为student的表,这个表的要求是以下几点:
-
姓名
-
年龄
-
性别
-
学号 以2023090640XXX为例
create table student(
-> name varchar(50) comment 'student_name',
-> age int,
-> gender char(10),
-> id varchar(30)
-> );
-
comment有着解释说明的意思
-
不同的存储引擎会带来不同的效果
以Innobd为存储引擎的表:
-rw-r----- 1 mysql mysql 8660 Nov 4 11:29 student.frm
-rw-r----- 1 mysql mysql 98304 Nov 4 11:29 student.ibd
以MyIsam为存储引擎的表:
-rw-r----- 1 mysql mysql 8660 Nov 4 11:34 student2.frm
-rw-r----- 1 mysql mysql 0 Nov 4 11:34 student2.MYD
-rw-r----- 1 mysql mysql 1024 Nov 4 11:34 student2.MYI
6.2 查看表结构
desc 表的名字;
-- 使用效果
mysql> desc student;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| gender | char(10) | YES | | NULL | |
| id | varchar(30) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
-
Field: 字段名字
-
Type: 数据类型
-
Null: 是否允许为空
-
Key: 索引类型
-
Default: 默认类型
-
Extra: 扩容/扩充
6.2.1 查看表的创建信息
show create table tb1 \G;
*************************** 1. row ***************************
Table: tb1
Create Table: CREATE TABLE `tb1` (
`id` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
6.3 操作表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表 。
// ADD --添加
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);
// MODIFY --修改
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);
// DROP --删除
ALTER TABLE tablename DROP (column);
6.3.1 修改表的名字
mysql> show tables;
+-----------------------+
| Tables_in_mydatabase1 |
+-----------------------+
| student |
| uers |
+-----------------------+
mysql> alter table student rename student_table;
mysql> show tables;
+-----------------------+
| Tables_in_mydatabase1 |
+-----------------------+
| student_table |
| uers |
+-----------------------+
6.3.2 在表中的id字段后加上一个telephone字段
mysql> desc student_table;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| gender | char(10) | YES | | NULL | |
| id | varchar(30) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
mysql> alter table 表名称 add 字段名称 varchar(60) [after] 字段名称;
mysql> alter table student_table add telephone varchar(60) after id;
mysql> desc student_table;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| gender | char(10) | YES | | NULL | |
| id | varchar(30) | YES | | NULL | |
| telephone | varchar(60) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6.3.3 向表中插入数据
查看表中的数据
mysql> select * from student_table;
Empty set (0.00 sec)
现在要求向表中插入以下两条数据:
-
欧阳 18 男 2023090640127 123456
-
牛马 19 男 2023090640124 654123
mysql> insert into student_table(name,age,gender,id,telephone)
-> values('欧阳', 18, '男', '2023090640127', '123456');
mysql> insert into student_table(name,age,gender,id,telephone)
-> values('牛马', 19, '男', '2023090640124', '654123');
mysql> select * from student_table;
+--------+------+--------+---------------+-----------+
| name | age | gender | id | telephone |
+--------+------+--------+---------------+-----------+
| 欧阳 | 18 | 男 | 2023090640127 | 123456 |
| 牛马 | 19 | 男 | 2023090640124 | 654123 |
+--------+------+--------+---------------+-----------+
6.3.4 修改某个字段名称
-
将以上表中的gender字段修改成sex
mysql> alter table student_table change gender sex varchar(10); --新字段需要完整定义
mysql> desc student_table;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| id | varchar(30) | YES | | NULL | |
| telephone | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6.3.5 删除某一个字段
-
删除id字段
mysql> alter table student_table drop id;
mysql> desc student_table;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| telephone | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6.3.6 修改某个字段的长度
-
修改name字段的长度为varchar(60)
mysql> alter table student_table modify name varchar(60);
mysql> desc student_table;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(60) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| telephone | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
MODIFY
用于修改列的数据类型或属性,但不能改变列名。CHANGE
可以修改列的数据类型、属性,并且可以改变列名。
6.4 删除表
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
drop table student_table;
mysql> drop table student_table;
mysql> show tables;
Empty set (0.00 sec)
原文地址:https://blog.csdn.net/2301_81577798/article/details/143835727
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!