Mysql数据库
图片均来自 韩顺平Mysql
数据库
创建数据库 (不加 if not exists创建的库存在会报错,默认字符集utf-8,默认校验规则utf8_general_ci(不区分大小写),utf8_bin(区分大小写),为了规避关键字,可以使用``)
CREATE DATABASE db_name
删除数据库
DROP DATABASE db_name
创建一个使用utf8字符集,并带校对规则的数据库
CREATE DATABASE db_name CHARACTER SET utf8 COLLATE utf8_bin
显示所有数据库
SHOW DATABASES
查看前面创建的数据库的定义信息
SHOW CREATE DATABASE db_name
备份数据库 (在DOS执行命令行)
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
恢复数据库 (进入到Mysql命令行再执行)
Source 文件名.sql
备份数据库的表
mysqldump -u 用户名 -p 数据库 表1 表2 表n > 文件名.sql
表
- 查看表结构
DESC table_name
- 修改表名
RENAME TABLE old_name TO new_name
- 创建表 (fielld:指定列名,datatype:指定列类型(字段类型),字符集,校对规则默认为所在数据库字符集)
CREATE TABLE table_name
(
field1 datatype,
field2 datatype
)CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎
- 修改表字符集
ALTER TABLE table_name CHARACTER SET new_charset
- Mysql列类型
- 字符串
CHAR(size) 最大255字符
VARCHAR(size) utf8字符集最大21844字符,可变长度字符串 ,可存储0-65535字节,最大65532字节 1-3个字节记录大小,不能用
定长用CHAR,查询快,不定长用VARCHAR
- 日期
CREATE TABLE table_name
(
t1 TIMESTAMP **NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP** //如果没指定时间会用当前时间添加进去,更新时也用当前时间更新
)
日期可以直接比较
- 添加列
ALTER TABLE table_name
ADD (column datatype [DEFAULT] expr]
[ , column datatype]...);
- 修改列
ALTER TABLE table_name
MODIFY (column datatype [DEFAULT] expr]
[ , column datatype]...);
- 删除列
ALTER TABLE table_name
DROP COLUMN 列名1,
DROP COLUMN 列名2;
- 修改列名
ALTER TABLE table_name CHANGE old_name new_name datatype
- 添加数据
INSERT INTO table_name [(column[, column...])]
VALUES (value [, value...]);
- 修改数据
UPDATE tbl_name
SET col_name=expr1 [, col_name2=expr2...]
[WHERE where_definition]
- 删除数据
DELETE FROM tbl_name
[WHERE where_definition]
-
查询数据
-
SELECT [DISTINCT] *|{column1, column2...} FROM table_name;
-
使用表达式对查询的列进行运算
SELECT *|{column1 | expression...} FROM table_name;
-
使用as
SELECT column_name AS 别名 FROM 表名;
-
-
order by
SELECT column1, column2... FROM table; ORDER BY column asc|desc
asc:升序(默认)
desc:降序
-
统计函数,count,返回行的总数
SELECT COUNT(*) | COUNT(列名) FROM table_name [WHERE where_definition]
-
合计函数,sum
SELECT SUM(列名) {, sum(列名)} FROM table_name [WHERE where_definition]
-
合计函数,avg
SELECT AVG(列名) {, AVG(列名)...} FROM table_name [WHERE where_definition]
-
group by,对列进行分组
having,对分组后的子句进行过滤
SELECT column1, column2... FROM table_name GROUP BY column HAVING ...
-
字符串相关函数
DUAL,亚元表,测试时可用此表
-
数学函数
-
时间,日期函数
-
加密函数
-
流程控制函数
LIKE操作符,模糊查询
%:表示0-多个任意字符 _:表示单个字符
判断是否为空,使用 IS NULL或 IS NOT NULL
-
分页查询
SELECT ... LIMIT start, rows //表示从start+1行开始,取rows行,从0开始算 //LIMIT 每页显示的记录数 * (第几页-1),每页显示记录数
-
自连接
将同一张表当作两张表,给表取别名
SELECT * FROM table1 t1,table2 t2
-
子查询
嵌入在其他sql语句中的SELECT 语句,也叫嵌套查询
- 单行子查询:只返回一行数据的子查询语句
- 多行子查询:返回多行数据的子查询 IN
- 多列子查询:(字段1,字段2…)=(SELECT 字段1,字段2 FROM…)
-
表复制和去重
CREATE TABLE my_table02 LIKE emp; -- 把 emp 表的结构(列)复制到my_table02
-
合并查询
- 外连接
- 约束
- 外键
CREATE TABLE tab_name
(
sex ENUM('男','女') -- 枚举类型
)
- 自增长
以空间换时间,创建索引之后文件变大,但查询对应字段速度变快
没有使用索引时会进行全表扫描,慢,使用索引会形成一个索引的数据结构,比如二叉树
代价:磁盘占用;对dml(update delete insert)语句效率影响,每次删除需要重新对索引进行维护
修改索引就是先删除再添加新的索引