首页 > 数据库 >MySQL之数据表,数据类型,表约束类型的指令讲解和练习

MySQL之数据表,数据类型,表约束类型的指令讲解和练习

时间:2024-09-30 22:47:25浏览次数:8  
标签:示例 表中 数据类型 数据表 MySQL TABLE id 字段名

       本篇博客主要用来记录和分享本人学习MySQL数据库的基本操作指令的笔记和心得,包括数据表操作、数据管理、数据类型的讲解以及表的约束。通过实际的示例和注意事项,帮助大家更好地理解和应用这些知识。

一、数据表操作指令

1. 创建数据表

使用 CREATE TABLE 指令可以创建一个新的数据表。
基本的语法为:CREATE TABLE [IF NOT EXISTS] 表名   新手编写的话挂号内的内容最好一起写
以下是创建用户信息表的示例:

CREATE TABLE IF NOT EXISTS Users (
    UserID INT AUTO_INCREMENT PRIMARY KEY,
    UserName VARCHAR(50) NOT NULL,
    Email VARCHAR(100) UNIQUE,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. 查看表信息

使用 SHOW TABLES来查看当前数据库中的表

SHOW TABLES;

3. 修改数据表

使用 ALTER TABLE 指令可以修改数据表的结构,例如添加新列或删除列。

ALTER TABLE 旧表名 RENAME [TO|AS] 新表名;
RENAME TABLE 旧表名1 TO 新表名1 [, 旧表名2 TO 新表名2];

示例:将n_good表的名称改为m_good

RENAME TABLE n_good TO m_good;

SHOW TABLES;(用来检查修改是否成功)

4. 查看表结构

使用 SHOW CREATE TABLEDESCRIBE 指令可以查看创建表的SQL语句和表的详细信息,帮助理解表的结构。

SHOW CREATE TABLE 表名;

查看表中所有字段信息:

DESCRIBE 表名;

查看表中指定字段的信息:

DESCRIBE 数据表名 字段名;

5. 修改表结构

同样使用 ALTER TABLE 指令,可以修改已存在列的属性。

1.修改字段名

ALTER TABLE 数据表名 CHANGE [COLUMN] 旧字段名 新字段名 字段类型 [字段属性];

示例:m_good表中名为description的字段修改为des。

ALTER TABLE m_good CHANGE description des VARCHAR(255);

2.修改字段类型

ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名称 新类型 [字段属性];

示例:m_good表中des字段的数据类型改为CHAR(255)。

ALTER TABLE m_good MODIFY des CHAR(255);

3.修改字段位置

ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名1 数据类型 [AFTER|FIRST 字段名2];

示例:将m_good表中的最后一个字段des移动到name字段的前面。

ALTER TABLE m_good MODIFY des CHAR(255) AFTER name;

4.新增字段

4.1新增一个字段:

ALTER TABLE 数据表名 ADD [COLUMN] 新字段名 字段类型 [AFTER|FIRST 字段名];

示例:在m_good表中的字段name后面新添加一个字段num。

ALTER TABLE m_good ADD [COLUMN] num INT [AFTER name

4.2新增多个字段:

ALTER TABLE 数据表名 ADD [COLUMN] (新字段1 字段类型, 新字段2 字段类型, ...)

5.删除字段

ALTEL TABLE 数据表名 DROP [COLUMN] 字段名;

6. 删除数据表

使用 DROP TABLE 指令可以删除表,注意:这将永久删除表及其数据

删除一个数据表

DROP TABLE [IF EXISTS] 表1;

删除多个数据表

DROP TABLE [IF EXISTS] 表1 [, 表2]...;

(多个数据表之间用逗号隔开,其中IF EXISTS用于在删除一个不存在的数据表时,防止错误)

注意事项
1.表名,列名,列类型都必须填写。
2.在删除表之前,请确保备份重要数据。
3.修改表结构时,确保不影响现有数据的完整性。


二、数据管理的操作指令

2.1 添加数据

使用 INSERT INTO 指令可以向表中添加数据。

2.1.1为所有字段添加数据

基础语法结构:INTO可不写

INSERT INTO 数据表名 {VALUES | VALUE} (值1[, 值2] ...);通常情况下使用VALUES

示例:为goods表添加一条商品记录,编号为1,商品名为notebook,售价498元,描述信息为High cost performance。

INSERT INTO goods VALUES (1, 'notebook', 498,  'High cost performance' );

2.1.2为部分字段添加数据

基础语法结构:INTO可不写

NSERT INTO 数据表名 (字段名1 [, 字段名2]...) {VALUES | VALUE} (值1[, 值2] ...);

注意:多个字段名之间采用逗号分隔,且编写顺序可与表结构不同,只需确保值列表。

示例:将编号为3的Mobile phone 插入到goods数据表中。

INSERT INTO goods (id, name) VALUES (3, 'Mobile phone' )

2.1.3一次添加多行数据

基础语法结构:INTO可不写

NSERT INTO 数据表名 [(字段列表)]  {VALUES | VALUE} (值列表1[, 值列表2] ...);

2.2. 查询数据

使用 SELECT 指令可以查询数据,支持多种条件和排序方式。

2.2.1 查询表中全部数据

基础语法结构:

SELECT * FROM 数据表名;

示例:查询goods表中插入的全部数据。

SELECT * FROM goods;

2.2.2 查询表中部分字段

基础语法结构:

SELECT {字段名1, 字段名2, 字段名3, ...} FROM 数据表名;

示例:仅查询goods表中id和name字段。

SELECT id, name FROM goods;

2.2.3 简单条件查询数据

基础语法结构:

SELECT * | {字段名1, 字段名2, 字段名3, ...} FROM 数据表名 WHERE 字段名=值;

示例:查询goods表中id等于1的全部商品的信息

SELECT * FROM WHERE id=1;

2.3. 修改数据

使用 UPDATE 指令可以更新已有数据。

2.3.1

基础语法结构:

UPDATE 数据表名 SET 字段名 1=值1 [, 字段名2=值2, ...]

示例:将goods表中编号为2的商品价格从998元修改为589元。

UPDATE goods SET price = 589 WHERE id=2;

注意:如果不添加WHERE条件,那么会将表中所有对应的字段修改成统一的值。

2.4. 删除数据

使用 DELETE 指令可以删除表中的特定数据。

基础语法结构:

DELETE FROM 数据表名 [WHERE 条件表达式];

示例:删除goods 表中编号等于3的商品数据。

DELETE FROM goods WHERE id=3;

注意:WHERE为可选参数,用于设置是删除条件,满足条件的记录会被删除。

注意事项
1.使用 WHERE 子句时要小心,以避免意外删除或更新所有记录。
2.在进行批量操作时,最好先进行查询确认。


三、数据类型的讲解

3.1 数字类型

3.1.1整数类型

      MySQL支持SQL标准整数类型INTEGER,INT和SMALLINT。同时MySQL 还支持TINYINT、MEDIUMINT 和BIGINT等整数类型。下表显示了每种整数类型所需的存储和范围。

类型存储(字节)最小值有符号最小值无符号最大值有符号最大值无符号
TINYINT1-1280127255
SMALLINT2-3276803276765535
MEDIUMINT3-83886080838860816777215
INT4-2147483648021474836484294967295
BIGINT8-2^630(2^63)-1(2^64)-1

                                                  表格中的内容来自网络(下同)

整数类型都可以添加unsigned修饰符,可用于将对应列的数据变成无符号类型,值从0开始。

总结:

整数类型(Integer Types)

INT:范围为-2147483648到2147483647.

TINYINT:范围为-128到127。

SMALLINT:范围为-32768到32767。

BIGINT:范围为-9223372036854775808到9223372036854775807.

3.1.2浮点类型

MySQL使用4个字节来表示单精度值,使用8个字节来表示双精度值。

类型存储(字节)M (小数+整数位数)D (小位数)
FLOAT(M.D)4M最大为24D最大为8
DOUBLE(M,D)8M最大为53D最大为30

总结:

非整数类型(Floating-Point Types)
FLOAT: 单精度浮点数,适用于存储带小数的数字。
DOUBLE: 双精度浮点数,适合存储更大范围的浮点数。

3.1.3定点类型

类型存储(字节)M (小数+整数位数) D (小位数)BECIMAL(M,D)
BECIMAL(M,D)动态计算M最大为65D最大为30

DECIMAL:固定精度十进制数。当需要保持精确精度时,例如货币数据,商品价格等等可以使用。

3.2 时间和日期类型

类型名称字节日期格式小值最大值
YEAR1YYYY或YY19012155
TIME时间3HH:MM:SS-838:59:59838:59:59
DATE日期3YYYY-MM-DD1000-01-019999-12-03
DATETIME日期时间8YYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMP日期时间4YYYY-MM-DD HH:MM:SS1970-01-01 00:00:002038-01-19 03:14:07

总结:

日期和时间类型(Date and Time Types)
DATE:日期值。
TIME:时间值。
DATETIME:日期和时间值。
TIMESTAMP:日期和时间值,具有特殊的自动更新功能。
YEAR:年份值。

注意:

1.确定数据值范围,选择符合范围且存储空间占有最小类型
2.不确定数据值范围,选择选择范围较大类型,避免值超范围异常
3.year类型赋00- 99值对应年限,[00-69]对 应[2000- 2069],[70-99]对应[1970- 1999].建议四位年值!默认情况下,时间需要主动赋予默认值和修改值!

3.3 字符串类型

字符串(文本)特点长度长度范围(字符)存储空间
CHAR(M)固定长度M0<= M<= 255M*4个字节(utf8mb4)
VARCHAR(M)可变长度MMySqI-行数据最多65535字节(M*4+1)个字节(utf8mb4)

补充:

TEXT: 可存储长文本数据,最大数量取决于字符串实际占用的字节数。

ENUM:枚举类型,格式:ENUM('值1', '值2'),数据只能从枚举列表中选一个。

SET:用于保存字符串对象,定义格式和ENUM类似。

BLOB:用于保存量很大的二进制数据。

总结:

CHAR和VARCHAR类型都可以存储比较短的字符串
VARCHAR(n): 可变长度字符串,最大长度为n。
CHAR(n): 固定长度字符串,不足的部分用空格填充。

注意:

1.CHAR(M)类型一般需要预先定义字符串长度。如不指定(M).则表示长度默认是1个字符。
2.当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。
3.VARCHAR(M)定义时,必须指定长度M,否则报错。

四、表的约束

4.1. 默认约束 

作用:为表中的列指定默认值,当插入新记录时如果未提供该列的值,数据库将使用默认值。

基本语法格式:
字段名 数据类型 DEFAULT 默认值;
示例:users中created_at 列的默认值为当前时间戳。
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

插入示例:

INSERT INTO users (username) VALUES ('john_doe');

4.2. 非空约束

作用:确保列中不能有NULL值,即该列必须始终有一个有效的数据值。

基本语法格式:
字段名 数据类型 NOT NULL;
示例:products中name 和 price 列都必须有值,不能为NULL。
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL
);

插入示例:

INSERT INTO products (name, price) VALUES ('Laptop', 999.99);

4.3. 唯一约束

作用:确保列中的所有值都是唯一的,不允许重复值。唯一约束通过UNIQUE定义。

基本语法格式:

列级约束:
字段名 数据类型 UNIQUE;

表级约束:

UNIQUE (字段名1, 字段名2);
示例:employees表中email 列的值必须是唯一的,不能有重复的电子邮件地址。
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL
);

