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;
相关推荐
Lalolander1 小时前
2024信创数据库TOP30之华为Gauss DB
大数据·数据库·科技·华为·系统架构
莳花微语3 小时前
Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)
数据库·oracle
写代码也要符合基本法3 小时前
Oracle Form - App_Query的简单使用
oracle
petaexpress3 小时前
云原生和数据库哪个好一些?
数据库·云原生·云原生和数据库哪个好·云原生和数据库
Cristiano永远是goat3 小时前
数据库原理-期末复习基础知识第二弹
数据库
MXsoft6184 小时前
智能运维视角下的网络设备监测与数据分析
大数据·运维·数据库
冧轩在努力4 小时前
redis的应用--分布式锁
数据库·redis·分布式
2021-5-54 小时前
利用 Redis 与 Lua 脚本解决秒杀系统中的高并发与库存超卖问题
数据库·redis·lua
都要好好的O5 小时前
2.mysql 中一条更新语句的执行流程是怎样的呢?
数据库·mysql
夏子曦5 小时前
Redis——主从复制原理
数据库·redis·缓存