MySQL 表的增删改查、表约束

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

目录

一、数据表操作指令

1.1 创建数据表

1.2 查看表信息

1.3 修改数据表

1.4 查看表结构

1.5 修改表结构

1.6 删除数据表

二、数据管理的操作指令

2.1 添加数据

2.2. 查询数据

2.3. 修改数据

2.4. 删除数据

三、数据类型的讲解

3.1 数字类型

3.1.1 整数类型

3.1.2 浮点类型

3.1.3 定点类型

3.2 时间和日期类型

3.3 字符串类型

四、表的约束

4.1 默认约束 

4.2 非空约束

4.3 唯一约束

4.4 主键约束

4.5 外键约束

4.6 自动增长

五、总结:


一、数据表操作指令

1.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
);

1.2 查看表信息

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

SHOW TABLES;

1.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;(用来检查修改是否成功)

1.4 查看表结构

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

SHOW CREATE TABLE 表名;

查看表中所有字段信息:

DESCRIBE 表名;

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

DESCRIBE 数据表名 字段名;

1.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] 字段名;

1.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 ('john@example.com');

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中有关表,数据部分的基本指令和操作,其中主要包括:

  • 数据表的创建与管理
  • 数据的添加,查询,修改,删除
  • 数据类型的详细分类
  • 表的约束类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值