您的位置:首页 > 健康 > 养生 > 【2024】MySQL库表基本操作

【2024】MySQL库表基本操作

2024/12/23 3:49:05 来源:https://blog.csdn.net/qq_42527269/article/details/141938158  浏览:    关键词:【2024】MySQL库表基本操作

目录

  • 登录数据库
  • 创建数据库
    • 直接创建数据库
    • 使用IF NOT EXISTS方式创建
    • 查看数据库信息
    • 删除数据库
  • 数据表操作
    • 创建数据表
    • 增加新字段
    • 插入数据
    • 删除数据表

登录数据库

首先登录到数据库:输入用户名和密码登录到数据库内部

[root@localhost ~]# mysql -uroot -p
Enter password: 
... ...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

可以输入SELECT VERSION();查看版本

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.4.2     |
+-----------+
1 row in set (0.01 sec)

可以看到当前MySQL版本为8.4.2

创建数据库

直接创建数据库

创建数据库之前可以先查一下当前存在哪些库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mena               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

可看到当前存在5个库。

创建数据库可使用create database语句,比如我们要创建一个student库,可以这样:

mysql> create database student;
Query OK, 1 row affected (0.02 sec)

再使用show databases;命令查看如果成功就可以看到创建的库。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mena               |
| mysql              |
| performance_schema |
| student            |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

使用IF NOT EXISTS方式创建

这个语句的含义是如果不存在此数据库则创建,如果存在则忽略命令而不会报错。

mysql> create database if not exists student;
Query OK, 1 row affected, 1 warning (0.01 sec)

推荐使用这种方式创建,不会出现不必要的保错。

查看数据库信息

除了上述的show databases;可以查看存在哪些数据库外,还可以通过其他语句查看一些其他内容。

了解数据库的字符集、排序规则等内容

mysql> show create database student;
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                   |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| student  | CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

这条命令会显示创建该数据库的 SQL 语句,从中可以了解到数据库的字符集、排序规则等详细信息。

删除数据库

对于不想保留的数据库,可使用DROP DATABASE语句进行删除

mysql> drop database mena;
Query OK, 1 row affected (0.05 sec)

也可以加上 IF EXISTS使语句更合理,避免报错。

数据表操作

创建表之前,首先进入到一个库内部,查看存在哪些表

mysql> use student;
Database changed
mysql> show tables;
Empty set (0.01 sec)

创建数据表

创建一个一年级学生信息的数据表

mysql> CREATE TABLE IF NOT EXISTS grade_1 (-> id INT AUTO_INCREMENT PRIMARY KEY,-> name VARCHAR(20) NOT NULL,-> age INT NOT NULL,-> gender ENUM('男','女') NOT NULL-> );
Query OK, 0 rows affected (1.00 sec)

这个SQL语句的含义为:

创建一个名为grade_1的表,AUTO_INCREMENT表示这个字段的值会自动递增;PRIMARY KEY表明这个字段是表的主键,用于唯一确定表中的每一行记录。

这个表共有四个字段,分别为id、name、age、genderENUM表示枚举类型,只能选择给出的选项,在此表中表示男或女。

对于创建的表,可以使用describe语句查看表结构,可缩写。

mysql> DESC grade_1;
+--------+-------------------+------+-----+---------+----------------+
| Field  | Type              | Null | Key | Default | Extra          |
+--------+-------------------+------+-----+---------+----------------+
| id     | int               | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20)       | NO   |     | NULL    |                |
| age    | int               | NO   |     | NULL    |                |
| gender | enum('男','女')    | NO   |     | NULL    |                |
+--------+-------------------+------+-----+---------+----------------+
4 rows in set (0.04 sec)

其中:

Field表示表中每个字段
Type表示字段的数据类型
Null表示当前字段值是否可以为空
Key表示当前字段是否存在索引,PRI表示主键,这里id字段为主键
Default表示该字段的默认值,NULL表示没有默认值
Extra表示该字段的额外属性,“auto_increment” 表示 “id” 字段的值会自动递增。

也可通过show create tanle 表名查看

mysql> show create table grade_1 \G;
*************************** 1. row ***************************Table: grade_1
Create Table: CREATE TABLE `grade_1` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`age` int NOT NULL,`gender` enum('男','女') NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

除了一些创建表的常规信息,还列出了存储引擎类型,这里是InnoDB;默认的字符集为utf8mb4;字符集排序规则,这里是utf8mb4_0900_ai_ci

增加新字段

如果想添加新的字段加入现有表,可以使用下面的语句。
比如:我想为表中添加一个出生年月的列

