MySQL数据库管理2-hj
tedatabase db102; createtable db102.t1(namechar(6),ageint(3));
insertintodb102.t1values("jerry",91024);
createtable db102.t2(idint(2)zerofill,name char(6));
insert intot2values(3,"tom"),(7,"jim"),(9,"lucy"),
(12,"bob"),(191,"alic");
select* from t2;
可以使用2位数字给year类型的字段赋值:
01~69 20XX
70~99 19XX
00 0000
create table t3 (name char(10),s_yearyear);
insertinto t3values("bob",01),("jim",69),("lucy",70);
select* fromt3;
日期时间类型 datetime和timestamp 区别?
createtable t4 (
meettingdatetime,
reg_t timestamp
);
insert intot4values
(20170523093900,20170523093900);
insert intot4(meetting)values(20170529093058);
insert intot4(reg_t)values(20190529094058);
select* from t4;
+++++++++++++++++++++++++
day02
mysql 索引
1什么索引?(建在表中的字段上)
相当于 "书的目录"
5000页
目录1~100 正文101 ~5000
笔画 92000------2010
部首
拼音
删除添加修改
stuinfo 数库目录 /stuinfo.frm .ibd
name age sexclass
jim
jerry
abob
lili
han×××
select* fromstuinfo where> 2 索引的优点与缺点?
优点:加快查询的速度
缺点: 占用物理存储空间,会减慢对表写操作的速度。
++++++++++++++++++++++++++++++++++
mysql索引类型:
INDEX:普通索引*
UNIQUE:唯一索引
FULLTEXT:全文索引
PRIMARY KEY:主键 *
FOREIGN KEY:外键*
使用INDEX:普通索引
索引的使用规则:
一个表中可以有多个INDEX字段
字段的值允许有重复,切可以赋NULL值
经常把做查询条件的字段设置为INDEX字段
INDEX字段的KEY标志是MUL
创建index索引
建表是创建
createtable t5(
namechar(10),
ageint(2),
sexenum("boy","girl"),
index(name),
index(sex)
);
把已有的字段设置为index字段
mysql> createindex索引名on表名(字段名);
查看
desc表名; Key
showindexfrom 表名;
Table: t1
Key_name: aaa
Column_name: name
Index_type: BTREE (B+TREE HASH)
二叉树
1~10
1-5 6-10
删除
dropindex 索引名 on 表名;
++++++++++++++++++++++++
使用PRIMARY KEY:主键 *
使用规则?
一个表中只能有一个primarykey字段
对应的字段值不允许有重复,且不允许赋NULL值
主键字段的KEY标志是PRI
如果有多个字段都作为PRIMARY KEY,称为复合主键,必须一
起创建。
和auto_increment一起使用让字段的值自动增长
经常把表中能够唯一标识记录的字段设置为主键字段[记录编号
字段]
stu_id name age
1 bob 19
2 lucy 18
3 alic 21
4 jerry 19
createtable t9(
stu_idint(2) primary keyauto_increment,
namechar(10),
age tinyint(2)unsigned
);
insert into t9(name,age)values("bob",21);
insert into t9(name,age)values("lucy",21);
insert into t9(name,age)values("lili",21);
select* from t9;
createtable t6(
namechar(10),
ageint(2),
sexenum("boy","girl"),
primary key(name)
);
createtable t7(
namechar(10)primary key,
ageint(2),
sexenum("boy","girl")
);
把表中已有字段设置为主键
altertable 表名addprimary key ( 字段名);
复合主键:
只有做符合主键的多个字段的值不同时重复就可以
PRI PRI
cip port status
1.1.1.1 21 deny
1.1.1.1 25 allow
2.1.1.1 25 deny
createtablet8(
cipvarchar(15),
portsmallint(2),
statusenum("allow","deny"),
primary key (cip,port)
);
insert intot8
values
("1.1.1.1",21,"deny"),
("1.1.1.1",25,"allow"),
("2.2.3.2",25,"deny");
删除主键
altertable 表名drop primary key ;
+++++++++++++++++++++++++++++++
unique 唯一索引:
一个表中可以有多个UNIQUE字段
对应的字段值不允许有重复
UNIQUE字段的KEY标志是UNI
UNIQUE字段的值允许为NULL,当将其修改为不允许为NULL
,则此字段限制与主键相同
createtable t10(
namechar(10),
shf_id varchar(18),
ks_num char(8),
ageint(2),
sexenum("boy","girl"),
index(name),
unique(shf_id),
unique(ks_num)
);
create unique index索引名 on表 (字段名);
dropindex 索引名 on表;
mysql> drop indexshf_id on t10;
+++++++++++++++++++++++++++++
FOREIGN KEY:外键
功能:给当前表的字段赋值时,字段的值,只能在另一个表的字
段值里选择。
使用规则?
表的存储引擎必须是innodb
字段类型必须匹配
被参考字段的必须是索引的一种(通常是primary key )
财务表cwb
create table cwb(
cwb_idint(2) primarykeyauto_increment,
name varchar(15),
pay float(7,2)
)engine=innodb;
createtablebjb(
bjb_id int(2),
name varchar(15),
agetinyint(2),
foreign key(bjb_id)referencescwb(cwb_id)on update
cascadeon delete cascade
)engine=innodb;
descbjb;
show create table bjb;
insert intocwb(name,pay) values("bob",20000),
("lucy",20000);
insert intobjb values(1,"alic",23);
updatecwbsetcwb_id=8wherecwb_id=2;
delete from cwb where cwb_id=3;
删除外键
show createtable 表名;#查看建表命令
altertable表 drop foreignkey 外键名;
在已有表里添加外键。
altertable表 addforeign key(字段名)references表名(
字段名)on updatecascade on delete cascade;
altertable bjbadd foreignkey(bjb_id)references
cwb(cwb_id)on updatecascade on delete cascade;
++++++++++++++++++++++++++++++++
二、mysql存储引擎
mysql服务的工作过程:
连接池
sql接口
分析器
优化器 select insertupdatedelete
查询缓存
存储引擎
文件系统: 硬盘 (/var/lib/mysql)
管理工具:安装服务软件包时,自带的命令
1 什么存储引擎?
是mysql数据库服务软件自带程序 ,是表的处理器,不同的处理
器有不同的功能和数据存储方式。
2 查看存储引擎?
查看表使用的存储引擎 showcreatetable表名;
查看数据库服务默认使用的存储引擎show engines;
InnoDB DEFAULT
3设置存储引擎
设置表使用的存储引擎
createtable表名(字段名列表)engine=存储引擎;
设置数据库服务默认使用的存储引擎
vim /etc/my.cnf
validate_password_policy=0
validate_password_length=6
default-storage-engine=myisam
:wq
# systemctl stop mysqld
# systemctl start mysqld
#mysql-uroot-p123456
mysql> show engines;
4常用存储引擎的特点
myisam
表级锁
不支持事务和 事务回滚
外键
表.frm表结构
表.MYD表记录 select* from表;
表.MYI 表索引
innodb
行级锁
支持事务和 事务回滚
支持外键
表.frm表结构
表.ibd表记录+表索引
什么事务?对数据库做访问时,从开始连接到断开连接 过程称作
事务。
插卡提示输入密码-->登录成功
转账 接收卡号
金额 5w
确认
转账中...... 成功
退卡
事务回滚? 事务执行过程,任意一步执行失败,还原之前所有的
操作。
事务日志文件
/var/lib/mysql/
ib_logfile0
ib_logfile1
ibdata1
锁: 解决并发访问冲突问题
读锁 myisam
select *fromt1whereid>=10;
innodb
写锁
update
insert
delete
innodb
pc1 updatet1setname="tom"wherename="jim";
pc2 updatet1setname="lucy"wherename="jim";
行级锁: 客户端访问数据库时,只给sql命令操作的行加锁。
表级锁:客户端访问数据库时,给sql命令操作的表加锁
+++++++++++++++++++
5 工作中建表时,如何决定表使用的存储引擎
写操作多的表适合使用innodb存储引擎
查询操作多的表适合使用myisam存储引擎
页:
[1]