插入示例:

INSERT INTO employees (email) VALUES ('[email protected]');

4.4. 主键约束

作用:唯一标识表中的每一行数据,主键列的值必须唯一且不能为NULL。每个表只能有一个主键,可以由一个或多个列组成。

基本语法格式:

列级约束:
字段名 数据类型 PRIMARY KEY;

表级约束:

PRIMARY KEY (字段名1, 字段名2, ...);


示例:order_id 列是主键,用于唯一标识每个订单。
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT,
    user_id INT,
    order_date DATE,
    PRIMARY KEY (order_id)
);

插入示例:

INSERT INTO orders (user_id, order_date) VALUES (1, '2024-09-24');

4.5. 外键约束

作用:建立和维护两个表之间的关系,确保外键列的值必须在被引用表的主键列中存在。它有助于保证数据的参照完整性。

基本语法格式:
FOREIGN KEY (字段名1) REFERENCES other_table (字段名1);
示例:order_items 表中的 order_id 列引用 orders 表中的 order_id 列,确保每个订单项都对应一个有效的订单。
CREATE TABLE order_items (
    item_id INT AUTO_INCREMENT PRIMARY KEY,
    ord_id INT,
    product_id INT,
    FOREIGN KEY (ord_id) REFERENCES orders(order_id)
);

