数据库2018-06-26

########################课堂代码#####################################

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的封装模块

用于封装大量重复的代码,减少代码的书写

作业:简略描述经典类和新式的类区别?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容