Sql与MySQL简单入门

  作为过来人,给“新司机”一点建议:运维时需要搭建的生产环境,需尽量保持与测试环境一致;但搭建环境时,又苦于找不到合适的版本怎么办?不用怕,我是一个体贴的人,管杀也管埋(该链接为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 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/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。