数据库类型
- 数值类型
- 字符串类型
- 日期和时间类型
数据库的基本操作
-
创建和查看数据库
CREATE DATABASE 数据库名称; -
查看数据库
SHOW CREATE DATABASE 数据库名称; -
使用数据库
USE 数据库名; -
修改数据库
ALTER DATABASE 数据库名称 DEFAULT CHARACTER; -
删除数据库
DROP DATABASE 数据库名称;
数据表的基本操作
- 创建数据表
CREATE TABLE 表名(
字段名1 数据类型,
字段名2 数据类型,
…
字段名n 数据类型,
);
先创建数据库,再使用数据库,接着创建数据表。
-
查看数据表
SHOW TABLES; 查看是否创建成功
SHOW CREATE TABLE 表名; 查看数据表
DESCRIBE 表名; 查看表中列的相关信息 -
修改数据表
ALTER TABLE 原表名 RENAME [TO] 新表名; 修改表名
ALTER TABLE 表名 CHANGE 原字段名 新字段名 新数据类型; 修改字段
ALTER TABLE 表名 MODIFY 字段名 数据类型; 修改字段的数据类型
ALTER TABLE 表名 ADD 新字段名 数据类型; 添加字段
ALTER TABLE 表名 DROP 字段名; 删除字段
ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST|AFTER 字段名2; 修改字段的排列位置
(FIRST 表示将字段1修改为表的第一个字段;AFTER 字段名2 表示将字段1插入到字段2后面) -
删除数据表
DROP TABLE 表名;
插入数据
-
为所有列插入数据
INSERT INTO 表名(字段名1,字段名2,…) VALUES(值1,值2,…); 指定所有字段名
INSERT INTO 表名 VALUES (值1,值2,…); 不指定字段名,顺序对应 -
为指定列插入数据
INSERT INTO 表名(字段名1,字段名2,…) VALUES(值1,值2,…); -
批量插入数据
INSERT INTO 表名[(字段名1,字段名2,…)]
VALUES(值1,值2,…),(值1,值2,…),…,(值1,值2,…); 为所有列批量插入数据
更新数据
UPDATE 表名
SET 字段名1=值1[,字段名2=值2,…]
[WHERE 条件表达式];
删除数据
DELETE FROM 表名 [WHERE 条件表达式];
TRUCATE [TABLE] 表名;
DELETE 语句是DML语句, TRUNCATE 语句是DDL语句。
单表查询
-
基础查询
SELECT 字段名1,字段名2,…,字段名n FROM 表名; 查询所有字段
SELECT * FROM 表名; * 代替所有字段
SELECT 字段名1,字段名2,… FROM 表名; 查询指定字段 -
条件查询
SELECT 字段名1,字段名2,…, FROM 表名
WHERE 条件表达式1 AND/OR 条件表达式2 …; 指定条件查询
SELECT 字段名1,字段名2,…, FROM 表名
WHERE 字段名 [NOT] IN(元素1,元素2,…) ; 判断字段是否在指定集合并过滤
SELECT 字段名1,字段名2,…, FROM 表名
WHERE 字段名 IS [NOT] NULL ; 过滤字段名为空的
SELECT 字段名1,字段名2,…, FROM 表名
WHERE 字段名 [NOT] BETWEEN 值1 AND 值2; 判断字段的值是否在指定范围并过滤
SELECT 字段名1,字段名2,…, FROM 表名
WHERE 字段名 [NOT] LIKE ‘匹配字符串’; 模糊查询(%表示n个字符,_表示人员一个字符)
SELECT DISTINCT 字段名 FROM 表名; 去除重复数据 -
高级查询
SELECT 字段名1,字段名2,…, FROM 表名
ORDER BY 字段名1 [ASC|DESC],字段名2[ASC|DESC]…; 排序查询
(ASC 升序查询;DESC降序查询)
SELECT COUNT ( * |1|列名) FROM 表名;
SELECT COUNT (1) AS 别名 表名;
( * 返回行数;列名返回特定列行数;1同 * ,表没有主键时执行效率高)
SELECT SUM(字段名 ) FROM 表名; 计算指定列的数值和
SELECT AVG(字段名) FROM 表名; 计算指定列的平均值
SELECT MAX/MIN(字段名) FROM 表名; 计算指定列的最大值/最小值
SELECT 字段名1,字段名2,…, FROM 表名
GROUP BY 字段名1,字段名2,…; 分组查询
SELECT 字段名1,字段名2,…, FROM 表名
GROUP BY 字段名1,字段名2,…;[HAVING 条件表达式]; 分组查询后过滤
SELECT 字段名1,字段名2,…, FROM 表名
LIMIT [m, ]n; 限制查询结果
(m,代表从m开始索引,默认值为1;n,代表从第m+1条开始取n条记录)
数据的完整性
-
实体完整性
ALTER TABLE 表名 ADD PRIMARY KEY(列名); 添加主键约束
CREATE TABLE 表名(
字段名 数据类型 PRIMARY KEY
); 创建表时添加主键约束
CREATE TABLE 表名(
字段名1 数据类型,
字段名2 数据类型,
…
PRIMARY KEY(字段名1,字段名2,字段名n)
); 添加多字段的主键约束
ALTER TABLE 表名 ADD UNIQUE(列名); 添加唯一约束
CREATE TABLE 表名(
字段名 数据类型 UNIQUE,
…
); 创建表时为某字段添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY AUTO_INCREMENT; 为已创建完成的表字段设置自动增长列
CREAT TABLE (
字段名 数据类型 AUTO_INCREMENT,
…
); 自动增长列 -
索引
CREATE INDEX 索引名 ON 表名 (字段名[(长度)]); 为以创建完成的某个字段创建普通索引
CREAT TABLE (
字段名 数据类型,
…
INDEX [索引] (字段名[(长度)])
); 创建普通索引
CREATE UNIQUE INDEX 索引名 ON 表名 (字段名[(长度)]); 为以创建完成的某个字段创建唯一索引
CREAT TABLE (
字段名 数据类型,
…
UNIQUE INDEX [索引] (字段名[(长度)])
); 创建唯一索引 -
域完整性
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL; 在已创建的表中添加非空约束
CREAT TABLE (
字段名 数据类型 NOT NULL,
…
); 为某个字段添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 DEFAULT 默认值; 在已创建的表中添加默认值约束
CREAT TABLE (
字段名 数据类型 DEFAULT 默认值,
…
); 为某个字段添加默认值约束 -
引用完整性
ALTER TABLE 表名
ADD FOREIGN KEY (外键字段名) REFERENCES 主表表名(主键字段名); 添加外键约束
CREAT TABLE 表名(
字段名 数据类型,
…,
FOREIGN KEY (外键字段名) REFERENCES 主表表名(主键字段名)
); 创建表是添加外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名; 删除外键约束
多表查询
-
合并结果集
使用UNION或者UNION ALL关键字合并
区别在于两张表的重复数据是否被过滤掉 -
连接查询
笛卡尔积实现交叉连接(CROSS JOIN)
SELECT 查询字段 FROM 表1 CROSS JOIN 表2;
内连接
SELECT 查询字符 FROM 表1 [INNER] JOIN 表2
ON 表1.关系字段 = 表2.关系字段 WHERE 查询条件
外连接:
左外连接
SELECT 查询字段 FROM 表1 LEFT [OUTER] JOIN 表2
ON 表1.关系字段 = 表2.关系字段 WHERE 查询条件;
右外连接
SELECT 查询字段 FROM 表1 RIGHT [OUTER] JOIN 表2
ON 表1.关系字段 = 表2.关系字段 WHERE 查询条件;
多表连接
SELECT 查询字段 FROM 表1 [别名]
JOIN 表2 [别名] ON 表1.关系字段=表2.关系字段
JOIN 表m ON…;
自然连接
SELECT 查询字段 FROM 表1 [别名] NATURAL JOIN 表2 [别名];
自连接
SELECT 查询字段 FROM 表名 [别名1],表名 [别名2] WHERE 查询条件; -
子查询
子查询作为查询条件
子查询作为表