一.数据库 mysql
创建使用:
sudo apt-get install mysql-server 安装服务器端
sudo service mysql start 启动服务
ps ajx | grep mysql 查看进程中是否存在mysql 服务
sudo service mysql stop 停止服务
sudo service mysql restart 重启
sudo apt-get install mysql-client 安装命令行客户端
mysql命令行:
1.mysql -uxxx -pxxxx -u后接用户名 -p接密码
一般是 mysql -ulf -p -p后面不接密码 回车 后面输密码就看不到
退出:quit or exit 一般是exit
2.语句后面都有 ;
3.select version(); 查看版本号
4.show databases; : 查看所有库
5.use xx_db; : 进入数据库
6.select database(); : 查看当前库 基本没用
7.create database xxxx_db charset=utf8; : 创建一个xxxx_db 编码是utf8的数据库
8.show create database xxx_db; : 查看库编码
9.drop database xxx_db; : 删除库xxx
10.show tables; : 显示当前库的表
11.desc 表名; : 查看表结构
数据库操作:
创建表:create table table_name(colum1 datatype contrai...primary key(one));
primary key:主键
unsigned :不重复
not null : 不为空
修改表:
添加表字段: alter table 表名 add 列名 类型...;
修改表字段: alter table 表名 change 列原名 列新名 类型及约束;
删除表字段: alter table 表名 drop 列名;
删除表:
drop table 表名;
查看表创建语句: show create table 表名;
表操作:增删改查(curd) --- create update read del
1.增:
insert into 表名 (列名1...) values (xxx...);
2.删:
delete from 表名 where 条件
注:一般用逻辑删除
update student set isdelete = 1 where id =1;
3.改:
update 表名 set 列1 = 值1 ... where 条件
4.查:
select 列名... from 表 where 条件 order by 列名 asc|desc
select distinct 列名 from表; ,,,,, 消除重复行
数据库的备份及恢复:
1,备份 退出MySQL 直接在终端
mysqldump -u名字 -p 数据库名 > 文件名.sql; 或者指定地址 ./Desktop/xxx.sql
2,恢复
1) 连接mysql 创建一个库 xxx_db
create database xxx_db charset=utf8;
2) 退出MySQL
mysql -u名字 -p xxx_db < xxx.sql;
3.可以将创建库 创建表 添加数据都放在一个xxx.sql中
---->连接mysql
---->source xxx.sql; --执行SQL命令 注: --是在SQL中的注释
二.表的高级操作:
1.多表连查
1,内连接: 取两个表的交集
select * from 表1 inner join 表2 on 表1.xxx = 表2.xxx;
2.左连接: 查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
select * from 表1 left join 表2 on 表1.xxx = 表2.xxx;
3.右连接: 查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
select * from 表1 right join 表2 on 表2.xxx= 表2.xxx;
4.自连接: select * from 表名 as xx1 inner join 表名 as xx2 on xx1.xxx= xx2.xxx;
2.一个表中的一行数据插入另一个表中的一行
insert into 表1 (字段名) (select xxx from 表2 where xxxx其他条件);
3.根据一个表中的一列数据 更新 另一个表中的一列数据
update (表1 inner join 表2 on 表1.xxx=表2.xxx) set 表1.字段名 = 表2.字段2;
原理 eg: select * from 表1 inner join 表2 on 表1.xxx=表2.xxx; --->查询这个俩表关联起来
update 上面关联表结果 set 两表中的一个表的字段 ----> update中把select ...from 去掉
4.分页查询
select * from 表 limit 第几个,几个; ( 个数*(页数-1) , 个数 ) 2*(2-1) 2 第几个 从0开始
5.分组
select 字段1[,....] from 表 group by 字段1; -- 可以起去重作用
select 字段 from 表 group by 字段 having 条件... ;
eg: select gender,count(*) from students group by gender having coun(*)>2;
6.创建表的同时插入数据
create table 表名 (
id int unsigned primary key auto_increment,
字段2,
....
) select 字段1... from 表 ....
三.聚合函数 —> 就是一些常用的函数
1.count(*)
2.max(id)
3.min(id)
4.sum(id)
5.avg(id) 平均值
6.round(xx,2) 保留小数2位
四.不常用系列
1,视图:只能查
create view 视图名称 as select语句
drop view v_xxx
好处: 提高了重用性,就像一个函数
对数据库重构,却不影响程序的运行
提高了安全性能,可以对不同的用户
让数据更加清晰
2,事务:在修改重要数据的地方使用 特别是钱
好处:->原子性(Atomicity)
->一致性(Consistency) 事务中多个SQL 都执行 or 都不执行
->隔离性(Isolation)
->持久性(Durability)
begin; | start transaction; 开启事务 只对数据 里面不要用drop
增删改 .... 对数据进行修改 --->变更到缓存中 不是实际修改 只有提交才是物理上的修改 但是不能对表,库进行修改,不能回退
rollback; 放弃缓存中变更的数据
commit; 提交事务
3,索引:当数据库中数据量很大时,查找数据会变得很慢时 就给这个表添加一个索引 性能优化很大
坏处: 只能对基本不修改的表添加 索引加速查的性能 ,经常改的表加上索引 会导致 插入修改时同时更新索引 速度会降低很多
对性能影响很大
原理:就是将表数据分段
总:索引是个双刃剑,需用好,不然就不用
查看索引:show index from 表名
创建索引:create index 索引名 on 表名(表字段名(长度)) --->字段类型不是字符串,可以不写长度 长度需与字段定义的一致
删除索引:drop index 索引名称 on 表名
总:
select * from xxx where 条件 group by xx order by xx asc | desc limit n,m
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count