mysql> ALTER TABLE grade_1 ADD COLUMN birth_date DATE NOT NULL AFTER gender;
Query OK, 0 rows affected (1.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

语句含义:使用ALTER TABLE修改表的结构,也就是表grade_1ADD COLUMN表示添加一个新的字段,字段名为birth_date;类型为DATE(日期类型)且不为空;AFTER gender表示新的字段放在gender字段之后。

除了使用AFTER表示放在哪个字段之后,还可以使用FRIST表示放在表的第一列。

mysql> describe grade_1;
+------------+-------------------+------+-----+---------+----------------+
| Field      | Type              | Null | Key | Default | Extra          |
+------------+-------------------+------+-----+---------+----------------+
| id         | int               | NO   | PRI | NULL    | auto_increment |
| name       | varchar(20)       | NO   |     | NULL    |                |
| age        | int               | NO   |     | NULL    |                |
| gender     | enum('男','女')   | NO   |     | NULL    |                |
| birth_date | date              | NO   |     | NULL    |                |
+------------+-------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

可以看到最后一行已经可以看到出生年月的字段了。

插入数据

虽然表有了,但是此时表为空,没有任何内容,现在可以尝试向表中插入数据了。
示例:使用INSERT INTO语句插入一名名为张三的学生信息

mysql> INSERT INTO grade_1 (name, age, gender, birth_date) VALUES ('张三', 7, '男', '2017-05-10');
Query OK, 1 row affected (0.01 sec)

通过select语句查看表内内容

mysql> select * from grade_1;
+----+--------+-----+--------+------------+
| id | name   | age | gender | birth_date |
+----+--------+-----+--------+------------+
|  1 | 张三   |   7 || 2017-05-10 |
+----+--------+-----+--------+------------+
1 row in set (0.00 sec)

此时可以看到名为张三的学员信息了。

但是如果有多个人员信息需要插入,这样显然不太方便,因此可以使用以下的方法

mysql> INSERT INTO grade_1 (name, age, gender, birth_date) -> VALUES ('赵六', 7, '女', '2017-07-12'),->        ('孙七', 7, '男', '2017-04-18'),->        ('周八', 7, '女', '2017-08-05');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

此时再查看

mysql> select * from grade_1;
+----+--------+-----+--------+------------+
| id | name   | age | gender | birth_date |
+----+--------+-----+--------+------------+
|  1 | 张三   |   7 || 2017-05-10 |
|  2 | 赵六   |   7 || 2017-07-12 |
|  3 | 孙七   |   7 || 2017-04-18 |
|  4 | 周八   |   7 || 2017-08-05 |
+----+--------+-----+--------+------------+
4 rows in set (0.00 sec)

可以看到几人的信息了,但是如果有大量的人员信息要录入该怎么办?
可以使用导入的方式,具体如下:
先准备一个人员的信息表

# cat student.txt 
熊大,7,男,2017-09-10
熊二,7,男,2017-09-11

然后使用sql语句导入信息,确保你的MySQL开启了此功能。
在配置文件中加入此配置开启

[mysqld]
local-infile=1[client]
local-infile=1

使用以下命令导入

mysql> LOAD DATA LOCAL INFILE '/data/student.txt' INTO TABLE grade_1-> FIELDS TERMINATED BY ','-> LINES TERMINATED BY '\n'-> (name, age, gender, birth_date);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

LOAD DATA LOCAL INFILE是 MySQL 的一个指令,用于从本地文件系统加载数据到数据库表中。
FIELDS TERMINATED BY ','表示字段以逗号作为分隔符
LINES TERMINATED BY '\n'表示行是以换行符\n作为结束标志

接下来查看此表中数据

mysql> select * from grade_1;
+----+--------+-----+--------+------------+
| id | name   | age | gender | birth_date |
+----+--------+-----+--------+------------+
|  1 | 张三   |   7 || 2017-05-10 |
|  2 | 赵六   |   7 || 2017-07-12 |
|  3 | 孙七   |   7 || 2017-04-18 |
|  4 | 周八   |   7 || 2017-08-05 |
|  5 | 熊大   |   7 || 2017-09-10 |
|  6 | 熊二   |   7 || 2017-09-11 |
+----+--------+-----+--------+------------+
6 rows in set (0.01 sec)

可以看到熊大熊二两条数据已经插入成功。

删除数据表

如果这个表不想要了,可以使用以下语句删除

DROP TABLE grade_1;

使用 DROP TABLE 语句时要谨慎,因为一旦执行该语句,表中的所有数据和表结构都会被永久删除,且无法恢复。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com