数据库 | 特点 |
MySQL | 开源、高性能、易用,适用于Web应用。 |
Oracle | 企业级、高可靠,支持大型应用。 |
SQL Server | 微软开发,集成分析服务(SSAS/SSRS/SSIS)。 |
Redis | 内存数据库,支持多种数据类型(字符串、哈希等),读写速度快,适用于缓存。 |
sql
-- 查询数据库
SHOW DATABASES;
-- 创建数据库(指定字符集)
CREATE DATABASE db_name CHARACTER SET utf8mb4;
-- 修改字符集
ALTER DATABASE db_name CHARACTER SET utf8mb4;
-- 删除数据库
DROP DATABASE db_name;
-- 使用数据库
USE db_name;
数值类型
类型 | 存储(字节) | 有符号数值取值范围 | 无符号数值取值范围 |
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
BIGINT(整数值超过int时使用) | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |
浮点与日期类型
日期和时间类型
类型 | 大小( bytes) | 范围 | 格式 | 用途 |
DATE |
3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59/838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR |
1 | 1901/2155 | YYYY | 年份值 |
DATETIME |
8 | 1000-01-01 00:00:00' 到'9999-12-31 23:59:59 | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
TIMESTAM | 4 | 1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07P | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小 | 用途 |
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT |
0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB |
0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
sql
-- 创建表(CREATE TABLE)
CREATE TABLE 表名 (
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
);
-- 修改表(ALTER TABLE)
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束];
-- 删除表(DROP TABLE)
DROP TABLE [IF EXISTS] 表名;
-- 插入数据(INSERT INTO)
INSERT INTO 表名 (列1, 列2, ...),VALUES (值1, 值2, ...);
-- 修改数据(UPDATE)
UPDATE 表名 SET 列1 = 新值1, 列2 = 新值2, ...,[WHERE 条件];
-- 删除数据(DELETE)
DELETE FROM 表名 [WHERE 条件];
多对一:通过外键实现,例如订单表关联用户表。
外键级联操作:主表数据更新/删除时,自动同步子表数据。
sql
CREATE TABLE 子表 (
列名 数据类型,
FOREIGN KEY (外键列) REFERENCES 主表(主键列)
ON UPDATE CASCADE
ON DELETE CASCADE
);
sql
-- 查询所有列
SELECT * FROM table;
-- 条件查询
SELECT * FROM table WHERE price > 3000;
-- 模糊查询(%匹配任意字符,_匹配单个字符)
SELECT * FROM table WHERE name LIKE '华为%';
sql
SELECT
COUNT(*) AS total,
MAX(price) AS max_price,
AVG(stock) AS avg_stock
FROM products;
sql
-- 按价格降序排序
SELECT * FROM products ORDER BY price DESC;
-- 按品牌分组统计库存
SELECT brand, SUM(stock) FROM products GROUP BY brand;
-- 分页查询(每页5条,第2页)
SELECT * FROM products LIMIT 5 OFFSET 5;
内连接(INNER JOIN)
sql
SELECT a.name, b.order_id
FROM users a
INNER JOIN orders b ON a.id = b.user_id;
左外连接(LEFT JOIN)
右外连接(RIGHT JOIN)
sql
合并查询结果(去重)
SELECT name FROM users
UNION
SELECT name FROM customers;
子查询(查询价格高于平均价的商品)
SELECT * FROM products
WHERE price > (SELECT AVG(price) FROM products);
php
php
// 查询数据
$result = mysqli_query($conn, "SELECT * FROM products");
while ($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}
// 插入数据
mysqli_query($conn, "INSERT INTO products (name, price) VALUES ('手机', 2999)");
// 关闭连接
mysqli_close($conn);