数据库基本操作
目录
1.数据库与dbms的概念
2.mysql的常用命令
1.数据库与dbms的概念
数据库就是存储数据的仓库
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
数据库软件有: oracle ,IBM的db2,sql server,Access,Mysql ....
2.mysql的常用命令
mysql启动命令和停止命令
net start mysql
net stop mysql
登录退出命令
mysql -uroot -proot 账号为root 密码为root
quit exit \q
show databases = 查看所有数据库
drop database + 数据库名 = 删除数据库
create database + 数据库名 = 添加数据库
create database if not exists 数据库名 = 有创建的数据库不报错
show warings 查看提示详细信息
show create database + 数据库名 = 查看数据库详细信息
alter database + 数据库名+character set + 编码(utf8)修改编码
use+数据库名 = 进入数据库,也用于切换数据库
主键=非空且唯一 not null, unique
创建表:
create table s1(
id int PRIMARY KEY auto_increment,
name varchar(25),
gender boolean,
age int,
department varchar(20),
salary double(7,2)
);
show tables 查看所有表
desc + 数据库名 = 查看表结构
show create table + 数据库名 + \G = 查看建表语句,\G = 格式化
alter table + 数据库名 + add + 添加的字段名 = 添加字段
alter table + 数据库名 + drop + 删除的字段名 = 删除字段
alter table + 数据库名 + modify + 字段名 + 修改的类型 = 修改字段类型
alter table s1 modify age int not null default 18 after id;
(列表名)(放在在id的后面)
alter table + 数据库名 + change + 修改的字段名 + 新字段名 + 数据类型 = 修改字段名
alter table s1 change age ages varchar(20) after id;
rename table + 数据库名 +新数据库名 = 修改数据库名
insert into + 数据库名 + (字段名) + values + (传数据) = 添加数据
insert into s1 (id, name,gender,age ,department, salary ) values(1,"tom",90,38,"java",20);
select * from + 数据库名 = 查看数据
insert into + 数据库名 + set + key = "value" ,= set插入数据
insert into s1 set name = "小明";
update + 数据库名 + set + 字段名+ where (key = "value") =修改数据
update s1 set gender = gender +10 where(name = 'xiao');
delete from + 数据库名 + where(key = "value" or key = "value") = 删除数据
delete from s1 where(id=1 or id =2);
delete from + 数据库名 = 删除所有数据
truncate table + 数据库名 = 删除表又重新建新表 速度快
新表:
CREATE TABLE ExamResult(
id INT PRIMARY KEY auto_increment,
name VARCHAR (20),
JS DOUBLE ,
Django DOUBLE ,
OpenStack DOUBLE
);
INSERT INTO ExamResult VALUES (1,"qian",98,98,98),
(2,"xialv",35,98,67),
(3,"alex",59,59,62),
(4,"wusir",88,89,82),
(5,"alvin",88,98,67),
(6,"yuan",86,100,55);
select distinct + 字段类型 + from + 数据库名 = 过滤重复的字段类型,保留第一个,不会修改数据库内容
select distinct name from examresult name;
select * from + 数据库名 + where(key = "value")查询名为"key"的数据
select * from examresult where(name = "yuan");
select * from examresult where(字段类型) between + 取值范围(xx and xx)
select * from examresult where(js) between 80 and 90;
select + 字段类型 + from + 数据库名 + where + 字段类型 + like "xx%" = 模糊查询
select name,js from examresult where name like "a%";
select name,js from examresult where name like "a___"; //下划线模糊查询
select name,js from examresult where js is null; //取js为空的数据
select name,js from examresult order by js; //默认降序排列
select name,js from examresult order by js desc; //降序排列
select name,js from examresult order by js asc; //升序排列
select name,js+django+openstack as zcj from examresult order by zcj desc; //总成绩
select name,js+django+openstack as cj from examresult where cj >200 order by cj desc; //程序不执行 因为运行程序的顺序先 from ==》 where ==》select
select * from + 数据库名 + group by + 数字 = 分组排序
select * from examresult group by 2; // 第二个字段类型排序
select name,sum(Django) from examresult group by name having sum(Django)>150; //再进一步过滤
select count(name) from examresult where js>60;
select avg(js) from examresult ;//求平均数 不包括null
select avg(ifnull(js,0)) from examresult;//包括null
select sum(js)/count(name) from examresult; //包括null
select max(js) from examresult; //最大值
select min(js) from examresult; //最小值
select min(ifnull(js,0)) from examresult;//最小值 包括null
select * from + 数据库名 + limit +数字 = 查看前几行
select * from examresult limit 1;
select * from examresult limit 2,2; //跳过前2行数据,显示后2行
import pymysql #添加数据 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='xxx') #xxx是数据库名 cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#cursor=pymysql.cursors.DictCursor是把元组类型转换成字典类型 # sql = "CREATE TABLE text(id INT ,name VARCHAR (20))"#创建表单 # cursor.execute(sql) # cursor.execute("INSERT into xxx VALUES (1,'alex'),(2,'wpq'),(3,'qian')")#创建数据 #ss = cursor.execute("select * from xxx")#查看数据个数 #print(ss) # print(cursor.fetchall())#查看所有数据 #print(cursor.fetchone())查看单个数据 #cursor.scroll(-1,mode='relative') # 相对当前位置移动 #cursor.scroll(2,mode='absolute') # 相对绝对位置移动 conn.commit()#提交数据 cursor.close() conn.close()
事务管理
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
start transaction;开启事务
savepoint xxx; #保存当前节点位置
rollback to xxx; #回滚到当前位置
python启动事务的方式
先在数据库创建
create database text;
use text;
create table account(
id int PRIMARY KEY auto_increment,
name varchar(25),
balance double
);
然后在PyCharm上
import pymysql #添加数据 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='text') cursor = conn.cursor() try: insertSQL1="UPDATE account set balance=balance-30 WHERE name='qian'" insertSQL2="UPDATE account set balance=balance+30 WHERE name='tom'" cursor = conn.cursor() cursor.execute(insertSQL1) raise Exception #制造异常 cursor.execute(insertSQL2) cursor.close() conn.commit() except Exception as e: conn.rollback() conn.commit() cursor.close() conn.close()