【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、gender
;ENUM
表示枚举类型,只能选择给出的选项,在此表中表示男或女。
对于创建的表,可以使用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_1
;ADD 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 语句时要谨慎,因为一旦执行该语句,表中的所有数据和表结构都会被永久删除,且无法恢复。