4.6 自动增长

作用:生成唯一标识符的特性,通常用于主键字段。它允许数据库自动为每一条新插入的记录生成一个唯一的整数值,而不需要手动指定。

基本语法格式:

字段名 数据类型 AUTO_INCREMENT;

注意:

在使用AUTO_ INCREMENT时,需要注意以下4点。
(1)一个表中只能有一个自动增长字段,该字段的数据类型是整数类型,且必须定义为键,如UNIQUE KEY、PRIMARY KEY。
(2).若为自动增长字段插人NULL、0、DEFAULT或在插人时省略该字段,则该字段就会使用自动增长值;若插人的是一个具体值则不 会使用直动增长值。
(3)自动增长值从1开始自增,每次加1。若插人的值大于自动增长的值。则下次插人的自动增长值会自动使用最大值加1;若插人的值小于自动增长值,则不会对自动增长值产生影响。
(4)使用DELETE删除记录时,自动增长值不会减小或填补空缺。

五、总结:

       这篇不知道算不算文章,应该是属于笔记,写来简单介绍和分享MySQL中有关表,数据部分的基本指令和操作,其中主要包括数据表的创建与管理、数据的添加,查询,修改,删除、数据类型的详细分类以及简述了表的约束条件。

标签:示例,表中,数据类型,数据表,MySQL,TABLE,id,字段名
From: https://blog.csdn.net/m0_72047169/article/details/142493442

