MySQL数据类型和表操作

MySQL数据类型和表修改

MySQL数据类型和表操作

整型的定义

//创建有符号整数表
CREATE TABLE t1 (id TINYINT);
//创建无符号整数表
CREATE TABLE t2 (id TINYINT UNSIGNED);

BIT类型的定义

//bit(m) m 在 1-64
//添加数据范围按照给的位数来确定,比如 m = 8 表示一个字节 大小为0~255,显示按照2进制逐一显示
//查询时,仍然可以按照数来查询
CREATE TABLE t3 (num BIT(8));

Tips:当一个只有正负,对错,0-1时可以用BIT来定义以节省空间

浮点数的定义

主要对decimal做一个说明, DECIMAL[M,D]

  • M表示小数位数,代表精度.D是小数点后面的位数,代表大小
  • D=0 时,则是一个整数,M最大为65,D最大为30
  • D省略,默认时0,M省略,默认为10
//创建一个由三种浮点数构成的表
CREATE TABLE t06 (
    num1 FLOAT,
    num2 DOUBLE,
    num3 DECIMAL(30,20));

字符串的定义

  • CHAR(size) 固定长度字符串, size:0~255 ,无论我们存入的数据有多大或多小,占有的空间都是在创建表时规定的。 这里size的范围指的是字符数,不论是中文字符还是其它字符都只占一个字符。
  • VARCHAR(size) 可变长度字符串, size: 0~65535 ,数据占有的空间与它本身有关, 这里size的范围指的是字节,具体可以保存多少个字符与使用的编码方式有关,采用四个字节的utf8mb4编码,最长为(65535-3)/4=16383个字符;采用2个字节的gbk编码,最长为(65535-3)/2=32766个字符。(需要保留三个bit位存储数据大小)
  • 两种数据类型 size 都指的是字符数,在 CHAR中表示占有固定空间,在 VARCHAR中表示最长字符数量可以是。
//创建gbk编码的字符串表,未指定编码方式时,采用创建数据库时指定的编码方式
CREATE TABLE t10 (
    name VARCHAR(32766))
    CHARSET gbk;

Tips:关于CHAR和VARCHA,TEXT的使用

  • 当字符串是定长,例如邮编,手机号,身份证是,使用 CHAR 类型来保存
  • 当字符串是不定长,如名字等等,使用 VARCHAR
  • 查询速度: CHAR > VARCHAR
  • 存放文本时可以用 TEXT,可以将 TEXT 视为 VARCHAR,存放数据范围相同,如果需要保存更长的文本数据在使用 MEDIUMTEXT 和 *LONGTEXT

时间类型定义

//创建一张与时间有关的表
CREATE TABLE t14 (
birthday DATE ,
job_time DATETIME,
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP --没有指定时间时,采用当前时间
ON UPDATE CURRENT_TIMESTAMP); --更新数据时,用当前时间更新时间戳

字段定义的限制条件

NOT NULL

要求字段的数据不为空,否则报错,空字符串是有效的,当输入null时会报错

DEFAULT

当没有输入数据时,使用默认值。如果使用null值时如果没有 NOT NULL约束不会报错

两者一起使用

当输入null时报错,不指定任何值时用默认值代替。

表的修改

使用 ALTER TABLE 可以对表进行追加,修改和删除

添加表字段

ALTER TABLE

ALTER TABLE emp ADD level INT

修改表字段

ALTER TABLE

ALTER TABLE emp MODIFY name VARCHAR(32)

删除表字段

ALTER TABLE

ALTER TABLE emp DROP sex

重命名字段

ALTER TABLE

ALTER TABLE emp CHANGE user user_name

重命名表

RENAME TABLE

RENAME TABLE emp TO employee

位置属性

添加字段时,不指定位置,默认在最后添加新字段。指定位置有以下几种方式。

在开头添加

使用关键字 FIRST

ALTER TABLE emp ADD level INT FIRST
在中间添加

如果想要在某个字段后添加可以使用关键字 AFTER+指定字段

ALTER TABLE emp ADD level INT AFTER birthday

查看表结构

DESC

DESC yjh_db01

表复制

有时候我们需要对sql语句进行测试,会需要海量数据,为了不破坏原表的结构,我们可以先建一张表,并把原表的内容复制过来,再让新表自我复制。

-- 使用like语句可以方便的创建一个相同的结结构的表
CREATE TABLE emp2 LIKE emp
-- 复制emp表到emp2表
INSERT INTO emp2
    SELECT * FROM emp
-- 自我复制
INSERT INTO emp2
    SELECT * FROM emp2

表去重

表去重的操作和复制表基本相同,只需要把表复制过来时使用DISTINCT关键字

-- 先创建一张临时表 my_tmp , 该表的结构和 my_tab02 一样
create table my_tmp like emp2
-- 把 my_tmp 的记录 通过 distinct 关键字 处理后 把记录复制到 my_tmp
insert into my_tmp
    select distinct * from emp2;
