mysql 创建表

查看表结构

sql 复制代码
DESC n_emp1

查看创建表的语句结构

sql 复制代码
注意:创建表时,如果没有指定字符集,则默认使用表所在数据库的字符集
SHOW CREATE TABLE n_emp1



方式1

sql 复制代码
CREATE TABLE IF NOT EXISTS n_emp1(
  id INT,
  emp_name VARCHAR(15),  "使用 varchar 定义字符串时,必须指明其长度"
  hire_date DATE
)

方式2:CTAS 建表(复制表 + 数据)

基于现有的表,创建新表的同时,会自动导入数据

行为特性(重点)

  1. 自动复制 :查询返回的字段名、数据类型、长度;同时把查询结果全部插入新表
  2. 丢失信息(巨大坑点)
    CTAS复制只会复制字段结构+数据,不会复制:主键、外键、索引、自增、字符集注释、非空约束
    • 原表employee_id是主键,复制到n_emp2后只是普通 int 字段,失去主键特性;
    • 原表非空字段,新表全部变为可空;
    • 外键、乐观锁version、索引全部消失。

CTAS 复制出来的临时表,若后续要当业务表,必须,手动重建主键 和 索引;

sql 复制代码
CREATE TABLE n_emp2
AS
SELECT employee_id, last_name, salary
FROM employees


DESC n_emp2

DESC employees

SELECT * FROM n_emp2

练习1:复制表,包括表数据

TRUNCATE 谨慎使用,数据不可回滚;业务删数据优先用 DELETE 加 事务。

sql 复制代码
"创建一个 employees_copy,实现对 employees表的复制,包括表数据"

CREATE TABLE employees_copy
AS
SELECT * FROM employees

SELECT * FROM employees_copy

"清空表(TRUNCATE 谨慎使用,数据不可回滚;业务删数据优先用DELETE加事务)"
TRUNCATE TABLE employees_copy

练习2 - 复制表,不包括表数据

sql 复制代码
" 创建一个 employees_bank,实现对 employees表的复制,不包括表数据 "

CREATE TABLE employees_bank
AS
SELECT * 
FROM employees
" WHERE department_id > 99999 万一有 department_id > 99999 就会把表数据也复制了,所以不保险 "
WHERE 1 = 2  "这样就保险了,绝对只会复制employees表的结构,不会复制employees表的数据"
相关推荐
SendTomo1 小时前
【技术交流】从0到1构建一个汉字学习平台:汉字吧(hanzi8.com)的技术架构猜想
redis·mysql·nginx·php·个人开发
IT大白鼠2 小时前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql
IT大白鼠2 小时前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步
数据库·分布式·mysql
初願致夕霞4 小时前
MySQL_索引
数据库·mysql
一只小李郁vickie5 小时前
mysql 开启压缩传输3402条数据2.1秒压缩到毫秒级
数据库·mysql
前端兰博6 小时前
04-数据库-MySQL
后端·mysql
这个DBA有点耶6 小时前
COUNT慢不是因为用了*,是这5个原因——1000万行数据实测+执行计划深度解析
数据库·mysql·算法
kyrie_sakura7 小时前
MySQL数据库学习笔记2--系统函数(分组,单行,窗口函数)
数据库·学习·mysql
大牧师8 小时前
TypeORM 入门教程
后端·sql·mysql·orm·nest·typeorm
oliver_sys_log8 小时前
绕过 Yearning 查询体验限制:我做了一个 DataGrip 只读 SQL 代理
后端·mysql