安装
1、homebrew安装
首先通过homebrew下载mysql
$ brew install mysql
复制代码
下载完成之后通过命令启动mysql
$ mysql.server start
复制代码
如果无报错,说明成功启动,如果出现如下错误:
mysql.server command not found
这个时候在执行
$ brew install mysql
复制代码
会出现如下错误
Warning: mysql-8.01 already installed, it's just not linked
这个时候先依次执行如下命令:
$ sudo chown -R 'username' /usr/local
$ brew link --overwrite mysql
复制代码
看到如下提示,说明link成功了:
Linking /usr/local/Cellar/mysql/8.01... 93 symlinks created
再执行
mysql.server start
复制代码
启动成功!!
2、安装包安装
首先去官网下载安装包 过程像安装一个普通应用,一直下一步
安装完成后在系统偏好设置里面会多出一个mysql
按钮,点击-》start MySQL server 启动服务
设置环境变量:
$ vim ~/.bash_profile
复制代码
添加配置
PATH=$PATH:/usr/local/mysql/bin
复制代码
设置完毕之后执行:
source ~/.bash_profile
复制代码
不想每次都执行这一句,可以将其加入到终端配置
vim .zshrc
复制代码
在最后一行添加配置,就不用每次都输入了
source ~/.bash_profile
复制代码
之后就可以正常的链接数据库了:
mysql -uroot
复制代码
彻底卸载
依次执行如下命令
$ sudo rm /usr/local/mysql
$ sudo rm -rf /usr/local/mysql*
$ sudo rm -rf /Library/StartupItems/MySQLCOM
$ sudo rm -rf /Library/PreferencePanes/My*
$ sudo rm -rf ~/Library/PreferencePanes/My*
$ sudo rm -rf /Library/Receipts/mysql*
$ sudo rm -rf /Library/Receipts/MySQL*
$ sudo rm -rf /var/db/receipts/com.mysql.*
$ sudo rm -rf /usr/local/Cellar/mysql*
$ sudo rm -rf /usr/local/var/mysql*
$ sudo rm -rf /tml/mysql.*
$ sudo rm -rf /tml/my.*
$ sudo rm -rf /tml/mysqlx.*
$ sudo rm -rf /Users/yit/Library/Caches/Homebrew/mysql-8.0.11.sierra.bottle.tar.gz
$ brew cleanup
复制代码
初始化
Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码:
$ mysqladmin -u root password "new_password"
复制代码
链接数据库
$ mysql -u root -h localhost -p new_password
复制代码
语句
insert
插入时给所有字段赋值
valuse的顺序需要和表中一至,主键id可以传为null或者default
$ insert into table values (NULL|DEFAULT,val1,val2,val3)
复制代码
插入时给部分字段赋值
方式1
$ insert into table (key1,key3,key2) values (val1,val3,val2)
复制代码
方式2
$ insert into table set key1='val1',key2='val2'
复制代码
插入多条记录
valuse后可以跟多条数据的值,以逗号分隔
$ insert into table (key1,key3,key2) values (val1,val3,val2),(val11,val32,val22)
复制代码
插入查询结果
将table2中的key2>3的key2集合插入到table
$ insert into table (key1) select key2 from table2 where key2>3
复制代码
update
单表更新
不加条件会更新所有的数据
$ update table set key = val
复制代码
更新id大于5的数据
$ update table set key = val where > 5
复制代码
delete语句
单表删除
删除id=5的数据
$ delete from table where id = 3
复制代码
select语句
查询全部
$ select * from table
复制代码
条件查询
$ select * from table where key = 'value'
复制代码
查询部分字段
$ select key1 as key11,key2 from table
复制代码
分组查询
将查询结果按照key1分组
$ select key1 as key11,key2 from table group by key1
复制代码
having
将查询结果中key1>10的按照key1分组
$ select key1 as key11,key2 from table group by key1 having key1>10
复制代码
分组的having条件如果是条件形式,判断条件的字段必须包含在select里面,否则报错,例如:
$ select key1 from table group by key1 having key2>10
复制代码
having条件也可以是聚合函数,并且聚合函数中可以出现select没有的字段
$ select key1 from table group by key1 having count(key2)>10
复制代码
order by 默认升序
降序:desc,升序:asc
将查询结果按照id降序排列
$ select key1 from table order by id desc
复制代码
order by可以跟多个字段,例如下面的例子,会先按照key1排序,如果排序不成功就会按照key2排序,以此类推
$ select key1 from table order by key1,key2,key3 asc
复制代码
imit
查询前两条数据
$ select key1 from table limit 2
复制代码
limit可以传两个参数(offset,count),如下查询:从低条开始,查询两条数据(offset从0开始计数)
$ select key1 from table limit 2,2
复制代码
子查询
子查询是指在sql语句中再次使用select子句,子查询一定要包在括号中,例如?:
$ select key1 from table where col1 = (select col2 from table2)
复制代码
any、some、all
有时候子查询返回了多条结果,直接使用会报错,这时候就需要使用关键字any、some、all
any、some:满足查询结果中任意一条 all:满足所有查询结结果,例如:$ select key1 from table where col1 = any(select col2 from table2)
复制代码
使用原则
运算符 | any | some | all |
---|---|---|---|
> 、>= | 最小值 | 最小值 | 最大值 |
<、<= | 最大值 | 最大值 | 最小值 |
<、<= | 任意值 | 任意值 | |
<>、!= | 任意值 |
in、not in
in:满足子查询中的任意一条
$ select key1 from table where col1 in (select col2 from table2)
复制代码
not in:不满足子查询中的所有结果
$ select key1 from table where col1 not in (select col2 from table2)
复制代码
批量插入查询的结果
将table1中查询到的结果插入到table2
$ insert table2 set key2 = (select key1 from table1 group by key1)
复制代码
多表操作
多表更新
将table2和table1通过key1=key2这个条件连接,并且把key1赋值成table2中的id值
$ update table1 inner join table2 on key1 = key2 set key1 = table2_id
复制代码
creat ... select
创建table2,并将table1查询到的结果插入到table2
$ create table table2
> (
> table2_id smallinit unsigned primary auto_increment,
> table2_name
> )
> select key1 from table1 group by key1
复制代码
多表字段名重复
当两张表中字段名重复的时候,可以给表取别名
$ update table1 as tb1 inner join table2 as tb2 on tb1.key1 = tb2.key2 set key1 = table2_id
复制代码
join、inner join 、outer join
inner join:显示符合连接条件的记录
join、outer join(以left join为例):显示左表中全部数据以及右表中符合条件的记录
三张以上表链接
可以进行多张表的链接
$ select * from table1 as tb1 inner join table2 as tb2 on tb1.key = tb2.key inner join table3 as tb3 on tb1.key = tb3.key
复制代码
自连接(场景:无限级分类)
假设有一张分类表menu有3个字段 type_id、type_pid、type_name
创建自连接,可以想象成有两张一模一样的表
$ select p.type_id,p.type_name,s.type_name from menu as s left join menu as p on s.type_pid = p.type_id
复制代码
多表删除
$ delete tb1 from table1 as tb1 left join table2 as tb2 where (tb1.key = 10)
复制代码
运算符和函数
字符函数
table表
id | name | sex
---|---|---
1 | hellosanbao | 男
1 | boomboom | 男
复制代码
concat:拼接查找
查找出name和sex的拼接结果(例如:'hellosanbao-男')
$ select concat(name,'-',sex) from table
复制代码
concat_ws:使用指定字符拼接查找
查找出name和sex的拼接结果(例如:'hellosanbao-男')
$ select concat_ws('-',name,sex) from table
复制代码
format:数字格式化
保留一位小数
$ select format(123.01,1)
复制代码
lower:转小写
$ select lower('MYSQL')
复制代码
upper:转大写
$ select upper('mysql')
复制代码
left:获取左侧字符串
获取 'mysql'的前两位
$ select left('mysql',2)
复制代码
left:获取右侧字符串
获取 'mysql'的后两位
$ select right('mysql',2)
复制代码
函数嵌套
将 'mysql'的后两位转成大写
$ select upper(right('mysql',2))
复制代码
emmmmm,有点多。。不想列了。。