本篇博客主要用来记录和分享本人学习MySQL数据库的基本操作指令的笔记和心得,包括数据表操作、数据管理、数据类型的讲解以及表的约束。通过实际的示例和注意事项,帮助大家更好地理解和应用这些知识。
目录
一、数据表操作指令
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 TABLE 和 DESCRIBE 指令可以查看创建表的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等整数类型。下表显示了每种整数类型所需的存储和范围。
类型 | 存储(字节) | 最小值有符号 | 最小值无符号 | 最大值有符号 | 最大值无符号 |
TINYINT | 1 | -128 | 0 | 127 | 255 |
SMALLINT | 2 | -32768 | 0 | 32767 | 65535 |
MEDIUMINT | 3 | -8388608 | 0 | 8388608 | 16777215 |
INT | 4 | -2147483648 | 0 | 2147483648 | 4294967295 |
BIGINT | 8 | -2^63 | 0 | (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) | 4 | M最大为24 | D最大为8 |
DOUBLE(M,D) | 8 | M最大为53 | D最大为30 |
总结:
非整数类型(Floating-Point Types)
FLOAT: 单精度浮点数,适用于存储带小数的数字。
DOUBLE: 双精度浮点数,适合存储更大范围的浮点数。
3.1.3 定点类型
类型 | 存储(字节) | M (小数+整数位数) D (小位数) | BECIMAL(M,D) |
BECIMAL(M,D) | 动态计算 | M最大为65 | D最大为30 |
DECIMAL:固定精度十进制数。当需要保持精确精度时,例如货币数据,商品价格等等可以使用。
3.2 时间和日期类型
类型 | 名称 | 字节 | 日期格式 | 小值 | 最大值 |
YEAR | 年 | 1 | YYYY或YY | 1901 | 2155 |
TIME | 时间 | 3 | HH:MM:SS | -838:59:59 | 838:59:59 |
DATE | 日期 | 3 | YYYY-MM-DD | 1000-01-01 | 9999-12-03 |
DATETIME | 日期时间 | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 日期时间 | 4 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 | 2038-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) | 固定长度 | M | 0<= M<= 255 | M*4个字节(utf8mb4) |
VARCHAR(M) | 可变长度 | M | MySqI-行数据最多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中有关表,数据部分的基本指令和操作,其中主要包括:
- 数据表的创建与管理
- 数据的添加,查询,修改,删除
- 数据类型的详细分类
- 表的约束类型。