一般满足这三个就可以了
但是如果为了性能,放一张表会违反第二第三,也可以
七、基本概念
1、索引:将表中一个或多个字段中的数据复制一份另存,拿出来按次序排序后,找需要的数据,避免全表扫描
2、关系运算
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联
八、数据模型
九、安装MySQL
yum info mariadb Centos7
yum info mysql Centos6
cd /etc/yum/yum.repos.d
yum list mariadb-server
yum install mariadb-server
centos安装5.58
224.4M那个文件
十、基础命令
装完查看一下rpm -ql mariadb-server
sysytemctl start mariadb
systemctl enable mariadb开机启动mariadb
ss-ntl----看启动
输入mysql默认连接
show databases;看有哪些数据库
select user()看是谁进入访问的,默认下的管理员root没有账号密码
use test就会进入test数据库,不再是None
show tables 查看有哪些表
use mysql 系统库
show tables
#drop database test;可以删除这个库
exit退出/quit
mysql -uroot -h192.168.8.10通过root去进入谁的数据库,默认不允许
mysql -uxxx 默认随便输入账号都能进去,匿名账号,权限不大
mysql的表里,有一个user
desc user 可以查看表user
select * host,user,password from user查询这三个字段来显示
输入mysql_查看
mysql_secure_installation 设置root口令,新口令,匿名账户是否删除,禁止root远程登录与否,是否删除test测试数据库,是否加载特权表,就是重新加载生效
再次进入mysql,就进不去了
mysql -uroot -p
输入密码
select * host,user,password from mysql.user
十一、下午3点前十五分钟课程,看下,补全
vim /etc/my.cnf
这里面有一个datadir,是数据库表目录,可以修改位置
但是改完要改权限,然后重启
cd
忘记密码,修改
update user set password=password('centos') where user='root' 修改密码
;
十二、创建操作
create database mydb创建db
#ps aux/pstree
十三、创建表及操作
先use进入一个数据库
create table students (sid tinyint unsigned,name char(30),sex enum('m','f'))括号内表示字段,数据类型(课件47页)
字符串:char(n)固定长度,n自己写,不够的补,速度快,形式一样
varchar(n)可变长度,超的不要,不够的也不补,省空间
dese students 去看一下结构
加入主键
create table students (sid tinyint unsigned primary key,name char(30),sex enum('m','f'))
1、表内查询
show tables
1、查看内容
select * from students;
2、加入内容
insert students (sid,name,sex ) value (1,'Jim','m' );按顺序,可以不用写(sid,name,sex )
再查看内容
2、部分赋值
insert students (sid,name ) value (2,'tom');
3、修改内容
update students set sex='f';不写条件,全部修改
update students set sex='f' name='lili' where name='tom';
4、删除内容
delete from students where sid=3;不加条件,全部删除
truncate table students 删除内容,没有日志,不能还原,跑路了,老铁
十四、索引
show table status like 'students'\G;
desc students
create index> 再desc一下
select from students
explain select from students;
explain select from students where>
explain select from students where name='tom'\G;加了索引就1次查完,不然全表
十五、DQL语句
select * from students where gender is null,查询某个字段值是否为空,空白未见是空
insert students(name,age,gender) value ('tom',1,'F');不符合定义的gender
这样就能找到null
十六、SELECT
select name,age from students where gender='M';
查找男生
select avg(age) from students
查询平均年龄
select gender,avg(age) from students group by gender;
查询男女各自平均,group用了之后,select后,只能用by的字段和汇总的内容
select gender,max(age) from students group by gender;
按男女查询最大年龄
select max(age) from students group by gender having gender='M';
查找M的最大年龄
select from students order by age;
查询年龄desc倒序,asc 正序,写在age后面
select from students where calssid=1 limit 2;
查询前两个,如果是1,2,就是跳过第一个,显示前两个
十七、多表查询
1、交叉查询:笛卡尔乘积
字段叠加3+4
select * from coc cross join teachers (coc和teachers表交叉)
2、内连接(交集)
select st.name,sc.score from students as st,scores as sc where st.stuid=sc.stuid
select st.name,sc.score from students as st inner join scores as sc on st.stuid=sc.stuid
这俩都是取stuid一样的交集
3、外连接(左、右)
select st.name,sc.score from students as st left outer join scores as sc on st.stuid=sc.stuid 左
4、多表查询
5、自连接
select s1.name,s2.name from students as s1 inner join students as s2 on s1.teacher=s2.stuid
十八、用户账号
1、创建用户带授权一般一起
grant all/select,delete on hellodb. to wang@'192.168.8.%'>是所有表
mysql -uwang -pcentos -h192.168.8.100
十九、MariaDB日志
1、show processlist 可以列出所有进程,总是存在的,说明比较慢或大量用
2、show variables like ‘%slow%’查慢连接
【set global log_slow_queries=ON】
3、