数据库没有诀窍:唯有练习
命令 ===== Linux
前三周的课程:
1、两周的时间讲解前端部分(UI):
HTML
css
JavaScript(js)
jQuery
2、数据库(关系型数据库+非关系型数据库(nosql))
MySQL:
mongodb:
redis:
=================================================================
mysql:
典型关系型数据库(relational database)
=================================================================
1、安装MySQL
window:
.msi
.zip
修改my.ini
bin添加到path
以管理员身份打开cmd命令提示符,将路径切换到bin下去,
mysqld install/remove
net start/stop mysql
Linux
使用应用仓库安装
CenterOS|redhat:
sudo yum install mysql-sever mysql
ubuntu:
sudo apt|apt-get install mysql-server
sudo apt|apt-get install mysql-client
sudo service mysql restart/start/stop/status
从官网下载的源代码:
2、MySQL的使用
MySQL 典型C/S架构的软件 client/server
进入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/mysqld.cnf
bind-address 注释掉
3、重启服务
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标准的讲解
|-- sql
|-- DDL(data definition language)数据定义语言
create drop alter show
|-- DML(data manipulation language) 数据操作语言
CRUD update delete insert select
|-- DQL(data query language)数据查询语言
select
|-- DCL(data controll language)数据控制语言
grant invoke
6、创建数据库
创建数据库:
create database dbName [[default] charset 'utf8']
删除数据库:
drop database dbName;
修改数据库:
alter database dbName default charset gbk;
查看数据库定义:
show create database dbName;
7、mysql的数据类型
整形:
tinyint 一个字节
smallint 两个字节
mediumint 三个字节
int 四个字节
bigint 八个字节
浮点型数据:
float 四个字节
double 八个字节
decimal(10,5) 做精确运算时使用
文本型:
char(lenght)
varchar(length)
text
二进制:bit,binary,Blob
日期:
year ,month,day,time,date,datetime,timestamp 游标戳
枚举:enum()
8、表的常见操作
表的创建:
create table tName(
field1 int primary key auto_increment,
gender varchar(20) not null
) default charset utf8 engine=innodb/mysiam
查询表创建的信息:
show create table tname[/G];
对表结构的修改:
修改表名:
rename table oldTableName to newTableName;
alter table tableName rename to new TableName;
修改表的属性(字符集|引擎……):
alter table tableName charset=gbk
alert table t_test charset='gbk';
修改表的字段:
alter table tName change/modify/drop/add field
增加一个新的字段:
alter table tName add newColumn condition 位置
alter table t_test add nickname varchar(50) not null unique
修改一个字段的名称
alter table tName change nickname test varchar(30) default 'liushuaige' first;
修改一个字段的类型
alter table tName modify test varchar(80) default 'hehe' after age;
删除一个字段
alter table t_test drop test;
9、CRUD(C:create 增加 R:retrieve 查询 U:update 修改 D:delete 删除):
insert into
tableName(field1,field2,……,fieldn)
values(val1,val2,……,valn);
update tableName set field1=newV[,……,fieldn=newV]
where condition;
delete 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
latin1
……
校对集:
_bin: binary 区分大小写
_cs: 区分大小写
_ci: 忽略大小写
=============================================================
今天目标:
分表:
多表关联查询:
外键:
视图:
索引:
面试题:
1、说说你所知道的mysql的数据库引擎有哪些?
2、innodb、myisam 两个引擎的区别?
=============================================================
在设计数据库时,一般而言要求遵循数据库三范式(3NF)
1、设计的字段具有原子性(字段不可分割)
2、每天记录具有唯一性 主键
3、外键
大量数据冗余
数据冗余:在一个数据集合中重复的数据称为数据冗余.
数据冗余技术是使用一组或多组附加驱动器存储数据的副本,这就叫数据冗余技术。
create TABLE emp (
id int PRIMARY KEY auto_increment,
name varchar(50) not null,
gender char(10) DEFAULT '男',
tel varchar(20) DEFAULT '110',
address varchar(255),
qq varchar(30),
age int DEFAULT 18,
deptId int,
# 添加外键约束
constraint foreign key(deptid) references dept(id) on delete set NULL on update
)
外键 foreign key 完成外键的约束
CONSTRAINT FOREIGN key(新表的字段) REFERENCES 主表(引用字段)
create table dept(
id int PRIMARY KEY auto_increment,
name varchar(50) not null UNIQUE,
describle text
)
# 多表管理查询
# 多表管理查询有五种连接方式
# 1、交叉查询(了解)
select *
from dept,emp
SELECT * from emp cross join dept;
# 笛卡尔积现象
内连接
SELECT *
FROM emp,dept
WHERE emp.deptid = dept.id
SELECT e.*,t.name as deptname, t.describle deptdesc from emp as e inner join dept t on (e.deptid = t.id)
外连接
外连接分为左外连接和右外连接
SELECT e.*,d.name deptname, d.describle deptdesc FROM emp e LEFT JOIN dept d on(e.deptid=d.id);
SELECT e.*,d.name deptname, d.describle deptdesc FROM emp e RIGHT OUTER JOIN dept d on(e.deptid=d.id);
# 自然连接 真正的开发中用不到
SELECT * from emp natural join dept;
自连接
# 查询用户id为1的部门名称
SELECT name
from dept
WHERE id = (SELECT deptId from emp where id=8);
子查询
将一个查询结果作为条件的一部分写入到第二个sql中
如 姓名为zs的用户的部门名称:
Select deptname from dept where deptid = (select deptid from emp where empname = ‘zs’)
SELECT d.name
from emp e ,dept d
WHERE e.deptid=d.id and e.id = 1
SELECT d.name
from emp e INNER JOIN dept d on(e.deptid=d.id)
where e.id = 1;