MySQL之创建和管理表

目录

[1. MySQL中的数据类型​编辑​编辑](#1. MySQL中的数据类型编辑编辑)

[2. 创建和管理数据库](#2. 创建和管理数据库)

方式1:创建数据库

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

[方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 )](#方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 ))

总结

[2.2 使用数据库](#2.2 使用数据库)

查看当前所有的数据库

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

查看指定库下所有的表

查看数据库的创建信息

使用/切换数据库

总结

[2.3 修改数据库](#2.3 修改数据库)

更改数据库字符集

总结

[2.4 删除数据库](#2.4 删除数据库)

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

[方式2:删除指定的数据库( 推荐 )](#方式2:删除指定的数据库( 推荐 ))

总结

[3. 创建表](#3. 创建表)

[3.1 创建方式1](#3.1 创建方式1)

必须具备:

语法格式:

必须指定:

可选指定:

[3.2 创建方式2](#3.2 创建方式2)

[4. 修改表](#4. 修改表)

[使用 ALTER TABLE 语句可以实现](#使用 ALTER TABLE 语句可以实现)

[4.1 追加一个列](#4.1 追加一个列)

语法格式

举例:

[4.2 修改一个列](#4.2 修改一个列)

语法格式:

举例

[4.3 重命名一个列](#4.3 重命名一个列)

语法格式

举例:

[4.4 删除一个列](#4.4 删除一个列)

语法格式

举例

[5. 重命名表](#5. 重命名表)

方式一:使用RENAME

方式二:

[6. 删除表](#6. 删除表)

语法格式

举例

[7. 清空表](#7. 清空表)

[TRUNCATE TABLE语句:](#TRUNCATE TABLE语句:)

如:

大总结


1. MySQL中的数据类型

**2.**创建和管理数据库

方式1:创建数据库

sql 复制代码
CREATE DATABASE 数据库名;

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

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

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

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

如果 MySQL 中已经存在相关的数据库,则忽略创建语句,不再创建数据库。

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

总结

sql 复制代码
数据库的创建
     创建数据库
     create database 数据库名;
     判断在创建数据库
     create database if not exists 数据库名;
     创建数据库指定字符集
     create database 数据库名 character set 字符集;
     创建数据库指定排序方式
     create database 数据库名 collate 排序方式;
     创建数据库指定字符集和排序方式
     create database 数据库名 character set 字符集 collate 排序方式;
     查询数据库的字符集和排序方式
     mysql18:默认 utf8mb4 utf8mb4_0900_ai_ci
     show variables like 'character_set_database';
     show variables like 'collate_database';

2.2****使用数据库

查看当前所有的数据库

sql 复制代码
SHOW DATABASES; #有一个S,代表多个数据库

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

sql 复制代码
SELECT DATABASE(); #使用的一个 mysql 中的全局函数

查看指定库下所有的表

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

查看数据库的创建信息

sql 复制代码
SHOW CREATE DATABASE 数据库名;
或者:
SHOW CREATE DATABASE 数据库名\G

使用/切换数据库

sql 复制代码
USE 数据库名;

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

据库名."。

总结

sql 复制代码
1.2 数据库查看
      查看所有库
      show databases;
      查看当前使用库
      select database();
      查看库下所有表
      show tables from 数据库名;
      查看创建库的信息和语句
      show create database 数据库名;
      选中和切换库;
      use 数据库名;
      注意: 对数据进行操作之前,必须要选中库! use 数据库; use 数据库名;

2.3****修改数据库

更改数据库字符集

sql 复制代码
ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbk、utf8等

总结

sql 复制代码
1.3 数据库修改
  修改字符集
  alter database 数据库名 character set 字符集;
  修改排序方式
  alter database 数据库名 collate 排序方式;
  修改字符集和排序方式
  alter database 数据库名 character set 字符集 collate 排序方式;
  注意: 数据库中没有修改名称的指令,如果你想改名字,备份数据,删除旧库,创建新库,恢复数据即可!

2.4****删除数据库

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

sql 复制代码
DROP DATABASE 数据库名;

方式2:删除指定的数据库( 推荐 )

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

总结

sql 复制代码
 1.4 数据库删除
      直接删除
      drop database 数据库名;
      判断删除
      drop database if exists 数据库名;
      注意: 删除是一个危险命令,确认明确,再操作!!

**3.**创建表

sql 复制代码
 修改和删除表
      修改表中列
        添加列
          alter table 表名 add 列名 类型 [first|alter 列名] ;
        修改列名
          alter table 表名 change 原列名 新列名 新类型 [first|alter 列名] ;
        修改列类型
          alter table 表名 modify 列名 新类型 [first|alter 列名] ;
        删除列
          alter table 表名 drop 列名;
      修改表名
         alter table rename [to] 新表名;
      删除表
         drop table [if exists ] 表名;
      清空表数据
         truncate  table 表名;

3.1创建方式1

必须具备:

  • CREATE TABLE权限
  • 存储空间

语法格式:

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

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

必须指定:

  1. 表名
  2. 列名(或字段名),数据类型,长度

可选指定:

  1. 约束条件
  2. 默认值
sql 复制代码
-- 创建表
CREATE TABLE emp (
-- int类型
emp_id INT,
-- 最多保存20个中英文字符
emp_name VARCHAR(20),
-- 总位数不超过15位
salary DOUBLE,
-- 日期类型
birthday DATE
);

3.2创建方式2

  1. 使用 AS subquery 选项,将创建表和插入数据结合起来
  2. 指定的列和子查询中的列要一一对应
  3. 通过列名和默认值定义列
sql 复制代码
CREATE TABLE emp1 AS SELECT * FROM employees;
CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; -- 创建的emp2是空表
sql 复制代码
CREATE TABLE dept80
AS
SELECT employee_id, last_name, salary*12 ANNSAL, hire_date
FROM employees
WHERE department_id = 80;
DESCRIBE dept80;

**4.**修改表

sql 复制代码
 修改和删除表
      修改表中列
        添加列
          alter table 表名 add 列名 类型 [first|alter 列名] ;
        修改列名
          alter table 表名 change 原列名 新列名 新类型 [first|alter 列名] ;
        修改列类型
          alter table 表名 modify 列名 新类型 [first|alter 列名] ;
        删除列
          alter table 表名 drop 列名;
      修改表名
         alter table rename [to] 新表名;
      删除表
         drop table [if exists ] 表名;
      清空表数据
         truncate  table 表名;

使用ALTER TABLE语句可以实现

  1. 向已有的表中添加列
  2. 修改现有表中的列
  3. 删除现有表中的列
  4. 重命名现有表中的列

4.1****追加一个列

语法格式

sql 复制代码
ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;

举例:

sql 复制代码
SHOW CREATE TABLE 表名\G
ALTER TABLE dept80
ADD job_id varchar(15);

4.2****修改一个列

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

语法格式:

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

举例

sql 复制代码
ALTER TABLE dept80
MODIFY last_name VARCHAR(30);
sql 复制代码
ALTER TABLE dept80
MODIFY salary double(9,2) default 1000;

4.3****重命名一个列

使用 CHANGE old_column new_column dataType子句重命名列。

语法格式

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

举例:

sql 复制代码
ALTER TABLE dept80
CHANGE department_name dept_name varchar(15);

4.4****删除一个列

删除表中某个字段的

语法格式

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

举例

sql 复制代码
ALTER TABLE dept80
DROP COLUMN job_id;

**5.**重命名表

sql 复制代码
 修改和删除表
      修改表中列
        添加列
          alter table 表名 add 列名 类型 [first|alter 列名] ;
        修改列名
          alter table 表名 change 原列名 新列名 新类型 [first|alter 列名] ;
        修改列类型
          alter table 表名 modify 列名 新类型 [first|alter 列名] ;
        删除列
          alter table 表名 drop 列名;
      修改表名
         alter table rename [to] 新表名;
      删除表
         drop table [if exists ] 表名;
      清空表数据
         truncate  table 表名;

方式一:使用RENAME

sql 复制代码
RENAME TABLE emp
TO myemp;

方式二:

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

必须是对象的拥有

6. 删除表

sql 复制代码
 修改和删除表
      修改表中列
        添加列
          alter table 表名 add 列名 类型 [first|alter 列名] ;
        修改列名
          alter table 表名 change 原列名 新列名 新类型 [first|alter 列名] ;
        修改列类型
          alter table 表名 modify 列名 新类型 [first|alter 列名] ;
        删除列
          alter table 表名 drop 列名;
      修改表名
         alter table rename [to] 新表名;
      删除表
         drop table [if exists ] 表名;
      清空表数据
         truncate  table 表名;
  1. 在MySQL中,当一张数据表 没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。
  2. 数据和结构都被删除
  3. 所有正在运行的相关事务被提交
  4. 所有相关索引被删除

语法格式

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

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

举例

sql 复制代码
DROP TABLE dept80;

注意:DROP TABLE 语句不能回滚

7. 清空表

sql 复制代码
 修改和删除表
      修改表中列
        添加列
          alter table 表名 add 列名 类型 [first|alter 列名] ;
        修改列名
          alter table 表名 change 原列名 新列名 新类型 [first|alter 列名] ;
        修改列类型
          alter table 表名 modify 列名 新类型 [first|alter 列名] ;
        删除列
          alter table 表名 drop 列名;
      修改表名
         alter table rename [to] 新表名;
      删除表
         drop table [if exists ] 表名;
      清空表数据
         truncate  table 表名;

TRUNCATE TABLE语句:

  • 删除表中所有的数据
  • 释放表的存储空间

如:

sql 复制代码
TRUNCATE TABLE detail_dept;

大总结

sql 复制代码
/*
 1.1数据库的创建
     创建数据库
     create database 数据库名;
     判断在创建数据库
     create database if not exists 数据库名;
     创建数据库指定字符集
     create database 数据库名 character set 字符集;
     创建数据库指定排序方式
     create database 数据库名 collate 排序方式;
     创建数据库指定字符集和排序方式
     create database 数据库名 character set 字符集 collate 排序方式;
     查询数据库的字符集和排序方式
     mysql18:默认 utf8mb4 utf8mb4_0900_ai_ci
     show variables like 'character_set_database';
     show variables like 'collate_database';
 */

/*练习:
          创建ddl_d1库,指定字符集为utf8,且排序方式用大小写敏感的utf8mb4_0900_as_cs模式
*/
CREATE DATABASE IF NOT EXISTS ddl_d1 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;


/*1.2 数据库查看
      查看所有库
      show databases;
      查看当前使用库
      select database();
      查看库下所有表
      show tables from 数据库名;
      查看创建库的信息和语句
      show create database 数据库名;
      选中和切换库;
      use 数据库名;
      注意: 对数据进行操作之前,必须要选中库! use 数据库; use 数据库名;
*/

SHOW DATABASES;

SELECT DATABASE();

USE mysql;

SHOW TABLES FROM mysql;

SHOW CREATE DATABASE ddl_d1;


/*
1.3 数据库修改
  修改字符集
  alter database 数据库名 character set 字符集;
  修改排序方式
  alter database 数据库名 collate 排序方式;
  修改字符集和排序方式
  alter database 数据库名 character set 字符集 collate 排序方式;
  注意: 数据库中没有修改名称的指令,如果你想改名字,备份数据,删除旧库,创建新库,恢复数据即可!
*/


/*
  1.4 数据库删除
      直接删除
      drop database 数据库名;
      判断删除
      drop database if exists 数据库名;
      注意: 删除是一个危险命令,确认明确,再操作!!
*/

# 2. DDL之数据表操作
/*
  2.1 建表语法
  建表语法总结

   create table [if not exist] 表名(
     # 列的信息
     列名 类型 [列的约束] [列的注释],
     列名 类型 [列的约束] [列的注释],
     ...
     列名 类型 [列的约束] [列的注释]

   )[描述][注释]

  建表事项
    1. 表名 列名 列类型必须填写的
    2. 推荐使用if not exists
    3. 注释不是必须得,但是是很有必要的!
    4. 列之间使用,隔开,最后一列没有,
*/

CREATE DATABASE IF NOT EXISTS book_libs CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;

USE book_libs;


CREATE TABLE IF NOT EXISTS books(
  # 列的信息
  book_name VARCHAR(20) COMMENT '图书名',
  book_price DOUBLE(4,1) COMMENT '图书价格',
  book_num INT COMMENT '图书数量'
)CHARSET = utf8mb4 COMMENT '图书表';



SHOW TABLES FROM book_libs;


/*
  2.3 建表类型[整数]
  整数类型(类型,占有空间,范围)

  标准sql:
     int / integer   4字节  无符号 0 - 2/32-1  有符号 -2 31 / 2 / 31 -1
     smallint        2字节  无符号 0 - 2/16-1  有符号 -2 17 / 2 / 17 -1

  mysql方言:

     tinyint         1字节  无符号 0 - 2/8 -1  有符号 -2 7 / 2/7-1
     mediumint       3字节  无符号 0 - 2/24 -1  有符号 -2 23 / 2/23-1
     bigint          8字节  无符号 0 - 2/64 -1  有符号 -2 63 / 2/63-1

  有符号: 列名 整数类型 -> 有符号| 有符号 有负值和正值
          列名 整数类型 unsigned -> 无符号|无符号 没有负值,都是正值,将负值部分,绝对值后,加入正值部分!

  注意: 选合适范围,范围合适先占有空间最小的!

  创建一个ddl_d1库中,创建一个t1表,包含: 年龄和学号(范围不确定,但是没有负值)

*/

CREATE TABLE t1(
   t1_age TINYINT UNSIGNED COMMENT '年龄,无符号,范围就是 0 - 255',
   t1_number BIGINT UNSIGNED COMMENT '学号,最大的,且没有负号'
);

/*
  2.4 建表类型[浮点/定值]
  浮点类型(类型,M,D)
     float(m,d)   4字节   m 24   d 8
     double(m,d)  8字节   m 53   d 30
  定值类型(类型,M,D)
     decimal(m,d) 动态占有 m 65   d 30
  使用对比:
     精度要求不高,例如:身高,体重 float / double
     精度要求特别高,钱 工资,价格 decimal

*/


/*
  2.5 建表类型[浮点/定值]
  浮点类型(类型,M,D)
     float(m,d)   4字节   m 24   d 8
     double(m,d)  8字节   m 53   d 30
  定值类型(类型,M,D)
     decimal(m,d) 动态占有 m 65   d 30
  使用对比:
     精度要求不高,例如:身高,体重 float / double
     精度要求特别高,钱 工资,价格 decimal

*/


/*
  2.6 建表类型[字符串]
  字符串类型
     char 固定长度类型 一旦声明固定占有对应的空间 M 最大255 [性能较好]
     varchar 可变长度类型 一旦声明,可以插入小于的长度,自动进行伸缩 M 占有的空间不能超过一行的最大显示65535字节 [性能一般]
     text 大文本类型,声明不要指定长度,有固定的大小限制, text [65535] , 不占有一行的最大限制空间
  细节理解
     1. char声明的时候可以不写m char = char(1)
     2. char声明了最大长度限制,输入的文本小于长度限制,会在右侧补全空格 char(5) -> 'abc' -> 'abc  '
     3. char类型在读取的时候,会自动去掉右侧的空格 'abc  ' -> 'abc'
     4. varchar声明的时候,必须添加m限制 varchar(m)
     5. mysql4.0以下版本 varchar(20) -> 20字节限制  mb3 -> 6
     6. mysql5.0以上版本 varchar(20) -> 20字符限制
     7. varchar类型中识别空格,插入空格 读取也是有空格
  演示varchar最大限制
     前提: mysql中一行数据最大的占有空间是65535字节,除了TEXT or BLOBs类型的列(不占有65535限制 法外狂徒)
           一行-> name1列 -> name1列占有的最大空间65535字节
           varchar类型默认会使用1字节标识是否为null -> 65535-1 = 65534字节
           字符集utf8mb4 1个字符 = 4个字节   65534 / 4 = 16383
  解决方案 :
     1. 缩小字符大小限制 m变小 [不合理]
     2. 可以修改字符集 [不合理]
     3. 可以将字符串类型变成TEXT,不占有一行的限制

*/

CREATE TABLE t1(
   name1 VARCHAR(16000),
   name2 TEXT
)CHARSET=utf8mb4;


/*
  2.7 建表类型[时间类型]
  时间类型
     year    1 yyyy | yy   '1910' | 1910
     time    3 HH:MM:SS    '10:10:10'
     date    3 YYYY-MM-DD  '1910-10-10'
     datetime 8 YYYY-MM-DD HH:MM:SS '1910-10-10 10:10:10'
     timestamp 4 YYYY-MM-DD HH:MM:SS '1970-10-10 10:10:10'
  注意情况
     1. year可以写两位年 00 - 99  00-69 =2000 - 2069 70 - 99 = 1970 - 1999 推荐四位的年
     2. 时间类型,要遵循他们的格式插入,插入的时候就是按字符插入,时间默认不会自动赋值
  扩展自动填写时间:
     1.插入默认添加时间
        datatime | timestamp default current_timestamp
     2.修改默认更改时间
        datatime | timestamp default current_timestamp on update current_timestamp
  演示: 创建t2表,
         注册日期 字段插入自动添加时间,更新数据不变
         更新日期 字段插入自动添加时间,更新数据时间改变
*/

CREATE TABLE t2(
  name1 VARCHAR(20),
  reg_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册日期,插入数据自动维护时间',
  up_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT  '更新日期,插入数据填写时间,更新数据自动改变时间'
);


/*
  2.8 修改和删除表
      修改表中列
        添加列
          alter table 表名 add 列名 类型 [first|alter 列名] ;
        修改列名
          alter table 表名 change 原列名 新列名 新类型 [first|alter 列名] ;
        修改列类型
          alter table 表名 modify 列名 新类型 [first|alter 列名] ;
        删除列
          alter table 表名 drop 列名;
      修改表名
         alter table rename [to] 新表名;
      删除表
         drop table [if exists ] 表名;
      清空表数据
         truncate  table 表名;
*/
/*
  2.9 表操作实战
      要求1:创建表格employees
      要求2:将表employees的mobile字段修改到code字段后面。
      要求3:将表employees的birth字段改名为birthday;
      要求4:修改sex字段,数据类型为char(1)。
      要求5:删除字段note;
      要求6:增加字段名favoriate_activity,数据类型为varchar(100);
      要求7:将表employees的名称修改为 employees_info

*/

CREATE TABLE  employeess(

   emp_num INT,
   last_name VARCHAR(50),
   first_name VARCHAR(50),
   mobile VARCHAR(25),
   CODE INT,
   job_time VARCHAR(50),
   birth DATE,
   note VARCHAR(255),
   sex VARCHAR(5)
);


# 要求2:将表employees的mobile字段修改到code字段后面。
ALTER TABLE employeess MODIFY mobile VARCHAR(25) AFTER CODE;

# 要求3:将表employees的birth字段改名为birthday;
ALTER TABLE employeess CHANGE birth birthday DATE;

# 要求4:修改sex字段,数据类型为char(1)。
ALTER TABLE employeess MODIFY sex CHAR(1);

DESC employeess;

# 要求5:删除字段note;
ALTER TABLE employeess DROP note;

#要求6:增加字段名favoriate_activity,数据类型为varchar(100);
ALTER TABLE employeess ADD favoriate_activity VARCHAR(100);

#要求7:将表employees的名称修改为 employees_info
ALTER TABLE employeess RENAME employees_info;
相关推荐
zzb15804 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
一只鹿鹿鹿5 小时前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
堕2745 小时前
MySQL数据库《基础篇--数据库索引(2)》
数据库·mysql
wei_shuo5 小时前
数据库优化器进化论:金仓如何用智能下推把查询时间从秒级打到毫秒级
数据库·kingbase·金仓
71-35 小时前
MySQL的安装和卸载组件
笔记·学习·mysql
雷工笔记5 小时前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying6 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组6 小时前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法6 小时前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t6 小时前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite