mysql总结
每日总结
安装sudo apt-get install mysql-server 安装服务端
sudo apt-get install mysql-client
sudo apt-get install update 更新 apt-get
sudo aot-get -f install 修复依赖关系
数据库服务端sudo /etc/init.d/mysql status 查看状态
sudo /etc/init.d/mysql start 打开
sudo /etc/init.d/mysql stop 关闭
sudo /etc/init.d/mysql restart 重启
客户端mysql -h主机地址 -u用户名 -p 密码
增添加数据库 CREATE DATABASE 数据库名;
添加表 CREATE TABLE table_name (column_name column_type);
添加字段 ALTER TABLE table_name ADD i INT;
添加数据 INSERT INTO table_name ( field1, field2,...fieldN )VALUES( value1, value2,...valueN );
删删除数据库 drop database ;
删除表 DROP TABLE table_name ;
删除字段 ALTER TABLE table_name DROP i;
删除数据 DELETE FROM table_name [WHERE Clause]
删除外键 alter table your_table_name drop foreign key your_foreign_key_id;
( show create table tablename) 查看外键
删除主键 (alter table customers modify c_id int;)
alter table customers drop primary key;
改修改表名 ALTER TABLE user10 RENAME TO user11;
修改字段名 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
修改字段类型 ALTER TABLE table_name MODIFY c CHAR(10);
修改数据 UPDATE table_name SET field1=new, WHERE ''''
查库查询 show datavases
表查询 show tables
表结构查询 desc table_name
表数据查询 select * ''''''
聚合函数 , 唯一函数 \AVG
COUNT
MIN / MAX
SUM
order by
-- 按照name进行降序排序
select * from a order by name desc;
默认升序
group byselect name from score4 group by name;
select name,avg(fengshu) from score4 group by name;
主键
id int primary key not null auto_increment
表中的每一行都应该具有可以唯一标识自己的一列(或一组列)。而这个承担标识作用的列称为主键。如果没有主键,数据的管理将会十分混乱。比如会存在多条一模一样的记录,删除和修改特定行十分困难。
外键
创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)
在新增表之后增加外键:修改表结构
alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段);
约束模式
外键有三种约束模式(都是针对父表的约束):
①district 严格模式(默认的),父表不能删除或者更新一个已经被子表数据引用的主键字段(不是被引用的记录,被引用的记录除外键字段外其它字段可以更新删除)
②cascade 级联模式,父表对主键字段的更新会使子表关联的外键字段对应更新;父表对主键字段的删除会使子表关联的外键字段所在记录被删除
set null 置空模式,父表对主键字段的更新或删除会使子表关联的外键字段被置空;
通常一个合理的约束模式,删除的时候子表置空,更新的时候子表级联操作
指定约束模式:foreign key(外键字段) references 父表(主键字段) on delete set null on update cascade;
索引创建索引 CREATE INDEX indexName ON mytable(columnName);
添加索引 ALTER table tableName ADD INDEX indexName(columnName)
建表的时候写索引 INDEX [indexName] (columnName)
*删除 DROP INDEX [indexName] ON mytable;
唯一索引 UNIQUE INDEX
显示索引 SHOW INDEX FROM table_name; \G
子查询
SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1)
多表查询
SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件
连接查询
内连接select 字段名列表 from 表1 inner join 表2 on 条件
inner join 表3 on 条件
外连接左连接 select 字段列表 from 表1 left join 表2 on 条件语句
右连接 select 字段列表 from 表1 rigth join 表2 on 条件语句
内 外连接的区别内连接指的是把表连接时表与表之间匹配的数据行查询出来,就是两张表之间数据行匹配时,要同时满足ON语句后面的条件才行。
and左连接的意思是,无论是否符合ON语句后面的表连接条件都会把左边那张表的记录全部查询出来,右边的那张表只匹配符合条件的数据行。右连接则与之相反
数据备份
1数据备份(mysqldump ,在linux上备份)
mysqldump -uroot -p db2>db2.sql
将db2 备份到当前目录下
2数据恢复
mysql -uroot -p db2 < db2.sql;
在恢复库时,如果恢复到原来的库 ,会将表中的数据覆盖,新增的表不会删除
在恢复库时,如果库不存在,则必须先创建空库.
面试mysql理论
索引的优缺点
sql优化
避免全表扫描
1 where 字句尽量 不适应 != ,否则放弃索引,全表扫描.
2 尽量避免NULL 判断
3尽量避免用 or 连接条件 ,否则全表扫描
优化前
select id from t1 where id=10 or id =20
优化后
select id from t1 where id =10
union all
select id from t1 where id =20
4 模糊查询 尽量不免避免使用前置 % ,否则全表扫描
5 尽量避免使用in 和 not in ,否则全表扫描
6 bu
锁
1锁类型
1读锁(共享锁)
查询 (select) 加读锁之后 ,别人不能更改此表记录,但可以进行查询.
2 写锁(互斥锁,排他锁)
更新(update) 加写锁之后,别人不能查,不能改
2锁粒度
行级锁 Innodb
表级锁 myisam select 加读锁 锁一张表 update 加写锁,锁表
存储引擎
show engines innodb myisam memory
查看 表的存储引擎
innodb 特点
1 支持实物事物 外键 行级锁
2 共享表空间
myisam
支持表级锁
独享表空间
表名.from 表记录
表名.MYD 表记录
表名.MYI 索引信息
如何决定使用哪一个存储引擎
查询多 用MyISAM
操作多 用InnoDB
mysql 分页 limit
mysql 索引
Mysql 账户管理
开启mysql远程连接
1 sudo -i
2 cp etc/mysql/mysql.cnf.d
3 cp mysql .cnf mysql.cnf.bak2 备份
4 vi mysqld.cnf
#bind-address=127.0.0.1
把前面的# 去掉 ,保存退出
用root 用户添加授权用户
用root 用户 登录mysql mysql -uroot -p13456
授权
mysql > grant 权限列表 on 库名.表名 (. 代表所有的库和表) to '用户名 '@'% ' identified by '密码' with grant option;
with grant option: 给用户 授权用户的权利
权限列表 : all privileges(全部) , select,update,drop,
库名.表名 : db2.* db2 库的所有表 . 全部的库 ,全部的表
grant all privileges on . to 'huang'@'%' identified by 'chengwei'
with grant option;
添加授权用户 rabbit 密码 ,对db2 库 所有表 只有查询权限,可以从任何ip连接
事物
事物操作
开启事物
mysql> begin; | start transactions
sql 命令 不会提交到数据库
终止事物
mysql > commit ; | rollback
事物里的操作,要么全做 要么全不做
mysql python
python3
模块 pymysql
安装 在线 sudo pip3 install pymysql
离线 解压pymysql.tar.gz 运行python3 setup.py install
python2
模块名 MySQLdb
db.close() 断开连接
db.rollback() 回滚
orm(object Relation Mapping) 对象关系映射
python 面向对象 ---- orm 框架 ----- mmysql 数据库
在django中,根据代码中的类自动生成数据库的表
类名对应------》数据库中的表名
类属性对应---------》数据库里的字段
类实例对应---------》数据库表里的一行数据
python 操作 mysql
1 pymysql 操作原生sql命令
2 orm 操作