相关文章

  • Connector C++ 连接 MySQL 数据库之增删改查
    在vcpkg中折腾了mysql-connector-cpp8.0很久,一直连接不上远程数据库,后面查官方文档,mysql-connector-cpp8.0好像只支持MySQL8.0以上的数据库,本来想把远程服务器上的MySQL升级到MySQL8.0,后面发现测试服务器的配置有点拉跨,架不住MySQL8.0,但是vcpkg中又没有mysql-c......
  • 记一次mysql导致服务器CPU突然暴涨的问题
    9月30号20点,感觉网站后台怎么越来越慢,打开阿里云看了服务器CPU竟然在几天内,一直是99%~100%,今天一天就觉得网站访问慢,还想着优化读取数据,原来CPU早就干爆了。想想有人攻击的话也不至于一直这样,putty上top一下,果然是mysql占满了CPU,大致查找策略如下 1、通过ps命令查找mysql进程......
  • 手把手实现完善矩阵类(分数数据类型)
    矩阵类功能:矩阵变换分数数据类型使得精度丢失率极低加,减,数乘,矩阵相乘,转置,幂次,初等变换伴随矩阵,逆矩阵,矩阵行列式的值,后方增添/删除矩阵,矩阵的秩获取并输出齐次/非齐次线性方程组的解向量演示:矩阵输出,初等行变换后输出,解向量输出实现矩阵类,如何适应不同数据类型?模板?对......
  • Java语言之数据类型与变量
    Java的数据类型主要分为两类基本数据类型:整形(包括:字节型:byte、1个字节,短整型:short、两个字节,整形:int、4个字节,长整型:long、8个字节),字符型:char、一个字节,浮点型(包括:单精度浮点型float、4个字节,双精度浮点型:double、8个字节),布尔类型:boolean,java并没有规定几个字节。java中没有......
  • 【ClickHouse 特点&数据类型&表引擎&SQL操作&副本&分片集群 01】
    概念:ClickHouse是开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告OLAP这样的适合做一些一次插入多次查询这样的操作(适合查询),对于新增更新删除就不太擅长了,所以ClickHouse是一种分析性数据库HBase也是列式存储......
  • mysql写外键约束时不生效
    写了外键约束,删除父表内容发现删除成功解决方法查看两个表使用的引擎showcreatetable表名;发现ENGINE=MyISAM更改引擎ALTERTABLEempENGINE=InnoDB;重新写外键再次尝试删除父表内容失败MyISAM和InnoDB是MySQL中的两种存储引擎,各自有不同的特点:MyISAM:......
  • sql注入-基于MySQL
    SQL注入的失败——SQL语句的未知性导致的拼接失败SQL操作都会导致SQL注入的出现:select,insert,update,delete数据类型:数字型(无符号干扰)——select*fromnewswhereid=$id;字符型(有符号干扰)——select*fromnewswhereid='$id';搜索型(有多符号干扰)——s......
  • 【25届计算机毕设选题推荐】基于python+MySQL的社区医院挂号就诊管理系统的设计与实现
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 【2025计算机毕设选题推荐】基于python+MySQL的社区医院管理系统的设计与实现
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • nodejs koa 用knex.js链接mysql数据库,进行数据增删改查
    1、knex.js安装npminstallknex官方Installation|Knex.js中文文档|Knex.js中文网2、进行数据库链接constknex=require('knex')({client:'mysql2',connection:{host:'127.0.0.1',//地址user:'root',//账号......