8000 add mysql · lzhanforgit/python@2fc2d72 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2fc2d72

Browse files
committed
add mysql
1 parent 6ade07d commit 2fc2d72

5 files changed

+790
-0
lines changed

mysql/unit1.md

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
#mysql-基础
2+
1. 介绍
3+
4+
20世纪90年代诞生于瑞典
5+
6+
2008年被SUN收购
7+
8+
2009年SUN被ORICAL收购
9+
10+
[官网](http://dev.mysql.com/downloads/installer/)
11+
2. 80版本navigat无法登陆的情况
12+
13+
14+
命令行 mysql -u root -p 然后进入管理页面
15+
16+
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
17+
2. 安装目录及配置
18+
19+
1. windows: my.ini
20+
2. mac: my.conf
21+
22+
配置参数
23+
24+
# 以下选项会被MySQL客户端应用读取。
25+
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容。
26+
# 如果你想你自己的MySQL应用程序获取这些值。
27+
# 需要在MySQL客户端库初始化的时候指定这些选项。
28+
[client]
29+
port = 3306
30+
socket = /usr/local/mysql/mysql.sock
31+
# MySQL 服务端
32+
[mysqld]
33+
#默认存储引擎INNODB
34+
default-storage-engine=INNODB
35+
#GROUP_CONCAT长度
36+
group_concat_max_len =99999
37+
#端口号
38+
port = 3306
39+
#socket位置
40+
socket = /usr/local/mysql/mysql.sock
41+
#pid写入文件位置
42+
pid-file = /usr/local/mysql/mysqld.pid
43+
#数据库文件位置
44+
datadir = /home/data/mysql/data
45+
user = mysql
46+
#SQL模式具体查阅相关资料
47+
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
48+
#当外部锁定(external-locking)起作用时,每个进程若要访问数据表,
49+
#则必须等待之前的进程完成操作并解除锁定。由于服务器访问数据表时经常需要等待解锁,
50+
#因此在单服务器环境下external locking会让MySQL性能下降。
51+
#所以在很多Linux发行版的源中,MySQL配置文件中默认使用了skip-external-locking来避免external locking。
52+
skip-external-locking
53+
#跳过DNS反向解析
54+
skip-name-resolve
55+
#关闭TIMESTAMP类型默认值
56+
explicit_defaults_for_timestamp
57+
3. 启动服务
58+
59+
windows:
60+
61+
1. service mysqld start
62+
2. service mysqld stop
63+
3. service mysqld restart
64+
4. service mysqld status
65+
66+
4. 三大范式
67+
68+
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
69+
70+
1. 第一范式(确保每列保持原子性)
71+
72+
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
73+
74+
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。
75+
76+
2. 第二范式(确保表中的每列都和主键相关)
77+
78+
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
79+
80+
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。
81+
82+
订单信息表
83+
84+
![dd](https://pic002.cnblogs.com/images/2012/270324/2012040114063976.png)
85+
86+
这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
87+
88+
而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。
89+
90+
案例分析:
91+
92+
学生| 课程| 老师| 老师职称| 教材| 教室| 上课时间|
93+
---|---|---|---|---|---|---|
94+
小明| 一年级语文(上)| 大宝| 副教授| 《小学语文1》| 101| 14:30|
95+
96+
3. 第三范式(确保每列都和主键列直接相关,而不是间接相关)
97+
98+
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
99+
100+
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。
101+
102+
![](https://pic002.cnblogs.com/images/2012/270324/2012040114105477.png)
103+
104+
105+
drop database if exists db_name;
106+
107+
4. DDL
108+
109+
新建数据库
110+
111+
-- 数据库名不需要加引号
112+
DROP database if EXISTS mystudents;
113+
CREATE DATABASE mystudents DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
114+
115+
新建表结构
116+
117+
-- 新建student表
118+
119+
-- drop TABLE if EXISTS student;
120+
CREATE table student(
121+
id int PRIMARY KEY auto_increment,
122+
sno VARCHAR(10) UNIQUE,
123+
sname varchar(20) not NULL,
124+
sgender VARCHAR(2) DEFAULT '女',
125+
sbirthday date,
126+
sdept varchar(20)
127+
128+
)
129+
130+
131+
-- 新建course
132+
133+
CREATE table course(
134+
cno VARCHAR(4) PRIMARY key,
135+
cname VARCHAR(40) not null,
136+
cpno varchar(4),
137+
ccredit SMALLINT,
138+
-- 记住属性要用括号
139+
FOREIGN key(cpno) REFERENCES course(cno)
140+
)
141+
142+
143+
-- 新建sc表
144+
145+
create table sc(
146+
sno VARCHAR(10),
147+
cno varchar(4),
148+
grade SMALLINT,
149+
PRIMARY key(sno,cno),
150+
FOREIGN key(sno) REFERENCES student(sno),
151+
FOREIGN key(cno) REFERENCES course(cno)
152+
)
153+
154+
155+
-- 查看表结构
156+
157+
desc sc;
158+
show create table sc;
159+
160+
-- 修改表约束
161+
162+
alter table sc add FOREIGN key(sno) REFERENCES student(sno);
163+
alter table sc add FOREIGN key(cno) REFERENCES course(cno);
164+
165+
166+
use mystudents;
167+

0 commit comments

Comments
 (0)
0