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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从 CRX 文件安装 Chrome 扩展程序
  • 安卓13带有系统签名的应用不能正常使用webview 调用webview失败 系统应用app apk
  • 突破代码:克服编程学习中的挫折感
  • 创建一个Oracle版本的JDK的Docker镜像
  • C++笔记15•数据结构:二叉树之二叉搜索树•
  • STM32 系列MCU 开发利器 STM32CubeIDE
  • Pandas_[‘index‘]_is_not_found_in_axis
  • 解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案
  • 【IEEE出版,IEEE Xplore等多数据库检索】第五届智能设计国际会议(ICID 2024,10月25-27)
  • Excel如何把表格变成图表
  • 什么叫做 “沿着晶体平面偏析”
  • 优质的产业园都在怎么做运营?
  • 想开公司不知道需要什么资料?
  • NXP,S32K1XX J-Link调试器 J-Flash烧录指南
  • 项目实战系列三: 家居购项目 第三部分
  • Brief introduction of how to 'Call, Apply and Bind'
  • CentOS 7 防火墙操作
  • echarts花样作死的坑
  • gops —— Go 程序诊断分析工具
  • input实现文字超出省略号功能
  • JAVA之继承和多态
  • Linux Process Manage
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • python 装饰器(一)
  • Vue 重置组件到初始状态
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 大整数乘法-表格法
  • 搞机器学习要哪些技能
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 将回调地狱按在地上摩擦的Promise
  • 前端相关框架总和
  • 想写好前端,先练好内功
  • 原生 js 实现移动端 Touch 滑动反弹
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 自动记录MySQL慢查询快照脚本
  • 阿里云ACE认证学习知识点梳理
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (09)Hive——CTE 公共表达式
  • (5)STL算法之复制
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Python) SOAP Web Service (HTTP POST)
  • (阿里云万网)-域名注册购买实名流程
  • (不用互三)AI绘画工具应该如何选择
  • (第二周)效能测试
  • (四)软件性能测试
  • (一)为什么要选择C++
  • (译) 函数式 JS #1:简介
  • (转)mysql使用Navicat 导出和导入数据库
  • *2 echo、printf、mkdir命令的应用
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net Redis的秒杀Dome和异步执行
  • .NET的微型Web框架 Nancy
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET构架之我见