mysql
2021-04-05 19:22:21 0 举报
AI智能生成
登录查看完整内容
系统性记录mysql的知识点,更新中
作者其他创作
大纲/内容
基础知识
守护进程
独立在后台运行的程序
独立于控制终端、不能与用户直接交互
通过ps axj命令查看系统中的守护进程,守护进程通常是以d结尾的名字
mysql
x
mysql-server服务端安装
1、首先你要保证你的服务器上没有安装过,或者已经彻底卸载了mysql其他版本。卸 载流程:① sudo apt-get autoremove --purge mysql-server-*② sudo apt-get remove mysql-server③ sudo apt-get autoremove mysql-server④ sudo apt-get remove mysql-common (非常重要)⑤ 清理残留数据: dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -Psudo find /etc -name \"*mysql*\" |xargs rm -rf⑥ 最后用 dpkg -l | grep mysql 检查,如无返回即干净卸载
2、 add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty main universe'
3、apt-get update(这一步花时间较长)
4、apt-cache search mysql | grep mysql-server
6、apt install mysql-server-5.6 安装5.6版本 (这里没用apt-get,而是apt)或者apt install mysql-server-5.5安装5.5版本 (这里没用apt-get,而是apt)。
等待安装完毕之后MySQL服务端会自动启动
service mysql status
服务启动
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
systemctl start mysql
use mysql rather than mysqld on Debian-based and SLES systems.
安装客户段
sudo apt-get install mysql-client
查看用户名和密码
cat /etc/mysql/debian.cnf
进入数据库新建用户名
mysql -u debian-sys-maint -p
update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost';
update mysql.user set plugin='mysql_native_password';
flush privileges;
重新以新建用户和密码进入数据库
mysql -u root -p
设置远程连接
新建一个host%
grant all privileges on *.* to souvc@\"%\" identified by \"abc123\" with grant option;
登录Ubuntu服务器,修改配置文件。
cd /etc/mysql/mysql.conf.d/
vim/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address= 127.0.0.1注释
重启数据库
etc/inint.d/mysqlstart
用新建的用户名密码连接
ifconfig
获取IP地址
端口
3306
在ubuntu各个文件位置
服务位置
/etc/init.d/mysqld
没有!!!
数据库位置
/var/lib/mysql
ubuntu中文件的位置
/usr/bin 客户端程序和mysql_install_db/var/lib/mysql 数据库和日志文件/var/run/mysqld 服务器/etc/mysql 配置文件my.cnf/usr/share/mysql 字符集,基准程序和错误消息/etc/init.d/mysql 启动mysql服务器
默认端口
netstat -tnlp 3306
远程连接的配置位置
/etc/mysql/mysql.conf.d/mysqld.cnf
ubuntu命令
查找进程
ps aux|grep mysql|grep 'my.cnf'
查找文件位置
which mysqld
whereis
切换用户
sudo su
包管理
dpkg命令是Debian Linux系统用来安装、创建和管理软件包的实用工具。
yum
centos
apt-get
ubuntu
教程
数据库操作
库名和表名大小写敏感
创建
create database 数据库名 charset=utf-8;
删除
drop database 数据库名;
查看
show databases;
select database()
use test;
表操作
创建表
default
primary key
auto_increment
删除表
drop table 表名
改变表
alter table 表名 add|change|drop 列名 类型;
rename table 原表名 to 新表名;
查看表
describe pet;
子主题
show tables;
show create table 表名;
SHOW INDEX FROM tbl_name
数据操作
载入数据
load data local infile into方法
LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINATED BY '\\';
windows上
LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
/N代表NULL
insert into values方法
删除数据
delete from table where
删除表中的数据
更新数据
update pet set birth = '1989-08-31' where name = 'Bowser';
查询数据
条件筛选
去重
select distinct 列名 from 表名
只能放在最前面,当有多个字段都不相同时才会被过滤
排序
先按照字段1排序,然后再在字段1内部按照字段2排序
分页
索引从0 开始
计算
日期计算
month(birth) 生日月
year()
day()
上一天
SELECT '2018-10-32' + INTERVAL 1 DAY;
interval
下一月
NULL
is null
is not null
不能用null进行加减乘除和比较
会得到null
测试0和空字符是否为null
select 0 is null;
模式识别
% _ * ^ $ {repeat times} [单个字符]
计数
ONLY_FULL_GROUP_BY 不开启
SET sql_mode = '';
count不与group by使用也可以有结果,返回所有行数
联表查询
两个不同的表
连接自己
on也可以用于过滤筛选
如果是left join
on只对右表数据进行筛选
连表方式
left/right/inner/full join on
mysql没有完全连接模式
可以用left join union right join
多表全连接
用union+left join.. on +left join..on
两表全连接
select * from stu left outer join cls on(stu.cid=cls.cid) union select * from stu right outer join cls on (stu.cid=cls.cid);
两个表各自的元素
[left join] + [where A.column is null] + union + right join + [where B.column is null]
batch模式查询
优势
方便重复查询,每次可以直接从txt里面执行sql语句
windows
mysql -e \"source batch-file\"
linux
mysql -h host -u user -p < batch-file
mysql < batch-file > mysql.out
事务
管理复杂查询,必须成批执行的mysql操作
产生依赖关系的动作能够同时操作成功或同时返回初始状态
A给B转账但是没有输对银行卡号,不能A卡里少了B卡里没多
常见的查询例子
一列的最大值
SELECT MAX(article) AS article FROM shop;
最大值所在的一行
排序+limit
子查询 单值比较
left join 自身 on后面的条件不止可以是等号
每类的某列最大值
max和group by
select 后面如果有不是group by 的字段且没有加聚合函数的话,会报错
每类的某列最大值所在一行
相关查询+where后单值比较
不相关查询 from后面join
left join 自身
窗口函数
定义变量存储结果
SELECT font color=\"#c41230\
SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
外键约束
可以在定义列时使用REFERENCES tbl_name(col_name)子句,该子句没有实际作用,并且仅作为备忘录或注释来提示您当前定义的列是预期的
获取当前编号
select @last:=last_insert_Id();
用两个键搜索
union
union all和union都是对两个结果集进行并集操作,但是union all包括重复行,不进行排序;而union不包括重复行,同时默认规则排序
查看一个用户在一个月内有几天上个某个网站
查询每类中的前n名
EXISTS subqueries
不返回列表的值的.只是返回一个ture或false的结果
in()后面的子查询 是返回结果集的
select a.*from tb t1 where exists( select count(distinct salary) count where depno=t1.depno and sal>t1.sal having count < 5
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
查询某个部门最高工资
查询每个科目成绩比平均成绩高的同学
删除重复记录
找出单科成绩高于该科平均成绩的同学名单(该学生所有科都必须满足)
每只队伍总成绩
每个月加上前几个月的汇总
每个月销量占总销量比例
筛选需要聚合的列
查看顾客上次的购买时间可以这样去查询
对每个月的groupby函数再次汇总
查询出每门课都大于80 分的学生姓名
select name from table group by name having min(fenshu)>80
函数对序列每一元素做出条件判断,并把所有的True元素返回,返回对象是一个迭代器
查找重复邮件
select email from table group by email having count(email)>1;
从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。
数据类型
数字类型
准确值
integer
int
4
smallint
2
tinyint
1
mediumint
3
bigint
8
decimal
一共5位保留2位小数
numeric
相当于 decimal
约数
float
四舍五入
double
Bit-Value Type - BIT
属性
ZEROFILL
默认的空格填充将替换为零
UNSIGNED
无符号
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
使得两个unsigned相减可以是负的
定义位数
日期类型
类型
DATE 只有日期 'YYYY-MM-DD'
DATETIME 日期+时间 'YYYY-MM-DD hh:mm:ss'
TIMESTAMP 日期+时间 '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
TIME 时间
'-838:59:59' to '838:59:59'
YEAR(4)
转换
TIME和DATETIME值转换为数字形式
字符串类型
sql函数
数值计算
数值函数
运算规则
如果两个数都是整数,会得到bigint(-2^63-2^64)
如果两个数有一个是实数或者字符,会得到精度最大的值
DIV 整数除法,不四舍五入,得到bigint
/ 除法 默认四位 四舍五入 会根据两个数的小数位变化
Mod % 取余数
类型转换
控制流功能
case两种用法,一种是case value when other_value then .. end用于比较值另一种用于不同情况的不同处理
时间和日期
日期/时间加减
获取日期/时间
提取年/月/日/周/时/分/秒
聚合函数
2)\t大部分聚合函数可以用来当作窗口函数
语法
窗口函数执行类似聚合的操作,但是聚合的组查询结果只有一行,一个窗口函数会为每行产生一个结果
Over 语句可以没有的情况
Over语句必须有的情况
sql语法
数据定义句法
1)ALTER2) CREATE3) DROP4) RENAME5) TRUNCATE TABLE
数据操作句法
limit
SELECT ...UNION [ALL | DISTINCT] SELECT ...[UNION [ALL | DISTINCT] SELECT ...]
子查询
单行查询
·
SELECT * FROM t1 AS t WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
non_subquery_operand comparison_operator (subquery)= > < >= <= <> != <=>
\tANY IN SOME ALL
SELECT * FROM T2 WHERE N>ALL (SELECT N FROM T1)
多行查询
\tEXIST NOT EXIST
SELECT DISTINCT store_type FROM stores WHERE EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
0 条评论
回复 删除
下一页