MySQL

第一天

​ 关系型数据库:拆散了存放(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()
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值