MySQL实例结构

  • 一个MySQL实例对应一个MySQL进程和端口号
  • 一个MySQL实例对应一个管理员用户root
  • 每个MySQL实例管理一个或多个数据库
  • 每个数据库包含若干个表
  • 每个表包含由行构成的数据

数据库基本操作

查看数据库

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.03 sec)

上面四个数据库是MySQL的内建数据库,是供MySQL内部使用的,在MySQL安装完成后即会由系统创建。

创建数据库

mysql> CREATE DATABASE IF NOT EXISTS testdb;
Query OK, 1 row affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
5 rows in set (0.01 sec)

IF NOT EXISTS表示在不存在的情况下创建,如果已经存在则不创建。

切换当前数据库

mysql> USE testdb;
Database changed
  • 在创建表之前必须先指定当前数据库。
  • USE 数据库名 语句可以不接分号。
  • 可以在登录mysql时指定要连接的数据库,比如 mysql -hlocalhost -uroot -p123456 testdb

查看当前数据库

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| testdb     |
+------------+
1 row in set (0.00 sec)

删除数据库

mysql> DROP DATABASE IF EXISTS testdb;
Query OK, 0 rows affected (0.04 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

表的基本操作

查看表

SHOW TABLES FROM 数据库名;

如果已经设置了当前数据库,则只需要SHOW TABLES;即可。

创建表

CREATE TABLE IF NOT EXISTS 表名 (
	列名1    数据类型    [列的属性],
    列名2    数据类型    [列的属性],
    ...
    列名n    数据类型    [列的属性]
);

比如:

mysql> CREATE TABLE IF NOT EXISTS first_table (
    -> first_column INT,
    -> second_column VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.05 sec)

在创建表时可以为表添加注释,像下面这样:

CREATE TABLE 表名(
    列的信息 ...
)COMMENT '注释内容';

删除表

DROP TABLE IF EXISTS 表1, 表2, ..., 表n;

删除表和删除数据库一样都需要谨慎。

查看表结构

DESCRIBE 表名;
DESC 表名;
EXPLAIN 表名;
SHOW COLUMNS FROM 表名;
SHOW FIELDS FROM 表名;

比如:

mysql> DESCRIBE first_table;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| first_column  | int          | YES  |     | NULL    |       |
| second_column | varchar(100) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

如果想查看表的定义语句,则可以使用SHOW CREATE TABLE first_table\G,如下:

mysql> SHOW CREATE TABLE first_table\G
*************************** 1. row ***************************
       Table: first_table
Create Table: CREATE TABLE `first_table` (
  `first_column` int DEFAULT NULL,
  `second_column` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)


上面的许多语句在未设置当前数据库的情况下也可以执行,只需要使用数据库名.表名的方式指定表即可,比如:

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

mysql> DESC testdb.first_table;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| first_column  | int          | YES  |     | NULL    |       |
| second_column | varchar(100) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE testdb.first_table\G
*************************** 1. row ***************************
       Table: first_table
Create Table: CREATE TABLE `first_table` (
  `first_column` int DEFAULT NULL,
  `second_column` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

修改表

修改表名

ALTER TABLE 旧表名 RENAME TO 新表名;
RENAME TABLE 旧表名1 TO 新表名1, 旧表名2 TO 新表名2, ... 旧表名n TO 新表名n;

如果在修改表名的同时指定了数据库名,还可以把这张表转移到对应的数据库下面,比如:

CREATE TABLE dahaizi;
ALTER TABLE first_table RENAME TO dahaizi.first_table;

增加列

ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [列的属性];
ALTER TABLE first_table ADD COLUMN third_column CHAR(4);

可以指定增加列的特定位置,比如放到第一列。默认情况下新增列都会被放到最后一列。

添加到第一列:

ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [列的属性] FIRST;

添加到指定列的后面:

ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [列的属性] AFTER 指定列名;

删除列

ALTER TABLE 表名 DROP COLUMN 列名;

修改列信息

方式一:

ALTER TABLE 表名 MODIFY 列名 新数据类型 [新属性];

修改后的数据类型和属性一定要兼容表中现有的数据,比如VARCHAR(100)兼容VARCHAR(3)。

方式二:

ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型 [新属性];

修改列的排列位置

ALTER TABLE 表名 MODIFY 列名 列的类型 列的属性 FIRST;
ALTER TABLE 表名 MODIFY 列名 列的类型 列的属性 AFTER 指定列名;

一条语句中可以包含多个操作,比如:

ALTER TABLE first_table DROP COLUMN third_column, DROP COLUMN fourth_column, DROP COLUMN fifth_column;

简单的查询和插入

查询

SELECT * FROM 表名;
SELECT 列名1, 列名2 ...列名n FROM 表名;

插入

INSERT INTO 表名(列1, 列2, ...) VALUES(列1的值, 列2的值, ...);
INSERT INTO 表名(列1, 列2, ...) VALUES(列1的值, 列2的值, ...), (列1的值, 列2的值, ...), (列1的值, 列2的值, ...),...;

可以只指定部分的列,没有显式指定的列的值将被置为NULL。
























  • 无标签