########################课堂代码#####################################
mysql:典型关系型数据
1、安装mysql:
window:
.msi
.zip
修改my.ini
bin添加到path(此电脑右键属性-高级管理设置-环境变量-path新建)
以管理员身份打开cmd命令提示符,将路径切换到bin下去
注册mysql:mysqld install 移除mysql:mysqld remove
启动服务:net start mysql
Linux:
使用应用仓库安装:
CenterOS/redhat:
sudo yum install mysql-sever mysql
ubuntu:
sudo apt|apt-get install mysql-server mysql-client
sudo service mysql restart/start/stop/status
从官网下载的源代码:
2、mysql的使用
进入mysql:mysql -u用户名 -p密码 -h主机ip或者域名 -P端口
退出mysql:exit/quit/\q/Ctrl+c
3、mysql的远程登录:
1、以管理员身份进入mysql
update mysql.user set host='%' where user='root';
2、修改/etc/mysql/mysql.conf.d/mysql.cnf
找到43行把bind-address注释掉
3、重启服务
service mysql start
4、mysql的一些常规操作:
show databases like pattern; #显示当前所有的数据库
use dbName; #进入到对应的数据库
show tables like pattern; #显示当前数据库的所有的表
desc/describe tableName; #描述表的结构
show columns from t_user; #描述表的结构
select database(); #显示当前所在的数据库
select now(); #返回当前的时间
select version(); #返回当前数据库的版本信息
5、Sql标准的讲解:
DDL(data definition language)数据库定义语言
create drop alter show
DML(data manipulation language)数据库操作语言
CRUD
DQL数据库查询语言
DCL()数据库控制语言
grant invoke
6、数据库:
创建数据库:create database dbName [[default] charset'utf8']
删除数据库:drop database dbName;
修改数据库:alter database dbName default charset gbk;
查看数据库定义:show creat database dbName;
7、mysql的数据类型:
整型:
tinyint 一个字节
smallint 两个字节
mediumint 三个字节
int 四个字节
bigint 八个字节
浮点型:
float 四个字节
double 八个字节
decimal(2,2) 精确运算时使用
文本型:
char(lenght) 定
varchar(lenght) 不定
二进制:
bit,binary,Blob
日期:
year,month,day,time,data,datatime,timestamp(游标戳)
枚举:
enum()
8、表的常见操作:
表的创建:
create table tName(
field int primary key auto-increment,
gender varchar(30) not null
)default charset utf8 engint=innodb/mysiam
查询表创建的信息:
show create table tName[\G];#\G翻转90度
对表结构的修改:
修改表名:
rename table oldTableName to newTableName;
alter table tableName rename to new TableName;
修改表的属性(字符集|引擎):
alter table tableNme charset=gbk
alter table t_test charset='gbk';
修改表的字段:
alter table tName change/modify/drop/add field
增加一个新的字段:
alter table t_test add newColumn codition位置
eg:alter table t_test add nickname varchar(50) not null unique
修改一个字段的名称:
alter table tName change nickname test varchar(30) default 'liu' first;
修改字段的类型:
alter table tName modify test varchar(80) default 'hehe' after age;
删除一个字段:
alter table t_test drop test;
9、CRUD(create增加,retrieve查询,update修改,delect删除)
insert into tableName(field1,field2,....fieldn) values(val1,val2,......valn);
update tableName set field1=new where condition;
delect from tableName where condition;
truncate [table] tableName; 慎用
select * [field1,field2,...fieldn] from table [where condition];
10、单表的条件查询:
关系运算符:> >= < <= = != <>
逻辑运算符:and or not
空和非空的判断:
is null is not null
between and in not in
排序: order by field1 [asc|desc],field2 [asc|desc]
分组: group by field [having condition]
分页: limit offset,pageSize;
11、编码问题:
utf8
gbk
校对集:
_bin:
_cs:区分大小写
_ci:忽略大小写
12、数据路设计三范式(3NF)
1、
2、每条记录都有唯一性(主键)
3、外键
13、分表的重要性
垂直分表
水平分表
14、多表的关联查询:
1、交叉连接(数据库底层的实现原理):
select * from emp,dept;
select * from emp cross join dept;
会产生笛卡尔积现象
2、内连接(inner join)
select dept.name from emp,dept
where emp.deptid=dept.id and emp.name='zs';
select * from emp [inner] join dept on(emp.deptid=dept.id);
select name from dept where id in(select distinct deptid from emp);
3、外连接(outer join)
左连接:
select * from emp left [outer] join dept on(emp.deptid=dept.id);
右连接:
select * from emp right [outer] join dept on(emp.deptid=dept.id);
4、自然连接(nature join)
5、自连接
15、表与表的关联关系:
OneToOne(1:1) 外键在那方都可以
ManyToOne(n:1) 外键在多的一方
ManyToMany(n:n)需要建立第三方连接
16、外键约束
创建表的同时创建外键:
create table tName(
id ....
deptid int,
[constraint fk_xx_xx] foreign key(deptid)references dept(id) [on delete cascade|restrict|set null on update restrict]
)
为已经存在的表创建外键:
alter table add tName [constraint fk_xx_xx] foreign key(deptid) references dept(id) [on delete cascade|restrict|set null on update restrict]
删除外键
alter table drop 外键名称;
###############################课堂代码###############################################
1、函数
select now(); 显示当前时间
select databases(); 显示当前所在的数据库
select version(); 显示当前数据库的版本信息
select length(name),name from emp;
select length('刘建宏');
select char_length('刘建宏');
select trim(' asdfasdfasd '); 去空格
MySQL中的substring和JavaScript中的substr类似
select substring('today is rainy very!',2,8);
select substr(today is rainy very!',2,8);
2表示开始索引的位置 8表示间隔长度
select ASCLL('0'); 显示数字48(A对应65,a对应97,0对应48)
select upper('LiujiaN'),LOWER('LIujian');转大小写
select year(now()); 显示年
select curdate(); 年月日
select curtime(); 时分秒
select now(); 年月日时分秒
把字符串转为日期格式
SELECT DATE_FORMAT('2011-09-20 08:30:45', '%Y-%m-%d %H:%i:%S');
把日期转为字符串格式
select date_format(now(),'%Y年%m月%d日 %H:%i:%s);
select uuid();
字符串函数:length,char|_length,trim,substring,ascll,concat,upper,lower,replace
数学函数:ceil,floor,round,mod,sin,cos,sqrt
日期函数:Year,month
2、视图:视图也是一个数据库对象,视图是一张虚拟表
如何创建视图: create view vName as 查询语言;
eg: create view v_all_emp as select * from emp;
select * from v_all_emp;
视图的意义:
简化查询(不能加快查询速度)
安全问题
视图的优点:
视点集中
简化操作
定制数据
合并分割数据
安全性
查询视图和表一样,通过select语句来查询
select * from v_give_you;
不建议对视图进行增删改操作,因为约束条件未知
删除视图:drop view vName;
3、index索引:用来加快查询速度(优化)
在数据库系统中建立索引主要有以下作用:
1、快速取数据;
2、保证数据记录的唯一性;
3、实现表与表之间的参照完整性;
4、在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
创建索引:
1、在创建表的时候创建索引
create table tName(
id int primary key auto-increment,
name varchar(255)not null,
index my_index(name(255))
);
2、alter 修改表,添加索引
alter table tName add index indexName name(255);
3、create关键字创建索引(用的最多)
create index indexName on tName (fieldn(length));
显示当前表的索引:show index from emp;
为emp表添加索引:create index i_name on emp(name(50));
删除索引:drop index i_name on emp;
4、面试题:
索引的分类:
1、普通索引
2、主键索引
3、唯一索引
4、组合索引
5、全文检索索引(Full Text)
索引的原理:
BTREE:B+tree B-tree
hash
5、MySQL python中使用它,来存储数据
python3.2之前mysqldb模块来完成调用python调用MySQL
python3.3之后pymysql模块来完成调用python调用MySQL
6、安装第三方模块
pip install moduleName
pip install pymysql
ubuntu下:
pip==pip2 apt install python-pip
pip3 apt install python3-pip
#################################################
下载安装pymysql
导入pymysql模块
创建连接
创建游标
执行execute
如果是查询,需要使用fetchOne或者fetchMany获取数据
导入pymysql模块:import pymysql
##############################################################
创建员工表格:
create table emp(
id int primary key auto_increment,
name varchar(50) not null,
gender char(10) default 'nan',
tel varchar(20) default '110',
address varchar(30),
qq varchar(30),
age int default 18,
deptid int
);
#在员工表中插入数据:
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"zhangsan","nan","110","zhengzhou","110",18,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"lisi","nan","110","zhengzhou","120",18,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"wangwu","nan","130","hangzhou","130",20,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"zhaoliu","nan","140","guangzhou","140",23,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"qianqi","nan","15000","lanzhou","150",33,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"wangba","nan","16","xuzhou","180",38,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"laomou","nan","110120","lanzhou","110",33,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"laoli","nan","200000","zhengzhou","205845",38,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"laozeng","nan","2356","changsha","256789",29,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"zhaofeihong","nan","123456","zhengzhou","123456",21,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"liuwei","nan","456123","zhengzhou","78952",23,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"zenqingzhi","nan","12548","zhengzhou","458123",21,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"wuzuodong","nan","1254","zhengzhou","25561",25,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"liujie","nan","125","zhengzhou","1459",25,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"tianxiaoyong","nan","45612","zhengzhou","75251",29,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"yangjingkun","nan","110","beijing","154",27,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"liulijuan","nan","152","tieling","1554",21,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"yiming","nan","110","zhengzhou","255",18,null);
insert into emp(id,name,gender,tel,address,qq,age,deptid) values(null,"佚名","nan","110","zhengzhou","255",18,null);
#删除数据
delete from emp where id=23;
#查询表格的全部数据
select * from emp;
#修改表的属性
alter table emp charset=utf8;
#创建部门表格:
create table dept(
id int primary key auto_increment,
name varchar(50) not null,
describle text
);
#在部门表中插入数据:
insert into dept(id,name,describle) values(null,'zongjingliban','guanrende');
insert into dept(id,name,describle) values(null,'yanfabu','kaifaruanjiande');
insert into dept(id,name,describle) values(null,'xiaoshoubu','maidongxide');
insert into dept(id,name,describle) values(null,'shichangbu','dianyande');
insert into dept(id,name,describle) values(null,'renshibu','renliziyuanguanli');
insert into dept(id,name,describle) values(null,'houqinbu','saodide');
insert into dept(id,name,describle) values(null,'caiwubu','faqiande');
insert into dept(id,name,describle) values(null,'baoanbu','darende');
insert into dept(id,name,describle) values(null,'gongguanbu','nidongde');
select * from dept;
python -m pip list在cmd中查找下载的软件
数据库的事务
面试题:
1、四大特性(ACID)(重要)
原子性:不可分割
一致性:
隔离性:
持久性:
2、不考虑隔离会产生的问题
1、脏读:脏数据即错误的数据,读取未提交的数据
2、不可重复读:读已提交的数据,查询的是同一个数据
3、虚读:读已提交的数据,针对的是一批数据
3、隔离,事务有四大隔离级别:(选学)
串行化:可避免脏读,不可重复读,虚读的发生
可重复读:可避免脏读,不可重复读的发生
读已提交:可避免脏读的发生
读未提交:级别最低,任何情况都无法保证
释放资源 连接对象
if cursor !=None:
cursor.close()
if conn !=None:
conn.close()
sqlHerper,一个python调用MySQL的封装模块
用于封装大量重复的代码,减少代码的书写
作业:简略描述经典类和新式的类区别?
网友评论