作为过来人,给“新司机”一点建议:运维时需要搭建的生产环境,需尽量保持与测试环境一致;但搭建环境时,又苦于找不到合适的版本怎么办?不用怕,我是一个体贴的人,管杀也管埋(该链接为MySQL 各个历史版本下载的链接:http://downloads.mysql.com/archives/community/)。
1.MySQL
[1]数据库简介
- DataBase
- 存储数据的仓库
- 关系型数据库
- 关系型数据库中保存全都是表格(Table)
- 数据库的有点:
1.可以保存大量的信息
2.有较好的查询性能
- 常见数据库:
- MySQL --> 甲骨文
- DB2 --> IBM
- Oracle --> 甲骨文
- SQL Server --> 微软
[2]SQL(Structured Query Language)简介
- 结构查询语言
- SQL就是一门来操作数据库的语言
- SQL的国际化标准是由ISO组织来定义的
大部分厂商都对SQL标准进行了实现,而各个厂商又在SQL标准上进行了扩展,
数据库厂商自己扩展的功能,我们称为方言。
- SQL的基本语法:
1.SQL是大小写不敏感的,但是我们要求关键字要大写。
2.SQL语句要求以;结尾(主要指在命令行窗口)
3.SQL中的命名规范,单词之间使用下划线连接
[3]数据库操作
> 基本操作
- 登录:
mysql -u用户名 -p密码
- 退出:
quit/exit
- 显示所有数据库:
SHOW DATABASES;
- 使用数据库:
USE 数据库名;
- 创建数据库:
CREATE DATABASE 数据库名;
- 显示所有表:
SHOW TABLES;
- 查看表中的数据:
SELECT * FROM 表名;
- 删除数据库
DROP DATABASE 数据库名;
> 表操作:
- 创建表
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
...
列名 列类型
);
例子:
CREATE TABLE t_stu(
name VARCHAR(50)
);
- 查看表结构
DESC 表名;
- 删除表
DROP TABLE 表名;
> 常用数据类型
- 字符串
CHAR
- 定长字符串,char的长度是固定的
比如:CHAR(10),长度永远为10
如果内容的长度不够10,则自动在字符串后边补空格
char型数据在保存时会自动去掉后边的空格
- 一般我们使用char型来保存一些长度固定的数据,身份证号
- CHAR的最大长度是255
VARCHAR
- 可变长度的字符串
- 最大长度65535
- 数值
INT
- 整型
- 创建int类型也可以指定长度
- int(11),默认长度也是11,所以在创建int型的不用指定长度
DOUBLE
- 浮点型
- 表示浮点数
- 声明double可以指定一个长度
double(5,2) --> 表示数字长度是5位,其中有两位小数
DECIMAL
- 浮点类型
- 十进制精确计算的浮点类型
- DECIMAL使用方式和DOUBLE类似,也是可以声明一个长度 DECIMAL(6,2)
- 一般涉及到钱的数据时我们需要使用
- 时间
DATE
- 只保存日期
- 2016-1-9
TIME
- 只保存时间
- 11:21:00
DATETIME
- 同时保存时间和日期
2016-1-9 11:21:00
TIMESTAMP
- 保存时间戳
- 时间戳值:1970-1-1 0:0:0 到当前时间的一个毫秒数
- 时间戳默认在数据被修改后自动更新
- 创建一个学生表
int id
String name
Date birth
String gender
CREATE TABLE t_stu(
id INT,
name VARCHAR(50),
birth DATE,
gender CHAR(2)
);
> 数据库的操作主要就是对表中数据的增删改查(CRUD)
> 数据的修改
- 插入数据
> INSERT INTO 表名 (列名1,列名2,列名3, ... 列名N) VALUES(列值1,列值2,列值3 ... 列值N);
- 例子,我们向t_stu表中插入一个学生信息
id为1,name为sunwukong,birth为1980-8-8,性别为male
- INSERT INTO t_stu (id, name, birth, gender) VALUES(1,'sunwukong','1980-8-8','male')
- 在mysql中操作字符串时一定要使用单引号'
INSERT INTO t_stu (id, name, birth) VALUES(1,'sunwukong','1980-8-8');
> INSERT INTO 表名 VALUES(列值1,列值2,列值3 ... 列值N);
- 如果表名后边不写列名,则values中的值,应该按照创建表时顺序来写
INSERT INTO t_stu VALUES(3,'zhubajie','1970-7-1','male');
- 修改数据
> UPDATE 表名 SET 列名1=列值1,列名2=列值2, ... 列名N=列值N [WHERE 条件];
> 例子:
UPDATE t_stu SET gender='male'
这种不加条件的update语句,会修改表中的所有数据。
如果只希望修改部分数据,则需要在语句后边添加上条件。
> 例子2
UPDATE t_stu SET gender='怪蜀黍' WHERE id=4;
- 在WHERE关键字后边可以附加条件,这样语句只会对符合条件的数据生效
- SET之后的=号,代表赋值
- WHERE之后的=号,代表判断
- 大部分逻辑运算符都可以在SQL中使用
> 例子3
UPDATE t_stu SET gender='猪' WHERE id=3 AND name='zhubajie';
UPDATE t_stu SET gender='男' WHERE id=3 OR id=4;
- AND表示并列,AND前后的条件必须同时满足,才会执行
- OR表示或者,OR前后的条件只要满足一个就好执行。
- 删除数据
> DELETE FROM 表名 [WHERE 条件];
> 例子1:
DELETE FROM t_stu;
- 不带条件的删除,会删除表中的所有数据(慎用)
> 例子2:
DELETE FROM t_stu WHERE id=3;
- 删除id为3的学生信息
- 清空表
> TRUNCATE TABLE 表名;
> 清空表时干了两件事:
1.删除整个表
2.创建一个新表
> 数据的查询
- 查询表中的所有列
SELECT * FROM 表名 [WHERE 条件];
* 代表查找全部的列
- null比较特殊,不能用=判断,使用IS NULL
- 查询表中的指定列
SELECT 列名1 , 列名2 , ... 列名N FROM 表名 [WHERE 条件];
SELECT empno , ename , job , mgr , hiredate , sal , comm , deptno FROM emp;
- 真正开发时,数据库表的列数往往是很多的,所以向SELECT * FROM emp这种语句,开发中用的不多。
- 使用别名
SELECT 列名1 AS 别名1 , 列名2 AS 别名2 , ... 列名N AS 别名N FROM 表名 [WHERE 条件];
- 例子:我们可以在列名后跟着一个AS关键字,然后设置别名
SELECT empno AS 员工号 , ename AS 姓名 , job AS 职位 , mgr AS 上级 , hiredate AS 入职日期 , sal AS 工资 , comm AS 提成 , deptno AS 部门编号 FROM emp;
SELECT 列名1 别名1 , 列名2 别名2 , ... 列名N 别名N FROM 表名 [WHERE 条件];
- 例子:也可以不使用AS关键字,直接在列名后加一个空格,然后加别名
SELECT empno 员工号 , ename 姓名 , job 职位 , mgr 上级 , hiredate 入职日期 , sal 工资 , comm 提成 , deptno 部门编号 FROM emp;
- 排序
> 升序
SELECT * FROM 表名 ORDER BY 列名 ASC;
例子:
SELECT * FROM emp ORDER BY sal ASC;
> 降序
SELECT * FROM 表名 ORDER BY 列名 DESC;
例子:
SELECT * FROM emp ORDER BY sal DESC;
> 函数(做一些计算)
1.COUNT
- 用来对查询到数据进行计数的。
- 例子1:
SELECT COUNT(*) FROM emp;
- COUNT(*) 统计所有数据的行数
- 例子2:
SELECT COUNT(列名) FROM emp;
- 统计当前列不为null的数据的条数
- 列子3:
SELECT COUNT(1) FROM emp;
- 和CONUT(1)和CONUT(*)一样
2.MAX
- 获取多个值中的最大值
- 例子:
SELECT MAX(sal) FROM emp;
3.MIN
- 获取多个值中的最小值
- 例子:
SELECT MIN(sal) FROM emp;
4.AVG
- 多个值取平均值
- 例子:
SELECT AVG(sal) FROM emp;
5.SUM
- 多个值得求和:
- 例子:
SELECT SUM(sal) FROM emp;
[4]约束
- 约束就是为表中的内容添加限制条件
> 主键(PRIMARY KEY)
- 就是一条数据的唯一标识,通过主键可以快捷的检索到数据。
特点:
- 唯一
- 非空
- 可以被引用
- 创建主键:
CREATE TABLE t_user(
id INT PRIMARY KEY,
`name` VARCHAR(50)
);
> 主键自增(AUTO_INCREMENT)
- 主键自增指的是主键自动生成并且自动累加
- 注意:自增主键只适用于int型主键,字符串主键不能使用。
- 创建方式:
CREATE TABLE t_user2(
id INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(50)
)
> 非空(NOT NULL)
CREATE TABLE test_tb(
username VARCHAR(50) NOT NULL
)
> 唯一(UNIQUE)
CREATE TABLE test_tb(
username VARCHAR(50) UNIQUE
)
> 外键(FOREIGN KEY)
- 外键关联指的是将一个表中的列和另一个表的主键进行关联。
FOREIGN KEY (列名) REFERENCES 引用表的表名(引用列的列名)
FOREIGN KEY (dept_id) REFERENCES dept(id)
- 可以被外键关联的列,一定是主键
- 注意:含外码的关系称为参照关系。
- 一对多 1-N
例子:部门与员工
- 一个部门可以有多个员工,一个员工只能属于一个部门
- 一对多的关系我们一般是通过在多的一方来保存一的一方主键
#一对多的关系
#创建一个dept表
CREATE TABLE dept (
id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(50)
)
#创建一个员工表
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(50),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES dept(id)
)
- 一对一 1-1
> 夫妻的关系就是一对一的关系
> 一个丈夫只能有一个妻子,一个妻子只有一个丈夫
#一对一关系
#创建一个husband表
CREATE TABLE husband(
id INT PRIMARY KEY,
hname VARCHAR(50)
)
#创建一个wife
CREATE TABLE wife(
id INT PRIMARY KEY,
wname VARCHAR(50),
FOREIGN KEY (id) REFERENCES husband(id)
)
#插入一个husband
INSERT INTO husband VALUES(1,'武大郎');
INSERT INTO husband VALUE(1,'西门庆');
#插入一个wife
INSERT INTO wife VALUES(1,'潘金莲');
- 多对多 N-N
> 老师和学生
- 一个老师可以有多个学生
- 一个学生可以有多个老师
- 多对多的关系我们一般都是以创建一个中间表的形式来映射
- 例子:
#多对多的关系
#创建一个tea
CREATE TABLE tea(
id INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(50)
)
#创建一个学生
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(50)
)
#创建一个中间表
CREATE TABLE tea_stu(
tea_id INT,
stu_id INT,
FOREIGN KEY (tea_id) REFERENCES tea(id),
FOREIGN KEY (stu_id) REFERENCES stu(id)
)
#插入几个老师
INSERT INTO tea VALUES(NULL,'张三丰');
INSERT INTO tea VALUES(NULL,'陈近南');
INSERT INTO tea VALUES(NULL,'扫地僧');
#插入几个学生
INSERT INTO stu VALUES(NULL,'张无忌');
INSERT INTO stu VALUES(NULL,'韦小宝');
INSERT INTO stu VALUES(NULL,'乔峰');
INSERT INTO stu VALUES(NULL,'杨过');
转载请注明出处!
http://www.cnblogs.com/libingbin/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。