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框架

 

 

 

 

 

 

 

 

*****************************************************************************************************************************************************




 

*****************************************************************************************************************************************************

 

 

 

 

 

*****************************************************************************************************************************************************

 

 

 

 

 

 

 

 

*****************************************************************************************************************************************************

 

posted on 2018-06-01 16:36  JuGooLar  阅读(145)  评论(0编辑  收藏  举报

导航