Mysqlt速成笔记 (全网最全的知识点涵盖)

前言

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; //使用数据库

//创建表


create table player (
    id INT,//忘记名字类型整型
    name VARCHAR(100),//大小为100的字符串
       exp INT,
    gold DECIMAL(10,2),
)


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 删除视图

教学视频->笔记来源

你可能感兴趣的:(杂谈,笔记,mysql)