-- 清除掉 my_tab02 记录
delete from emp2
--  把 my_tmp 表的记录复制到 my_tab02
insert into emp2
    select * from my_tmp;
--  drop 掉 临时表 my_tmp
drop table my_tmp;

学习总结来源于韩顺平老师一周学会Linux

Original: https://www.cnblogs.com/yjh1024/p/16451268.html
Author: Nights_Watch
Title: MySQL数据类型和表操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621082/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群

    作者:程润科 数据库研发工程师编辑:张莉梅 高级文档工程师视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes …

    数据库 2023年5月24日
    088
  • ODA→Teigha胎压–学习笔记

    数据库结构 记录对象表 对象字典 具有固定类型和固定可访问操作的特定对象的固定结构的固定集合 可以存储和操作各种类型的对象,包括它自己。 每个记录都有一个特定的类类型,每个表也有一…

    数据库 2023年6月14日
    062
  • 【黄啊码】关于微信支付走过的坑

    错误:未定义数组索引:openid 。经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,”errmsg&#82…

    数据库 2023年6月16日
    082
  • MySQL实战45讲 19

    19 | 为什么我只查一行的语句,也执行这么慢? 有些情况下,”查一行”,也会执行得特别慢。 需要说明的是,如果 MySQL 数据库本身就有很大的压力,导致…

    数据库 2023年6月14日
    067
  • Java并发编程之AQS以及源码解析

    文章目录 概览 实现思路 实现原理 * 源自CLH锁 AQS数据模型 CAS操作 主要方法 * 自定义同步器的实现方法 AQS定义的模板方法 源码解读 * 等待状态释义 AQS获取…

    数据库 2023年6月6日
    073
  • MySQL的权限管理和Linux下的常用命令

    1.管理用户: root,具有最高权限,具有创建用户的权限,可以为其他用户授权 2.普通用户: 普通由root用户创建,权限由root分配 — mysql创建用户: create…

    数据库 2023年6月16日
    055
  • JUC并发编程进阶!!

    1.知识点回顾及延伸 2.生产者消费者问题 3. 八锁问题 4.集合类线程不安全解决 5.Callable再理解 6.三大常用辅助类 6.1、 CountDownLatch 6.2…

    数据库 2023年6月16日
    085
  • 基于Redis&MySQL接口幂等性设计

    基于Redis&MySQL接口幂等性设计 欲把相思说似谁,浅情人不知。 幂等性即多次调用接口或方法不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 前端重复提…

    数据库 2023年6月14日
    076
  • 工具 | 常用 MySQL 内核 Debug 技巧

    作者:柯煜昌 顾问软件工程师目前从事 RadonDB MySQL 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验。 掌握 MySQL 内核源码的阅读和调试能力,不仅…

    数据库 2023年5月24日
    0108
  • MySQL 事务和锁

    事务概述 当多个用户访问相同的数据时,在更改数据的过程中,其他用户可能会同时发起更改请求,为了确保数据库记录的更新从一种一致性状态更改为另一种一致性状态,需要使用事务处理,它具有以…

    数据库 2023年5月24日
    059
  • Java 线程是如何启动的?

    Java启动线程的代码: 根据以上代码分析,并从源码了解启动线程发生了以下事件来完成启动线程: 1、Java 创建线程和启动 2、调用本地方法 start0(); 3、JVM 中 …

    数据库 2023年6月16日
    072
  • Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

    在 Apache ShardingSphere 5.1.1 发布后,ShardingSphere 合并了来自全球的团队或个人的累计 1028 个 PR,为大家带来 5.1.2 新版…

    数据库 2023年6月16日
    093
  • Failed to write to mysql.slow_log

    最近将一MySQL数据库的系统变量log_output从file调整为table后,偶尔会收到告警邮件,告警邮件内容为: Failed to write to mysql.slow…

    数据库 2023年5月24日
    081
  • SQL函数-聚合函数

    聚合函数 聚合函数是对一组数据进行汇总输出的函数。 输入:一组数据集合输出:单个值 举例:返回一组数据的最大值、平均数、最小、方差等操作。 常见函数举例: 1,AVG函数:返回一组…

    数据库 2023年6月16日
    079
  • 常用API(Java)

    Object 场景:当我们使用toString方法想要输出对象变量时,官方提供的toString方法会直接输出对象所在的地址,而不是我们想要的对象变量,所以我们要把toString…

    数据库 2023年6月16日
    083
  • MySQL日期时间函数一网打尽

    获取时间 函数 功能 返回格式 CURDATE(), CURRENT_DATE() 返回当前日期,只包含年、月、日 2022-03-08 CURTIME(), CURRENT_TI…

    数据库 2023年6月9日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球