DBA MySQL表相关操作

表的基本组成

​ 每一张数据表可以粗略的理解为一个表格文件,在数据表中又分为表结构、表记录、表元信息:

表结构:字段、字段约束等信息

表记录:数据表中的每一行数据(不包含字段行)等信息

元信息:字符编码、校对规则、存储引擎等信息

id name gender age
1 YunYa male 18
2 Jack male 17
3 Baby female 16

数据表操作

创建数据表

​ 语法介绍:

CREATE TABLE 表名(
	字段名1 类型(宽度) 约束条件1,约束条件2... COMMENT "字段描述信息",
	字段名2 类型(宽度) 约束条件1,约束条件2... COMMENT "字段描述信息"
) ENGINE 存储引擎 CHARSET 字符编码 COLLATE 校对规则;

​ 注意事项:

  1. 在同一张表中,字段名是不能相同
  2. 宽度和约束条件可选
  3. 字段名和类型是必须的
  4. 表中最后一个字段不要加逗号

​ 示例演示:

# 1. 必须进入数据库后才能建表
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT "学号",
    name CHAR(32) NOT NULL COMMENT "姓名",
    age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT "年龄",
    gender ENUM ("male", "female", "unknown") NOT NULL DEFAULT "male" COMMENT "性别",
    create_time DATETIME NOT NULL DEFAULT NOW() COMMENT "创建时间"
) ENGINE innodb CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

# 2.不进入数据库建表
# 在第一句基础上加上库名,示例:CREATE TABLE db1.students(...);
# 此外,在下面介绍的命令中很多命令都有这两种形式,不再进行一一例举

​ 建表规范:

  1. 表名为小写字母,不能使用数字开头
  2. 表名以及字段名不能是保留字符,请使用和业务有关的表名
  3. 为字段选择合适的数据类型及长度
  4. 尽量为每个字段设置 NOT NULL + DEFAULT ,对于数字类型请使用0进行填充,按照具体情况酌情应用
  5. 外键字段不设置NOT NULL,对于字符类的特殊字段如name等不设置DEFAULT,按照具体情况酌情应用
  6. 为每个字段设置描述信息
  7. 表必须设置存储引擎与字符集,可以不设置校对规则
  8. 主键字段尽量是无关列数字列,最好是自增长
  9. enum类型不要保存数字,只能是字符串类型

查看数据表

​ 三个基本命令,格式及描述信息如下:

# 必须进入某个数据库后方可使用,查看该库下所有数据表
SHOW TABLES;

# 查看表的创建信息,能够获取到表结构及元信息     
SHOW CREATE TABLE 表名;

# 查看表结构,仅能够获取到表结构 
DESC 表名;

​ 示例演示:

M > SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| students      |
+---------------+

M > SHOW CREATE TABLE students\G;
*************************** 1. row ***************************
       Table: students
Create Table: CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` char(32) NOT NULL COMMENT '姓名',
  `age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
  `gender` enum('male','female','unknown') NOT NULL DEFAULT 'male' COMMENT '性别',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

M > DESC students;
+-------------+---------------------------------+------+-----+-------------------+----------------+
| Field       | Type                            | Null | Key | Default           | Extra          |
+-------------+---------------------------------+------+-----+-------------------+----------------+
| id          | int(11)                         | NO   | PRI | NULL              | auto_increment |
| name        | char(32)                        | NO   |     | NULL              |                |
| age         | tinyint(3) unsigned             | NO   |     | 0                 |                |
| gender      | enum('male','female','unknown') | NO   |     | male              |                |
| create_time | datetime                        | NO   |     | CURRENT_TIMESTAMP |                |
+-------------+---------------------------------+------+-----+-------------------+----------------+

修改表名字

​ 使用以下命令格式修改表名:

ALTER TABLE 旧表名 RENAME 新表名;

​ 示例演示:

M > ALTER TABLE students RENAME new_name_stu;
M > SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| new_name_stu  |
+---------------+

M > ALTER TABLE new_name_stu RENAME students;
M > SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| students      |
+---------------+

清空数据表

