MySQL创建和管理表

1. 基础知识

存储数据是处理数据的第一步,只有正确地把数据存储起来,才能进行有效的处理和分析。

在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。

从系统架构的层次上看,MySQL 数据库系统从大到小依次是数据库服务器、数据库、数据表、数据表的行与列。

标识符命名规则

  • 数据库名、表名不得超过30个字符,变量名限制为29个;
  • 必须只能包含 A--Z, a--z, 0--9, _共63个字符;
  • 数据库名、表名、字段名等对象名中间不要包含空格;
  • 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名;
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突,如果坚持使用,请在SQL语句中使用`(着重号)引起来;
  • 保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里不能变成字符型;

MySQL中的数据类型

2. 创建和管理数据库

2.1. 创建数据库

方式1:创建数据库

复制代码
CREATE DATABASE 数据库名;

方式2:创建数据库并指定字符集

复制代码
CREATE DATABASE 数据库名 CHARACTER SET 字符集;

方式3:判断数据库是否已经存在,不存在则创建数据库

复制代码
CREATE DATABASE IF NOT EXISTS 数据库名;

DATABASE 不能改名,一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的。

2.2. 使用数据库

查看当前所有的数据库

复制代码
SHOW DATABASES;

查看当前正在使用的数据库

复制代码
SELECT DATABASE();

查看指定库下所有的表

复制代码
SHOW TABLES FROM 数据库名;

查看数据库的创建信息

复制代码
SHOW CREATE DATABASE 数据库名;
或者
SHOW CREATE DATABASE 数据库名\G
使用/切换数据库

USE 数据库名;

要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上"数据库名."。

2.3. 修改数据库

更改数据库字符集

复制代码
ALTER DATABASE 数据库名 CHARACTER SET 字符集;

2.4. 删除数据库

方式1:删除指定的数据库

复制代码
DROP DATABASE 数据库名;

方式2:删除指定的数据库

复制代码
DROP DATABASE IF EXISTS 数据库名;

3. 创建表

3.1. 创建表方式一

登录的账号需要具备CREATE TABLE权限和存储空间的权限。

语法格式:

复制代码
CREATE TABLE [IF NOT EXISTS] 表名(
字段1, 数据类型 [约束条件] [默认值],
字段2, 数据类型 [约束条件] [默认值],
字段3, 数据类型 [约束条件] [默认值],
......
[表约束条件]
);

加上IF NOT EXISTS关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。

必须指定表名、列名(或字段名)、数据类型及长度。

复制代码
示例: 创建emp表

-- 创建表
CREATE TABLE emp (
emp_id INT,
name VARCHAR(50),
position VARCHAR(50),
salary DOUBLE,
hire_data DATE
);

-- 显示表结构,DESC是DESCRIBE的缩写
DESC emp;
复制代码
示例: 创建dept表

CREATE TABLE dept(
-- int类型,自增
deptno INT(2) AUTO_INCREMENT,
dname VARCHAR(14),
loc VARCHAR(13),
-- 主键
PRIMARY KEY (deptno)
);
-- 查看表结构
DESCRIBE dept;

3.2. 创建表方式二

使用 AS subquery 选项,将创建表和插入数据结合起来。

复制代码
CREATE TABLE talbe
  [(column,column...)]
AS subquery;

指定的列和子查询中的列要一一对应'

通过列名和默认值定义列;

示例:创建emp1表并把emplyees表的数据插入到emp1中

复制代码
CREATE TABLE emp1 AS SELECT * FROM employees;

示例:创建emp2表,但不插入数据,使用条件where 1=2的值是false,故只按employees表结构创建emp2表,但不插入数据

复制代码
CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2;

示例:按指定字段创建dept80表并把employees表中department_id为80的数据插入表中

复制代码
CREATE TABLE dept80
AS
SELECT employee_id, last_name, salary*12 ANNSAL, hire_date
FROM employees
WHERE department_id = 80;

3.3. 查看数据表结构

MySQL支持使用DESCRIBE/DESC 语句查看数据表结构,也支持使用SHOW CREATE TABLE 语句查看数据表结构。

语法格式如下:

复制代码
SHOW CREATE TABLE 表名\G

使用SHOW CREATE TABLE语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。

4. 修改表

修改表指的是修改数据库中已经存在的数据表的结构。

使用 ALTER TABLE 语句可以实现:

向已有的表中添加列

修改现有表中的列

删除现有表中的列

重命名现有表中的列

4.1. 增加一个列

ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;

示例:向表dept80增加一列job_id

复制代码
ALTER TABLE dept80 ADD job_id varchar(15);

4.2. 修改一个列

可以修改列的数据类型,长度、默认值和位置;

复制代码
ALTER TABLE 表名 MODIFY 【COLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名2】;

示例:修改dept80表的last_name表字符串长度为30

ALTER TABLE dept80 MODIFY last_name VARCHAR(30);

示例:修改dept80表的salary字段为double类型,长度为9,小数点后2位,默认值为1000

ALTER TABLE dept80
MODIFY salary double(9,2) default 1000;

4.3. 重命名一个列

复制代码
ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;

示例:修改dept80表中department_name为dept_name

ALTER TABLE dept80
CHANGE department_name dept_name varchar(15);

4.4. 删除一个列

复制代码
ALTER TABLE 表名 DROP 【COLUMN】字段名

示例:删除dept80的job_id列

ALTER TABLE dept80 DROP COLUMN job_id;

5. 重命名表

方式一:使用RENAME

复制代码
RENAME TABLE emp TO myemp;

方式二:

复制代码
ALTER table dept RENAME [TO] detail_dept; -- [TO]可以省略

必须是对象的拥有者才可以重命名表。

6. 删除表

在MySQL中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除。

复制代码
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, ..., 数据表n];

IF EXISTS 的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。

示例:删除dept80表

复制代码
DROP TABLE dept80;

DROP TABLE 语句不能回滚

7. 清空表

TRUNCATE TABLE语句,删除表中所有的数据,释放表的存储空间。

示例:

复制代码
TRUNCATE TABLE detail_dept;

TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚。

TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

相关推荐
数智化管理手记6 小时前
精益生产中的TPM管理是什么?一文破解设备零故障的密码
服务器·网络·数据库·低代码·制造·源代码管理·精益工程
翊谦6 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
難釋懷7 小时前
OpenResty实现Redis查询
数据库·redis·openresty
别抢我的锅包肉7 小时前
【MySQL】第四节 - 多表查询、多表关系全解析
数据库·mysql·datagrip
Database_Cool_7 小时前
OpenClaw-Observability:基于 DuckDB 构建 OpenClaw 的全链路可观测体系
数据库·阿里云·ai
刘~浪地球8 小时前
Redis 从入门到精通(五):哈希操作详解
数据库·redis·哈希算法
zzh0818 小时前
MySQL高可用集群笔记
数据库·笔记·mysql
Shely20179 小时前
MySQL数据表管理
数据库·mysql
爬山算法9 小时前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
APguantou9 小时前
NCRE-三级数据库技术-第2章-需求分析
数据库·需求分析