mysql.server start
//启动服务
brew services start mysql //开机自动启动
//这个启动的是服务端
mysql -u root -p
//使用客户端来链接服务端
-u root 表示使用 root 用户进行链接
-p 表示使用密码登入
show databases;
用来查看数据库
可以使用 use 命令切换到数据库
show table
#查看数据库中有哪些表
select * form tables_priv;
#用来查看tables_priv表中数据
mysqlsh
#启动mysql服务
\help
#查看帮助信息
\connect root@localhost
链接本地msql服务
\use 使用数据库
使用\py切换语言然后执行py的代码
SQT基础
关系型数据库
非关系型数据库
1.创建数据库存储数据
create database game;//创建game类型数据库
use game; //使用数据库
MSQLT的数据类型:
1.数值类型
2.日期类型
3.时间类型
4.字符串类型
5.json类型
6.空间类型
DESC player;//用来查看player表的结构
AKTER table player MODIFY COLUMN name VARCHAAR(200);
#AKTER table表示修改表
#MODIFY COLUMN 表示我们要修改的列,和新的数据类型
AKTER TABLE player RENAME COLUMN name to nick_name;
# RENAME COLUMN ... to...表示重命名字段
ALTER TABLE player ADD COLUMN last_login DATETIME;//注意要添加数据类型
# ADD COLUMN 表示在表中添加新列
AKTER TABLE player DROP COLUMN last_login;
# DROP COLUMN 删除字段
DROP TABLE player;
# DROP TABLE 删除表
# 插入数据
INSERT INTO player (id,name,lever,exp,gold) VALUES(1,"张三",1,1,1);
#如果顺序相同的话则可以省略类型对应的数据
插入多条数据
# INSERT INTO player (id,name) VALUES(1,"张三",1),(2,"李四");
修改表结构
# ALTER TABLE player MODIFY LEVEL INT DEFAULT 1;//这个代表前面的元素
# 修改表的数据
UPDATE player set level = 1;//错误无法定位元素
修改player中lever的值?//修改哪个啊?是插入的元素?还是说可以指定元素?
所以要加入语句指定判断的值;
\单次修改
UPDATE player set level = 1 where name = "李四";
/多次修改%%%%
UPDATE player set level = 1;
由于无法定位元素,所以会将全部 level 修改
多字段修改
UPDATE player set exp = 0,gold = 0;
#UPDATE player set 用于修改字段元素
$ 删除表中元素
DELETE 语句删除表中元素
DELETE 语句加上表名 用 where 定位
DELETE FROM player where golde=0;
这里将golde删除
#导出
mysldump -u root -p game > game.sql
将root中的数据导出到game.sql 这个文件中
#导出
mysql -u root -p game < game.sql
将game.sql文件中数据导入到 game这个数据库
# 常用语句
### Where 子句 用来提取满足指定标准的记录
SELECT * FROM player WHERE level = 1;
SELECT * FROM player WHERE level > 1 AND level < 5;
确定查找区间
## 还有 () AND OR IN (<,>,=) 按优先级排序
SELECT * FROM player WHERE level BETWEEN 1 AND 10;
查找[1,10]范围内的数据
## LIKE 匹配语句
SELECT * FROM player WHERE name LIKE
% 表示任意个字符
_表示任意一个字符
# 正则表达式 REGEXP
Tips : 常用通配符
. 任意一个字符
^ 开头 $ 结尾
[abc] 其中任意一个字符
[a-z] 范围内的任意一个字符
A|B A或者B
NULL 空值
SELECT * FROM player email is NOT null;
SELECT * FROM player email <=> null; //查找为null的值
ORDER BY : 排序
SELECT * FROM player ORDER BY level;//将level按照升序排序
SELECT * FROM player ORDER BY level DESC,exp ASC; //按照等级降序排序按照经验顺序排序,ASC表示升序排序
按照区间排序
SELECT * FROM player ORDER BY 5 DESC
括号里面加列
AVG () 返回集合平均值
COUNT() 返回最大值
MAX() 返回最大值
MIN() 返回最小值
SUM() 求和
分组查询
SELECT sex, COUNT(*) FROM player group by sex;
# group by 将类进行分组
SELECT level, COUNT(level) FROM player group BY lever having COUNT(level) > 4;
将区间加起来, player 等级大于4的每个区级内等级和
# ORDER BY
对结果进行排序
SELECT level, COUNT(level) FROM player group BY lever having COUNT(level) > 4;
#SUBSTR(name,1,1) FROM player
截取字符串的一部分,第一个参数是指的要截取的字符串,
# LIMIT 限制数量
LIMIT 3,3 限制输出,输入;
DISTINCT : 去重
SELECT DISTINCT sex FROM
# UNION 合并记录
(默认去除重复记录)(避免 : ALL)
SELECT * FROM player WHERE level BETWEEN 1 AND 3
UNION
SELECT * FROM player WHERE eXp BETWEEN 1 AND 3;
OR合并俩条件
UNION 合并俩查询结果(取俩查询结果的并集)
# INTERSECT : 合并结果集(交集)
SELECT * FROM player WHERE level BETWEEN 1 AND 3
INTERSECT
SELECT * FROM player WHERE eXp BETWEEN 1 AND 3;
SELECT AVG(level) from player //查询玩家平均等级
select *from player where level >(SELECT AVG(level)fromplayer)
select level,ROUND((SELECT AVG(level) from player)) as average,leve - ROUND((SELECT AVG(level) from player)) from player ;
# as 语句给列起别名
用子查询插入数据
# insert into 语句
# 关联表
内连接:
INNER JOIN
返回俩表中都有的数据
左连接
LEFT JOIN
左连接返回左表中所有数据和右表中匹配的数据,右表中没有的数据用NULL填充
RIGHT JOIN
右连接返回右表中所有数据和左表中匹配的数据,左表中没有的数据用NULL填充
玩家表和装备表关联
select * from player(左表)
inner join equip
on player.id = equip.player_id(右表)
通过 player.id 和 equip.player_id 将玩家表和装备表关联
#取别名
select *from player p,equip e
where p.id=e.player_id//连接条件
player 别名 p ,equip 别名 e
连接要正确,否则会产生迪卡尔积
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX indeX_name
ON tbl_name (index_col_name,...)
CREATE INDEX 创建索引
DROP INDEX 删除索引
指定一个索引
alter table fast add index name_index (name)
CREATE VIEW (视图名称) AS 表
例子:
CREATE VIEW top10
AS
select * from player order by level desc limit 10;
# updae 更新视图
视图的数据是变化的
# drop view 删除视图
教学视频->笔记来源