第一天
关系型数据库:拆散了存放(SQL)
非关系型数据库:整个存放(MongoDB)
MySQL是开源的,可以经过二次开发,属于甲骨文(Oracle)公司,性能高,成本低,可靠性好,管理型软件
登陆:
mysql -uroot -p//用户root登陆输入password
mysql -u - p
create uesr 'xiaozheng'@'%' identified by 'qwe123';//创建用户
grant all on *.* to 'hansha'@'%';赋予所有库所有表权限
flush privileges;//令其为最高权限
还有别的权限
root数据库级别账号
表级别账号
字段级别账号
存储级别账号
在root目录下登陆输入 select user,host form mysql.user
就能显示用户
exit退出
quit退出
\q同上退出
ctrl+Z强制退出
注意事项
大小写:不严格区分大小写,默认大写为程序代码,小写为程序员代码
语句结束:用;结尾 或者\g结尾
类型:强制数据类型,任何数据都有自己的数据类型
逗号:创建表的时候最后一行不需要逗号
库级别操作
查看库
show databases//查看有哪些数据库
intormation_schema
mysql
performance_schema
sys 以上四个均为系统数据库
查询当前在哪个库
select database();
创建库
create database db_Game_of_Thrones
重复创建会报错
create database [if not exists]db_Game_of_Thrones
效果同上,但是不会报错
命令取消
Ctrl+C
删除库
drop database [if exists] db_Game_of_Thrones
进入库
use db_Game_of_Thrones
表级别操作
查看哪些表
show tables;
创建表
create table person(id int,name varchar(20),sex varchar(10) )
create view table hanshasha as select * from hansha;
查看表结构
show create table person;
| person | CREATE TABLE `person` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`sex` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
这里ENGINE不仅有 InnoDB 还有 Myisam
编码格式utf-8最通用
查看表结构
desc person;
describe person;
+-------+-------------+------+-----+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+
| id | int(11) | YES | | NULL | |
| name | varchar(24) | YES | | NULL | |
| sex | varchar(5) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+
删除表
drop table Person;
表中数据的操作
指定字段插入
insert INTO Person(id,name,sex) value(1,'Ned Stark','Male');
在value加s能多个插入
insert into Person(name,age) values(1,'Ned Stark',44),('Catelyn Stark',35.6);
Person后无()为全字段插入
insert into Person value(1,'Ned Stark','Male',44)
查询
select * from Person
select name from Person
select id,name from Person
条件查询
select * from Person where id>=3;
select * from Person where sex = 'Male';
修改数据
update Person set name = 'ZhengTianyao',sex = 'Male' where id = 9
如果有多条符合where全部修改
update Person set name = 'ZTJZ'
没有where会修改全部数据!!!
and or
删除数据
delete from Person where id = 9
delete from Person删除了整张表内容,但是表Person还在
数据类型了解
int(4字节) 范围 (0,4000000000)
bigint(8字节)
float(4字节)
double(8字节)
char()
varchar()
tinytext/tinyblob 存放二进制数据255个
text/blob 存放二进制数据65535个
ENUM 包含多个固定值的列表enum('male','female')
表中数据枚举操作
第二天
筛选条件
= >= > < <=
<> !=
is null
is not null
and not or
排序
SELECT columns FROM tb_name order by col [asc/desc] ;
按照年龄排序
select * from studentd order by age;
select * from studentd order by age desc;逆序
限制(千万级别数据,仅显示5条)
select * from students limit 5;从头开始5个
select * from students limit 5,3;从第5个开始3个
去重复
mysql> select distinct subject_number from grades;
去重 关键字sub_num 从表grades
+----------------+----------------+-------+
| student_number | subject_number | grade |
+----------------+----------------+-------+
| 201804001 | 0001 | 90 |
| 201804002 | 0001 | 89 |
| 201804003 | 0002 | 88 |
模糊查询
select * from students where name like 'q%';
q开头的 任意长 字符串 %ye
select * from students where name like 'qi_'
qi开头跟 一个字符 的字符串 __ye
数据库优化,少用模糊查询
范围查询
select * from students where age in (15,16,17) ;
select * from students where age between 15 and 17;
聚合函数(主要用来统计)
count 统计数量
select count (*) from students;
select count (name) from students;
avg平均数
select avg(age) from studentd;
max最大
min最小
group_concat列出字段全部值
select group_concat(name) from students;
+---------------------------------------------------------------------------------------+
|Qiye,JackLee,Julia,Stefer,Steven,Mark,Stark,Tonny,Jarvis,ZhangSan,lisi,wanger,mazi,xiaoxing,hundan,xiaowang,laowang |
select group_concat(name,age) from students;
分组查询
group by
select subject_number from grades group by subject_number;
显示学科代码 在表grades中 根据学科代码分组
select stu.name,group_concat(course.course) from stu left join sel on stu.id = sel.id left join sel.id group by stu.name
group by 以外的需要显示的,都要加group_concat
+----------------+
| subject_number |
+----------------+
| 0001 |
| 0002 |
select subject_number,count(*) from grades group by subject_number;
显示学科代码,计数 (聚合函数) 在表grades中 根据学科代码分组
+----------------+----------+
| subject_number | count(*) |
+----------------+----------+
| 0001 | 18 |
| 0002 | 10 |
+----------------+----------+
Select 字段1 from 表名 group by 字段1 having 字段2>=80;
having相当于where
可对输出的结果做出限制
再一次经行筛选
++++先执行 where 后执行 聚合函数 最后执行 having++++
子查询
select * from(select * from students order by age limit 5)as tmp;
嵌套表中查询,表中表需要加as 表名
select * from students where age>(select avg(age) from students);
嵌套查询 查询大于平均数的
+-----------+----------+------+------------+
| number | name | age | birth |
+-----------+----------+------+------------+
| 201804014 | xiaoxing | 80 | 1995-01-22 |
| 201804015 | hundan | 36 | 1998-05-10 |
| 201804016 | xiaowang | 30 | 1999-07-10 |
+-----------+----------+------+------------+
无条件内连接
select * from it;
+------+------+
| id | name |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
+------+------+
select * from ip;
+------+------+
| id | name |
+------+------+
| 6 | a |
| 7 | s |
| 8 | d |
select * from it join ip; 笛卡尔积
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | NULL | 6 | a |
| 1 | NULL | 7 | s |
| 1 | NULL | 8 | d |
| 2 | NULL | 6 | a |
| 2 | NULL | 7 | s |
| 2 | NULL | 8 | d |
| 3 | NULL | 6 | a |
| 3 | NULL | 7 | s |
| 3 | NULL | 8 | d |
| 4 | NULL | 6 | a |
| 4 | NULL | 7 | s |
| 4 | NULL | 8 | d |
+------+------+------+------+
select * from it join ip on ip.name = 'd'; 笛卡尔积基础上查询name,需要指定name
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | NULL | 8 | d |
| 2 | NULL | 8 | d |
| 3 | NULL | 8 | d |
| 4 | NULL | 8 | d |
+------+------+------+------+
select * from it join ip on ip.name = it.name;查询在同时两个表中的元素
有条件内连接
select * from stu join tb1 on stu.id = tb1.id;
select * from it left join ip on it.name = 'a';
外连接
select stu.id,stu.name,stu.age,
left join
right join
第三天
表结构修改
修改表名 alter table t1 rename tab1;
修改字段名 alter table t1 change number id int;
change同时可以修改字段类型
修改字段类型 alter table t1 modify number int;
增加字段 alter table t1 add sex varchar(20);
删除字段 alter table t1 drop id;
约束条件
默认约束
create table tb(sex varchar(20) default'Male'));
insert into tb(name) value ('xiaoming');
insert into tb value(default,default)
如果没有赋值,就用默认的值
非空约束
create table t2(id int nut null, name varchar(20));
唯一约束
unique key
id int unique key
自增长
auto_increment
id int primary key auto_increnment
set @@auto_increment_increment = 2;更改步长为2
主键
primary key
外键
foreign key
表关系
一对一
主键 对 主键
一对多
非主键 对 主键
多对多
主键 对 主键
MongoDB
分布式文件存储的开源数据库系统
非关系型数据
{
name:"xiaomaing",
age:16,
address:{city:"长沙",country:"china".}
}
库级别操作
查看有哪些库
show dbs;
使用库
use tanzhou;
没有库直接创建
删除库
进入库之后
use haha
db.dropDatabase()
查看我当前爱哪个库
db
集合(表)操作语句
显示当前数据库
show collection
创建
db.createCollection('name')
删除
db.集合名称.drop()
添加数据
db.集合名称.insert(document)
db.student.insert({'name':'七爷','age':16})
查询文档
db.student.find()显示
db.student.find().pretty()格式化
db.student.find({name:'qiye'})查询满足条件
db.student.find().sort({'age':1})正序
db.student.find().sort({'age':-1})逆序
db.student.find().sort({'age':1}).limit(3).skip(1)
db.students.count()
分组
db.students.aggregate([ {$group:{_id:null,num:{$sum:1}}} ])
db.students.aggregate([ {$group:{_id:null,avg:{$avg:'$age'}}} ])
条件
$
$
$
修改文档
db.table.update({'sex':'Male'})
连接数据库
whereis mongodb.conf
/etc/mongodb.conf
sudo vim /etc/mongodb.conf :wq保存
bind_ip = 127.0.0.1 修改成 0.0.0.0
事务都由ACID
特性
原子性(A):一个事务不可分割,要么都执行,要么都不执行
一致性©:开始和结束不会破坏数据库完整性
隔离性(I):其他事务不可见
持久性(D):一旦提交,永久保存
begin 开始
commit 提交
rollback回滚
python连接MySQL
各类数据库遵循DB-API规范
创建connection–>获取cursor–>操作–>>关闭cursor
建立连接
conn = pymysql.connect(**mysql_config)
获取游标对象
cur = conn.cursor()
增删改查
cur.excute('select * from stu')
print(cur.fetchall())
cur.close()
conn.close()
上下文管理器进行关闭
conn = pymysql.connect(**mysql_config)
with conn.cursor() as cur:
cur.execute('select * from stu')
print(cur.fetchall())
conn.close()
增加
conn = pymysql.connect(**mysql_config)
cur = conn.cursor()
cur.execute('insert into stu VALUE (1,"hansha")')
conn.commit()#前面默认事务,这里需要提交
cur.close()
conn.close()
更新
conn = pymysql.connect(**mysql_config)
cur = conn.cursor()
cur.execute('update stu set id = 123 WHERE name = "hansha"')
conn.commit()#前面默认事务,这里需要提交
cur.close()
conn.close()