​ 使用以下命令格式可将表中所有记录清空,并且对部分结构进行重置,如自增字段会恢复至初始值:

TRUNCATE 表名;

​ 示例演示,注意观察自增id,又是从1开始的:

M > INSERT INTO
    students(name, age, gender)
VALUES
    ("Jack", 19, "male"),
    ("Ken", 22, "male"),
    ("Angel", 21, "female");
    
M > SELECT * FROM students;
+----+-------+-----+--------+---------------------+
| id | name  | age | gender | create_time         |
+----+-------+-----+--------+---------------------+
|  1 | Jack  |  19 | male   | 2021-02-24 23:45:16 |
|  2 | Ken   |  22 | male   | 2021-02-24 23:45:16 |
|  3 | Angel |  21 | female | 2021-02-24 23:45:16 |
+----+-------+-----+--------+---------------------+

M > TRUNCATE students;

M > INSERT INTO
    students(name, age, gender)
VALUES
    ("Tom", 21, "male");

M > SELECT * FROM students;
+----+------+-----+--------+---------------------+
| id | name | age | gender | create_time         |
+----+------+-----+--------+---------------------+
|  1 | Tom  |  21 | male   | 2021-02-24 23:46:12 |
+----+------+-----+--------+---------------------+

删除数据表

​ 使用以下命令格式删除某张数据表:

DROP TABLE 表名;

​ 不再进行演示,生产中较少使用。

复制旧表创建新表

结构复制创建

​ 使用以下命令格式只复制表的结构而不复制记录,用于创建新的一张表:

CREATE TABLE 新表名 LIKE 旧表名;

基础复制创建

​ 使用以下命令格式可以复制基础表结构与所有记录,但不会复制主键、外键、索引,用于创建新的一张表:

CREATE TABLE 新表名 SELECT * FROM 旧表名;

选择复制创建

​ 使用以下命令格式可以对一张表的某些记录与字段进行复制,用于创建新的一张表:

CREATE TABLE 新表名 SELECT 字段1,字段2 FROM 旧表名;

表字段操作

新增字段

​ 新增字段的三种语法格式:

# 新增多字段
ALTER TABLE 表名
	ADD 新字段名1 数据类型 约束条件1,约束条件2...,
	ADD 新字段名2 数据类型 约束条件1,约束条件2...;
	
	
# 新增单字段,排在最前
ALTER TABLE 表名
	ADD 新字段名 数据类型 约束条件1,约束条件2... FIRST;


# 新增单字段,排在某字段后
ALTER TABLE 表名
	ADD 新字段名 数据类型 约束条件1,约束条件2... AFTER 旧字段名;

​ 示例演示:

M > ALTER TABLE students
		ADD classes CHAR(32) NOT NULL AFTER create_time;

修改字段

​ 修改字段的两种语法格式:

# MODIFY仅能修改数据类型与完整性约束条件
ALTER TABLE 表名
	MODIFY 被修改的字段名 数据类型 约束条件1,约束条件2...;

# CHANGE更加强大,相比于MODIFY还支持修改字段名
ALTER TABLE 表名
	CHANGE 旧字段名 新字段名 数据类型 约束条件1,约束条件2...;

​ 示例演示:

M > ALTER TABLE students
	CHANGE classes class VARCHAR(32) NOT NULL;

​ 如果不修改名字只修改其原本的类型或完整性约束条件,可使用MODIFY进行操作。

删除字段

​ 使用以下命令格式删除表的某一字段:

ALTER TABLE 表名 DROP 字段名;

​ 不再进行演示,生产中较少使用。

表元信息操作

存储引擎

​ 使用以下命令格式修改表的存储引擎:

ALTER TABLE 表名 ENGINE = 存储引擎;

字符集

​ 使用以下命令格式修改表的字符集:

ALTER TABLE 表名 CHARSET = 字符集;

校对规则

​ 使用以下命令格式修改表的校对规则:

ALTER TABLE 表名 COLLATE = 校对规则;
posted @ 2021-02-16 22:52  云崖君  阅读(80)  评论(0编辑  收藏  举报