Mysql
Mysql
DDL定义数据库表结构
创建数据库
CREAT DATABASE 数据库名删除数据库
DROP DATABASE 数据库名查看数据库
SHOW DATABASE展示已有数据库创建表
CREAT TABLE 表名1
2
3
4CREAT TABLE 表名 (
列名 数据类型 主键 自增;
customerID int primary key auto_increment
)
- 创建后可用
DESC 表名查看表的结构
DDL维护数据库表结构
修改表结构DDL
1
ALTER TABLE 表名 修改句子 (“修改子句”允许指定多个动作,其动作间使用逗号分隔)
DROP 删除 ADD 添加 RENAME 重命名 ALTER 修改
修改表
- 修改数据类型
ALTER TABLE 表名 MODIFY COLUMN 修改数据的字段名 数据类型column表示列 - 修改字段
ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名 - 添加字段
ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 - 删除字段
ALTER TABLE 表名 DROP COLUMN 字段名 - 删除整表
DROP TABLE 表名
DML 增删改查
INSERT 插入数据
INSERT INTO 表名 (id,name,level,exp,gold) VALUES(1,”张三”,’1’,’1’,’1’ 具体的值)
ID可设null为空自增 INSERT 可一次性插入多条数据
INSERT INTO 表名 (id,name,level) VALUES(1,”张三”,2,3,4),
VALUES(NULL,”张三”,’3’,’5’,’7’),
VALUES(NULL,”张三”,’3’,’5’,’7’),
VALUES(NULL,”张三”,’2’,’6’,’9’)
1
2
3
4
5
6
7
8
9
括号里为column列的值 若不写括号内容 则VALUES里的值会按照默认位置进行填充
- SELECT 查询数据
- ```mysql
SELECT * FORM 表名 //*号代替所有的列
也可
SELECT <COLUMN1, COLUMN2, COLUMN3...> FORM 表名注:必须的子句只有 select 子句和 from 子句。UPDATE 修改数据
UPDATE 表名 SET 修改的列名 值 = WHERE = ‘ ‘;
UPDATE 表名 SET height 189 = WHERE = ‘李斯特’; //把李斯特同学的身高改为189
UPDATE 表名 set height = 0,id = 0; //修改多个值去掉WHERE 实际开发中不加 WHERE 是非常危险的行为
1
2
3
4
5
- DELETE 删除数据
- ```mysql
DELETE FORM 表名 WHERE XXX = 0;
常用语句 WHERE AND OR NOT IN NULL LIKE
WHERE 提取满足指定标准的记录 可同 UPDATE SELECT 一起使用
SELECT * FORM player WHERE level = 1;
查找等级为1的玩家< = >= <= !=都可使用
1
2
3
4
5
6
- AND 连接
- ```mysql
SELECT * FORM player WHERE level > 1 AND level < 5;
查找等级大于1小于5的玩家OR 或者
NOT 取反 可以加在任何条件语句当中
同时用优先级NOT>AND>OR
IN 多个定值
SELECT * FROM player WHERE level IN(1,2,3); //选取值为 1 2 3的参数1
2
3
4
5
6
7
- NULL 空
- ```mysql
SELECT * FROM player WHERE email IS NULL; // 查找email为空的列表
SELECT * FROM player WHERE email IS NOT NULL; // 查找email不为空的列表LIKE 模糊查询
SELECT * FROM player WHERE name LIKE ‘王%’; //查找name为王的人
SELECT * FROM player WHERE name LIKE ‘王‘; //查找第二个字为王的name
SELECT * FROM player WHERE name LIKE ‘王_’ //查找name为王X的两字name
SELECT * FROM player WHERE name LIKE ‘王_ _’ //查找name为王XX的三字name
SELECT * FROM player WHERE name LIKE ‘%王%’ //查找名字中包含王的name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%任意个字符 _任意一个字符
- ROUND 四舍五入
- AS 别名
- UNIQUE 唯一
- REGEXP 正则表达式 可以使用通配符定义匹配规则
- ###### 常用通配符
- . 匹配任意一个字符
- ^ 匹配开头
- $ 匹配结尾
- [abc] 匹配其中任意一个字符
- [a-z] 匹配范围内的任意一个字符or[0-9]
- A|B 匹配A或者B
- ```mysql
SELECT * FROM player WHERE name REGEXP '^王.$' //查找name为王X的nameBETWEEN…AND… 条件连接
SELECT * FROM player WHERE level BETWEEN 1 AND 10;
查找level属性1-10的参数
1
2
3
4
5
6
7
8
9
10
11
- ORDER BY 排序
- ```mysql
SELECT * FROM player ORDER BY level; //按照level升序排列 默认
SELECT * FROM player ORDER BY level DESC; //按照level降序排列
SELECT * FROM player ORDER BY level DESC,exp ASC; //按照level降序排列 exp升序排列 不填为默认
SELECT * FROM player ORDER BY 5 DESC; //第五列按照降序排列PRIMARY KEY 主键
AUTO_INCREMENT
COMMENT
DEFAULT 默认值
聚合函数
AVG()返回集合的平均数SELECT AVG(集合名) FORM player;
SELECT AVG(level) FORM player; 返回level的平均数
SELECT * FROM player WHERE level > (SELECT AVG(level) FORM player); //查找大于平均数的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- `COUNT()` 返回集合中的项目
- `MAX()` 返回最大值
- `MIN()` 返回最小值
- `SUM()` 求和
#### GROUP BY: 分组(分组查询)
```MYSQL
SELECT sex,COUNT(*) FROM player GROUP BY sex;
SELECT level,COUNT(level) FROM player GROUP BY lever;
LIMIT:限制数量
1 | LIMIT 3 |
DISTINCT:去重
UNION:合并查询结果集(并集)
- 合并两个查询结果 会默认去掉重复内容 两者都有 可加ALL UNION ALL
INTERSECT:(交集)
EXCEPT:合并结果集(差集)
索引
用来提升查询效率的数据结构 可以帮助我们快速定位到想要查询的结构
CREATE INDEX 创建索引
- INDEX前面可加上可选的索引类型
[UNIQUE|FULLTEXT|SPATIAL]唯一 全文 空间
1 | SELECT * FROM player; |
查看索引
SHOW INDEX FROM fast1
2
3
4
5
6
7
#### 删除索引
- ```mysql
DROP INDEX 索引名称 ON 表名
视图
创建视图:CREATE VIEW 视图名
1 | CREATE VIEW top10 |
表中的数据发生变化时 视图也会变化
数据库导入导出
1 | mysqldump -h IP -u 用户名 -p -d 数据库名 > 导出的文件名 |
Mysql 数据类型
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 (10,2)10位数,2小数点 | 依赖于M和D的值 | 小数值 |
| 类型 | 大小 ( 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 | 混合日期和时间值 |
| TIMESTAMP | 4 | ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | 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 | 极大文本数据 |



