MySql的基本操作
1、启动数据库服务
mysql.server start
2、登录数据库
mysql -h host -u root -p mima
3、查看数据库
mysql> show databases;
4、新建一个数据库,可以指定编码
create database testmysqldatabase default charset utf8 collate utf8_general_ci;
5、进入某个数据库
use databasename;
6、查看数据表
show tables;
7、删除某个数据库
drop database databasename;
8、使用数据库
use db_name;
9、mysql的默认数据库及作用
mysql 用户权限相关数据
test 用于用户测试数据
infornation_schema mysql本身架构相关数据
10、用户管理
创建用户---指定用户专用IP地址登录 用户名@% 用户可以在任意IP地址下访问
create user '用户名' @'IP地址' identified by '密码';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@‘IP地址’;to '新用户名'@'IP地址';
修改密码
set password for '用户名'@'IP地址'=Password('新密码');
用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对mysql数据库操作
11、授权
show grants for '用户'@'IP地址'; 查看权限
grant 权限 on 数据库.表 to '用户'@'IP地址'; 授权 *.*表示所有数据库的所有表 数据库.存储过程
revoke 权限 on 数据库.表 from '用户'@'IP地址'; 取消权限
权限:all privileges 除grant外的所有权限
select 查询权限
select insert 查和插入权限
12、创建表
create table 表名(
列名 类型 是否为空;
列名 类型 是否为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
13、插入数据
insert into 表名(列名,列名) values('对应的值','对应的值')
14、navicat工具操作mysql数据库工具
15、有这个自增的设计和默认值的设计 主键是一种索引
CREATE TABLE `t2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(10) NOT NULL default 'alex',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--InnoDB 支持事务回滚
16、数据类型 int tonyint char vachar-变长 枚举类型-规定了值的大小范围可选项 集合类型-SET--约束插入的值必须是集合的子集 blob--二进制存储图片等信息 时间格式的类型创建各不相同 bool类型--tinyint 1来代替
17、清空表
delete from 表名;自增 不连续
truncate table 表名;自增连续
18、表的操作
增 insert into 表名
删
改
查
19、sql语句的条件
select * from user where id>2
select * from user where id<2
select * from user where id !=5
select * from user where id in(1,2,3,4,5,6)
select * from user where id not in (select nid from user11)
select * from user where id between 5 and 15
匹配
select * from user where name like '%dd' 以dd结尾的所有字符(多个字符)
select * from user where name like 'dd_' 以dd开头的所有(一个字符)
限制
select * from user limit 5 前5行
select * from user limit 4,5 从第四行开始的5行
select * from user limit 5 offset 4 从第四行开始的5行
排序
select * from user order by id asc 根据id列从小到大排列
select * from user order by id desc 根据id列从大到小排列
select * from user order by id desc , value asc 根据id列从大到小排列,如果相同则按照value从小到大排列
分组
select * from user group by xingbie;
select max(id),min(id),sum(chengji),avg(chengji),xingbie,count(xingbie) from user group by xingbie having sum(fujiachengji)>50;
对于来自不同表的查询结果 用 union 连接起来 两边的列数要一样 结果自动去重
在python程序中
import pymysql
#创建链接
conn=pymysql.connect(host='192.168.153.2',port=13306,user='root',passwd='sn123456',db='db1')
#创建游标
cursor=conn.cursor()
#执行SQL,并反回受影响行数
#str="insert into user(id,username,password) values ('6','lilili','12345')"
#fff=cursor.execute(str)
effect_row=cursor.execute("select * from user ")
#result=cursor.fetchall()#获取所有的
#result=cursor.fetchone()#获取一个
#result=cursor.fetchmany(3)#自动以获取多少个
#print (result)
# 提交,保存数据库的执行结果
conn.commit()
print (fff)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
*****************************************************************************************************************************************************
用户名、密码验证登录的例子
effect_row=cursor.execute("select nid,username,passed from user where username=%s and passwd=%s and usertype=%d ",(username,passwd,age))
*****************************************************************************************************************************************************
分页显示
select * from article where status =1 limit 10 offset 100;#从第100行开始的10行
模糊搜搜
select * from article where status like '%李%';
别名、跨表
excute执行SQL语句,返回的是受影响的行数
*****************************************************************************************************************************************************
创建表前 创建哪些字段?什么类型?是否自增?是不是主键?是否为空?
一、数据库的连表操作
表1
表2
SQL注入
sql注入就是在代码中插入通过字符串拼接实现sql操作语句,例如:
str="insert into user(id,username,password) values ('6','lilili','12345')"
fff=cursor.execute(str)
主要用的就是‘ -- f’
以下的方法就无法实现SQL注入:
effect_row=cursor.execute("select * from user ")
视图
对于常用的连表操作,可以将表连接起来,放到一个视图里作为虚拟表
create view v1 as
select fuqi.id,men.name as mname,nvv.name as nname from fuqi
left join men on fuqi.mid=men.id
left join nvv on fuqi.nid=nvv.id
删除视图:
drop view v1;
二、存储过程、触发器、函数、索引
存储过程:
delimiter \\ 宣称SQL语句将以\\进行结束
delimiter $$
drop PROCEDURE if EXISTS proc_p1 $$
create PROCEDURE proc_p1()
BEGIN
select * from men;
END $$
delimiter ;
调用存储过程:
call proc_p1();
删除存储过程:
drop PROCEDURE proc_p1
创建有变量的存储过程
delimiter $$
drop PROCEDURE if EXISTS proc_p1 $$
create PROCEDURE proc_p2(in i1 int,out i2 int)
begin
declare d1 int;
declare d2 int default 3;
set d1=i1+d2;
END $$
delimiter ;
创建有输入变量和输出变量的存储过程
delimiter $$
create PROCEDURE proc_p3(in i1 int,out i2 int)
begin
declare d2 int default 3;
if i1=1 then
set i2=100+d2;
elseif i1=2 then
set i2=200+d2;
else
set i2=1000+d2;
end if;
END $$
调用存储过程
call proc_p3(1,@u); #这个@u是一个会话变量,会把执行结果赋值给@u 表示存储过程中的out变量
select @u; #可以查看@u的值
创建含有既是输出又是输入变量的存储过程
delimiter $$
create PROCEDURE proc_p4(inout i1 int)
begin
declare d2 int default 3;
if i1=1 then
set i1=100+d2;
elseif i1=2 then
set i1=200+d2;
else
set i1=1000+d2;
end if;
END $$
delimiter ;
调用存储过程:
set @u=1;
call proc_p4(@u);
select @u;
1、索引:优化机制,方便查询,减少查询时间
三、ORM框架
*****************************************************************************************************************************************************
*****************************************************************************************************************************************************
*****************************************************************************************************************************************************
*****************************************************************************************************************************************************