当前位置: 首页 > article >正文

【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 语句时要谨慎,因为一旦执行该语句,表中的所有数据和表结构都会被永久删除,且无法恢复。


http://www.kler.cn/a/293587.html

相关文章:

  • 实现一个BLE HID鼠标
  • MySQ怎么使用语法介绍(详细)
  • jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
  • Rust 建造者模式
  • 【juc】AbstractQueuedSynchronized为什么采用双向链表
  • go reflect 反射
  • 算法:图片压缩算法【Z字行扫描】(Java实现)
  • 相亲交友系统商业开发
  • 【最新华为OD机试E卷-支持在线评测】分糖果(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 用ACF和PACF计算出一堆数据的周期个数以及周期时长,数据分析python
  • Linux系统练习笔记【完整版】
  • .NET/C#⾯试题汇总系列:⾯向对象
  • SpringBoot整合openApi
  • 数据分析的革命:Docker容器化在数据分析中的应用
  • ssm微信小程序校园失物招领论文源码调试讲解
  • 【HTML】置换元素(替换元素)
  • 什么是区块链?
  • vue3+ts项目import导入路径用@/报错找不到模块“@/components/也没有快捷提示
  • 小米红米系列机型 机型代码查询总目录 adb指令查询步骤
  • 【论文精读】SCINet-基于降采样和交互学习的时序卷积模型
  • 2024国赛数学建模ABC题思路模型
  • 软件测试学习笔记丨Pytest的使用
  • 【Pytorch实用教程】【分布式】torch.distributed.all_reduce用法详细介绍
  • 【.NET全栈】ASP.NET开发Web应用——LINQ技术
  • CentOS7.9下安装snmp
  • 目标检测-YOLOv6