1、mysql常用增删查改
连接:
mysql -uroot -pgloryroad
mysql -uroot -p
password:
mysql -h39.1.1.1 -uroot -pgloryroad
默认端口:3306
mysql -h39.1.1.1 -uroot -pgloryroad -P3306 #端口号
show databases;
create database test51;
#查看当前使用的数据库
use jin;
select database();
#使用哪个数据库
use test;
#创建数据库gloryroad
CREATE DATABASE IF NOT EXISTS gloryroad DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#查看存在的表
show tables;
#创建表
create table student(
id int(11) not null auto_increment,
name varchar(20) not null,
age int(3),
admissiondate datetime default NOW(),
primary key(id)
)engine=innodb default charset=utf8;
#查看建表语句
show create table student;
#删除表
drop table student;
#插入表数据
insert into student (id,name,age,admissiondate) values(1,"张三","18","2019-10-10 10:10:10");
insert into student values(2,"李四","29",now());
insert into student(name,age) values("王五","18");
#****************批量插入数据***********
insert into student (name,age) values("赵六",38),("郑七",48),("田八",58);
#修改数据
update student set name = "孙八",age=18 where name="孙八";
#删除表数据
delete from student where name = "孙八" and age=18;
#查询数据 and or !=
select * from student where name="张三" and age=18;
select * from student where name="张三" or age=18;
select * from student where name!="张三" and age!=18;
#模糊查询 like '%san'
select * from student where name like "%san" and age=18;
select * from student where name like "%臣秀%";
#字段的别名
select name 姓名,age 年龄 from student where name like "%臣秀%";
#count(*),avg(),sum()
select count(age) 年龄 from student;
select AVG(age) from student;
select SUM(age) from student;
#查询结果小数取整 round
select ROUND(AVG(age),3) from student;
#排重 distinct
select distinct age from student;
# in,not in; not in 不走索引 效率比较低
select name from student where age in (18,48);
#分组
select age,COUNT(*) from student group by age;
#having
select age,COUNT(*) from student group by age having COUNT(*)>1;
select id,age,COUNT(*) from student where id>3 group by id,age having COUNT(*)>=1;
#排序asc,desc
select * from student order by age desc;
#子查询
select * from student where age in(select age from student where id>2);
create table grade11(
id int(11) auto_increment,
stuid int(11),
course varchar(20) not null,
grade int(5),
primary key(id)
)engine innodb character set utf8;
select * from student where id in (select stuid from grade11 where grade>80);
#union(结果会排重)、union all(结果不会排重)
select id from student where id>3
union
select id from grade11 where grade<=90;
select id from student where id>3
union all
select id from grade11 where grade<=90;
#执行计划查看
explain select s.name ,g.course_name ,g.grade from student s,grade g where s.id =g.stu_id \G;
#左连接、右连接、内连接
#右连接 显示右表的全部记录,关联不到的显示null
#左连接 显示坐标的全部记录,关联不到的显示null
select s.`name`, g.`course`,g.`grade` from grade11 g right join student s on g.stuid = s.`id`;
#加索引
alter table grade11 add index stuid_indx(stuid);
#查看数据库最大连接数
show variables like 'max_connections';
#查看自动提交参数
show variables like '%autocommit%';
#查看表字段
desc grade;
#limit 从第6行取记录,取3条;
select * from studentinfo limit 5,3;
2、python 操作mysql的常用小例子
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "root",
db = "jin11",
charset = "utf8")
# 使用cursor()方法获取数据库的操作游标
cursor = conn.cursor()
print(cursor)
print(type(cursor))
#建库操作:
cur.execute('CREATE DATABASE IF NOT EXISTS pythonDBnew1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
#建表操作
cur.execute('''CREATE TABLE `User`(
`id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`birthday` date DEFAULT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8;''')
##SQL注入 类似在输入框输入一些条件拼接SQL,比如输入 or 1=1,导致查询条件永远满足
#使用模板字符串插入数据
sql = "insert into user values(%s, %s, %s, %s)"
insert = cursor.execute(sql, (3,'lucy','efg','1993-02-01'))#oracle的操作风格
sql="select t.env_sub_type,t.env_key,t.env_key_value from b_env_info t where t.env_no=:1 and t.env_sub_type=:2"
cur.execute(sql,[env_num,db_name]) #列表中的元素替代 占位符 :1,:2
#批量插入数据
for i in range(10,20):
# 另一种插入数据方法,通过格式字符串传入值,此方式可以防止sql注入
sql = "insert into user values(%s, %s, %s, %s)"
cursor.execute(sql, (random.randint(1,10000),'lucy'+str(random.randint(1,10000)),'efg'+str(random.randint(1,10000)),now()))
##批量插入多条数据
sql = "insert into user values(%s, %s, %s, %s)"
insert = cursor.executemany(sql, [
(5,'tom','tom','1989-03-17'),
(6,'amy','test','1898-12-01'),
(7,'lily','linux','1994-06-23')])
#获取查询结果的单条数据
cursor.execute("select * from user")
while 1:
res = cursor.fetchone()
if res is None:
# 表示已经取完结果集
break
print(res)
#将读取到的时间格式化
print(res[-1].strftime("%Y-%m-%d"))
#获取查询结果的多条数据
cursor.execute("select * from user")
# 获取游标处两条数据
resTuple = cursor.fetchmany(2)
print("结果集类型:", type(resTuple))
for i in resTuple:
print(i)
#获取全部查询结果
cursor.execute("select * from user")
resSet = cursor.fetchall()
print("共%s条数据。" %len(resSet))
print(resSet)
# 批量更新数据
cursor.executemany("update user set password = %s where name=%s", [('tomx2x', 'tom'), ('Tomx2x', 'amy')])
# 批量删除数据
delete = cursor.executemany("delete from user where name=%s", [('amy',), ('lily',)])
print("删除语句影响的行数:", delete)
#事务回滚
conn.rollback()
#操作完成后,提交
# 关闭游标
cursor.close()
# 提交事务
conn.commit()
# 关闭数据库连接
conn.close()
来源:https://www.cnblogs.com/xiaoxiao075/p/10800916.html