day41
day41
hexo + github
一.为什么使用mysql
因为之前使用文件管理数据,但是数据量特别大的时候,使用文件管理的话,就比较慢,因此引入一个新的数据库软件----数据库软件
二.数据库的分类
关系型数据里
1.有约束
2.基于硬盘的存储--将数据存储到硬盘上,持久化
典型代表
mysql ,oracle(国企) ,sqlserver(微软) ,db2 , sqllite
非关系型数据库
1.没有约束(key---value)
2.基于内存的存储---将数据放到内存中
典型代表:
memcache ,redis(微博),mongdb
三:mysql架构
mysql客户端----------连接服务器-------------发送指令(sql语句)
四.mysql的安装
版本5.5-5.7版本
mysqld:启动服务
mysql连接服务端
mysql环境变量的配置
五.初始化命令
mysqld --initialise-secure
六.数据库的操作
#########################
1.数据库:
增: create database 数据库名称;
删 :drop database 数据库名;
改--没有专门修改指令
查:show databases;
使用 use 数据库名;
###################################
2.数据表
增,新建: 建表之前,需要选择哪个数据库
create table 表名(
列名1 列类型
)engine=Innodb charset=utf8;
ps:引擎Innodb 和 MyIsam(5.5以上默认为Innodb)
create table t1(
id int,
name char(32)
)engine=Innodb charset=utf8;
insert into 表名 (列1,列2) values (1,"jack");
insert into 表名 (id,name) values (1,"jack");
############改进
create table 表名(
列名1 列类型 auto_increment primary key
)engine=Innodb charset=utf8;
#######
create table t1(
id int auto_increment primary key,
name char(32) not null default '',
pwd char(32) not null default ''
)engine=Innodb charset=utf8;
auto_increment:自增
not null :不能为空
default :默认值
primary key:主键索引(作用:加快查找的速度)
如果加了自增,那个id就可以不写了
#########################
删drop table 表名;
ps:工作中,线上的,这个命令根本不会让你用到.
改:
#修改字段
alter table t4 change name username varchar(32) not null default '';
把t4表中的name字段改成username
#新增字段
alter table t4 add pwd char(32) not null default '';
t4中增加pwd这一列
#删除字段
alter table t4 drop pwd;
删t4表里面的pwd这一列
查 show tables;
#查看表结构 desc t4;
#查看表的创建过程 show create table t4;
#########################################
3数据行
增insert into t3 (id,name) values(1,'你好');
删
delete from 表名; 将表名清空,如果再次添加的时候会延续上一个ID
truncate 表名;数据删掉,数据ID会重新开始
删除也不一定用.
delete from 表名 where name ="linux";
改
update t3 set name="新名字",pwd='新密码' where id = 3;
查
select 列名,列名 from t3;
七.外键:
1数据重复
2如果部门过长,占用空间
解决办法:
重新设计一张表,这张表中存放部门相关信息
其中departmen_id就是外键
约束
create table t1(
id int,
depart_name varchar(32) not null defalut ''
)engine=Innodb charset=utf8;
insert into department (depart_name) values ("公关"),('关关')
create table userinfo(
id int,
depart_id varchar(32) not null defalut ''
contraint fk_userinfo_depart(自己起的名字) foreign key (depart_id)列名 references 表名department(id)
#fk_userinfo_depart名字不能一样
)engine=Innodb charset=utf8;
insert into userinfo (name,depart_id) values ('root1',1);
一对多
外键创建时,
列类型:
a.数值型
tinyint
mediumint
smallint
int
bigint
区别:a.取值范围不一样
b.无符号和有符号的意思
########################
float(M,D)浮点型
decimal(M,D)定点型,比浮点型更精准
M的意思就是小数总共多少位
D就是小数点后面有几位
########################
b.字符串类型
char :定长 char(32) 这一列的值就是32
优点就是速度快
缺点,就是浪费
varchar 边长 varchar(32)
优点.不浪费,节省空间
缺点.速度慢
一般情况下,都使用varchar
text:文本 范围比较大
###########################
c.时间类型
推荐使用datetime:有年月日和时分秒
#关于主键(session就是当前的会话),了解一下
查看auto_inc开头的
show session variable like 'auto_inc%';
设置步长
set session auto_increment_increment =2
如果session换成global
就是改成全局