数据库mysql 日常操作

一.数据库 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

你可能感兴趣的:(mysql,数据库,MySQL,python)