mysql筛选18年6月15到现在数据_数据库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的封装模块

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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值