数据库(Database)是按照数据结构来组织、存储和管理数据的仓库mysql
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系 型数据库中,对数据的操做几乎所有创建在一个或多个关系表格上,经过对这些关联的表格 分类、合并、链接或选取等运算来实现数据库的管理。
简单理解:保存的实体与实体之间的关系。(用户、商品、订单)web
NoSQL,泛指非关系型的数据库。随着互联网 web2.0 网站的兴起,传统的关系数据库在应 付 web2.0 网站,特别是超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从 心,暴露了不少难以克服的问题,而非关系型的数据库则因为其自己的特色获得了很是迅速 的发展。NoSql 数据库在特定的场景下能够发挥出不可思议的高效率和高性能,它是做为对 传统关系型数据库的一个有效的补充。
NoSQL(NoSQL=NotOnlySQL),意即“不只仅是 SQL”,是一项全新的数据库革命性运动, 早期就有人提出,发展至 2009 年趋势愈加高涨。NoSQL 的拥护者们提倡运用非关系型的数 据存储,相对于铺天盖地的关系型数据库运用,这一律念无疑是一种全新的思惟的注入。sql
注意:在启动 mysql 服务后,打开 windows 任务管理器,会有一个名为 mysqld.exe 的进程运 行,因此 mysqld.exe 才是 MySQL 服务器程序。数据库
在启动 MySQL 服务器后,咱们须要使用管理员用户登陆 MySQL 服务器,而后来对服务 器进行操做。登陆 MySQL 须要使用 MySQL 的客户端程序:mysql.exe windows
mysql-u root -p root-h localhost
安全
quit 或 exit服务器
例如 MySQL 中的 LIMIT 语句就是 MySQL 独有的方言,其它数据库都不支持!固然, Oracle 或 SQLServer 都有本身的”方言”。数据结构
建立一个数据库语法 并发
CREATEDATABASE 数据库名称;oracle
建立一个使用 utf8 字符集的 mydb1 数据库
CREATEDATABASEmydb1CHARACTERSET’UTF8’;
建立一个名称为employee的数据库
建立一个 建立一个使用 utf-8 编码字符集的employee2 数据库
默认字符集
指定字符集
查询全部数据库
语法:SHOWDATABASES;
查询数据库的定义
语法:SHOWCREATEDATABASE 数据库名称;
查询全部数据库
查看数据库信息
语法:ALTERDATABASE 数据库名称 CHARACTERSET 编码;
案例演示 :修改数据库编码为 GBK,并查看
删除数据库是将数据库系统中已经存在的数据库删除。
语法 DROP DATABASE数据库名称
使用 MySQL 数据库存储数据时,不一样的数据类型决定了 MySQL 存储数据方式的不一样。为 此, MySQL 数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点数类型、 日期和时间类型、字符串类型和二进制类型。
int:整型
double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99
decimal:泛型型,在表单钱方面使用该类型,由于不会出现精度缺失问题
char:固定长度字符串类型 varchar:可变长度字符串类型
text:字符串类型 blob:字节类型
date:日期类型,格式为:yyyy-MM-dd
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型
数据库建立成功后,就须要建立数据表。所谓建立数据表指的是在已存在的数据库中创建新 表,
注意:在操做数据表以前,应该使用“USE 数据库名”指定操做是在哪一个数据库中进行,否 则会抛出“ Nodatabaseselected”错误。
-语法:
create table 表名(
字段名称 类型(长度) 约束,
字段名称 类型(长度) 约束,
字段名称 类型(长度) 约束,
….
);
表名小括号,后面有分号结束。
每一行字段后面要有逗号分隔,可是最后一行没有逗号。
数据的类型后面有长度,若是是字符型,长度必须加。若是是其余类型,能够不加。 有默认长度。int 默认长度 11
-- 新建Student 表,包含列学号(主键),姓名,学号,语文成绩,数学成绩,英语成绩 CREATE TABLE Student( sid VARCHAR(10) PRIMARY KEY, sname VARCHAR(20), sage INT, cscore INT, mscore INT, escore INT ); ![](https://i.imgur.com/2YU5Bbt.png)
语法:SHOWTABLES;
使用 SQL 建立好数据表后,能够经过查看数据表结构的定义,以确认数据表的定义是否正确。
该语句能够查看数据库表的定义信息,还能够查看表的字符集。
该语句能够查看表的字段名、字段类型等信息。
简化写法为:DESC 表名;
添加字段 ALTER TABLE 表名 ADD 字段 类型(长度) 约束;
删除字段 ALTER TABLE 表名 DROP 字段;
删除数据表是指删除数据库中已存在的表。在删除数据表的同时,数据表中存储的数据都将 被删除。
注意:建立数据表时,表和表之间可能会存在关联,要删除这些被其余表关联的表比较复杂,将在以后学习
语法 DROP TABLE 表名;
为了防止数据表中插入错误的数据,在 MySQL 中,定义了一些维护数据完整性的规则,即 表的约束
主键列的值不能为 NULL,也不能重复!
指定主键约束使用 PRIMARYKEY 关键字
设置为非空后,列必须有值
CREATE TABLE Student( id INT, NAME VARCHAR(20), age INT, scode INT, mScore INT )
想要操做数据表中的数据,首先要保证数据表中存在数据,MySQL 使用 INSERT 语句想数据 表中添加数据,而且根据添加方式的不一样分为三种,分别是为表中的全部字段添加数据,为 表中指定字段添加数据、同时添加多条记录。
INSERT INTO 表名(列名 1,列名 2, …)VALUES(值 1, 值 2)
注意:列和值必须匹配
示例 INSERT INTO stu(id,name,age,idcard) VALUES (1,’lisi’,18,1111111111);
INSERT INTO 表名 VALUES(值 1,值 2,…)
注意:由于没有指定要插入的列,表示按建立表时列的顺序插入全部列的值:
示例 INSERT INTO stu VALUES(2,’zhaoliu’,32,2222222222222222222);
注意: 数据与字段类型要相同 字段长度须要控制 全部字符串数据必须使用单引用
语法:
查询全部数据:SELECT*FROM 表名;
【*】通配符表示表中全部字段查询指定字段:SELECT 字段名 1,字段名 2,字段名 3FROM 表名;
字段 一、字段 二、字段 3 表示从表中查询的指定字段去除重复的数据:SELECTDISTINCT 字段名 FROM 表名;
DISTINCT 是可选参数,用于剔除查询结果中重复的数据
-- 新建Student 表,包含列学号(主键),姓名,年龄,语文成绩,数学成绩,英语成绩 CREATE TABLE Student( sid VARCHAR(10) PRIMARY KEY, sname VARCHAR(20), sage INT, cscore INT, mscore INT, escore INT ); DROP TABLE Student; -- 新建Teacher 表,包含列工号(主键),姓名,年龄 CREATE TABLE Teacher( tid VARCHAR(10) PRIMARY KEY, tname VARCHAR(20), tage INT ); -- 查看全部表 SHOW TABLES; -- 该语句能够查看数据库表的定义信息,还能够查看表的字符集 SHOW CREATE TABLE Student; -- 该语句能够查看表的字段名、字段类型等信息 DESCRIBE Student; -- 修改表名 RENAMETABLE 旧表名 TO 新表名; RENAME TABLE Teacher TO Worker; -- 修改字段名 语法:ALTER TABLE 表名 MODIFY 字段名 数据类型; ALTER TABLE worker MODIFY tage INT; -- 添加字段 ALTER TABLE 表名 ADD 字段 类型(长度) 约束; ALTER TABLE worker ADD tsalary DOUBLE; -- 删除字段 ALTER TABLE 表名 DROP 字段; ALTER TABLE worker DROP tsalary; -- 删除表 DROP TABLE 表名; DROP TABLE worker; -- 给建立 person 表,给表的 id 字段设置主键约束, name 字段非空约束, idcard 字段惟一约束。 CREATE TABLE person( pid INT PRIMARY KEY, pname VARCHAR(20) NOT NULL, pidcard INT UNIQUE ); DROP TABLE person; -- 设置表字段的值自动增长 语法:字段名 数据类型 AUTO_INCREMENT; CREATE TABLE person( pid INT PRIMARY KEY AUTO_INCREMENT, pname VARCHAR(20) NOT NULL, pidcard INT UNIQUE ); -- INSERT 插入语句 -- 语法 1 INSERTINTO 表名(列名 1,列名 2, …)VALUES(值 1, 值 2) INSERT INTO person(pid,pname,pidcard) VALUES(1,'zhangsan',1); INSERT INTO person(pid,pname,pidcard) VALUES(2,'lisi',2); -- 语法 2: INSERTINTO 表名 VALUES(值 1,值 2,…) INSERT INTO person VALUES(3,'wangwu',3); -- 查询全部数据:SELECT*FROM 表名; SELECT * FROM person; -- 查询指定字段:SELECT 字段名 1,字段名 2,字段名 3FROM 表名; SELECT pid FROM person; -- 去除重复的数据:`SELECT DISTINCT 字段名 FROM 表名; SELECT DISTINCT pid FROM person; -- UPDATE 更新语句 UPDATE 表名称 SET 列名称 1= 新值 1, 列名称 2= 新值 2, ... WHERE 列名称 = 某值(旧值,条件值) UPDATE person SET pname = 'haha' WHERE pid = 1; UPDATE person SET pname = 'haha' WHERE pid < 3; -- DELETE 删除语句 DELETE FROM 表名 WHERE 条件; DELETE FROM person WHERE pid = 1; -- 删除所有数据方式一 DELETEFROMperson; DELETE FROM person; -- 删除全部记录方式二 `TRUNCATE TABLE 表名 ` `TRUNCATE TABLE student;` TRUNCATE TABLE person; CREATE TABLE Student( id INT, NAME VARCHAR(20), age INT, scode INT, mScore INT ) INSERT INTO Student VALUES(1,'李四',25,001,59.5); INSERT INTO Student VALUES(2,'王五',26,002,75); INSERT INTO Student VALUES(3,'赵六',25,003,80); INSERT INTO Student VALUES(3,'赵六',25,003,80); INSERT INTO Student VALUES(4,'铁铲',50,NULL,50); INSERT INTO Student VALUES(5,'weidong',50,NULL,50); INSERT INTO Student VALUES(6,'yangguo',50,NULL,50); INSERT INTO Student VALUES(9,'zhaoliu',50,NULL,50); INSERT INTO Student VALUES(9,'da%niu',50,NULL,50); -- 查询表中全部数据 SELECT * FROM Student; -- 指定字段:SELECT 字段名 1,字段名 2FROM student; SELECT NAME,age FROM Student; -- 条件查询(必会) -- 语法:SELECT*FROM 表名 WHERE 条件表达式; SELECT * FROM Student WHERE age = 25; SELECT * FROM Student WHERE age > 25; SELECT * FROM Student WHERE NAME = '赵六'; -- IN 关键字查询 语法 SELECT * FROM 表名 WHERE 字段名 IN(元素 1,元素 2) SELECT * FROM Student WHERE id IN(1,2,3,4); SELECT * FROM Student WHERE NAME IN('李四','赵六'); -- BETWEEN...AND... 语法 SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN 值 1AND 值 2; -- 值 1 表示范围的起始值 -- 值 2 表示范围的结束值 SELECT * FROM Student WHERE id BETWEEN 2 AND 2; SELECT * FROM Student WHERE id NOT BETWEEN 2 AND 2; -- 使用not表示再也不这个范围内 -- 空值查询 使用 ISNULL 关键字来判断字段的值是否为空值 -- 语法 SELECT*FROM 表名 WHERE 字段名 IS[NOT]NULL; SELECT * FROM Student WHERE scode IS NULL; SELECT * FROM Student WHERE scode IS NOT NULL; -- 带 DISTINCT 关键字的查询 语法: SELECT DISTINCT 列名称 FROM 表名称 //只列出不重复的元素 SELECT DISTINCT * FROM Student; -- 带 LIKE 关键字查询 语法 SELECT* FROM 表名 WHERE 字段名 [NOT]LIKE'匹配字符串'; -- NOT 表示查询与指定字符串不匹配的记录 -- 百分号(%)通配符 匹配任意长度的字符串,包括空字符串, SELECT * FROM Student WHERE NAME LIKE 'w%'; SELECT * FROM Student WHERE NAME LIKE '%a%'; -- 下划线通配符值匹配单个字符串,若是须要匹配多个,那么须要多个下划线 SELECT* FROM student WHERE NAME LIKE 'we__ong'; -- 查询带百分号的字段`aa%bb` SELECT * FROM student WHERE NAME LIKE'%\%%'; -- AND 关键字多条件查询 -- 语法 SELECT* 字段 一、字段 2 FROM 表名 WHERE 条件表达式 1 AND 条件表达式 2... SELECT age ,NAME FROM Student WHERE id>3 AND age>25; -- 带 OR 关键字的多条件查询 -- 语法 SELECT* 字段名 一、字段 2 FROM 表名 WHERE 条件表达式 1 OR 条件表达式 2; SELECT NAME FROM Student WHERE id<3 OR age>26; -- COUNT 用来统计记录的条数 语法 SELECT COUNT(*) FROM 表名; SELECT COUNT(*) FROM Student; -- 统计成绩大于 60 的学生有多少个? SELECT COUNT(*) AS '人数' FROM student WHERE mScore>60; -- SUM 求和 语法 SELECT SUM(字段名)FROM 表名; SELECT SUM(age) FROM Student; -- 统计一个班的平均年龄 SELECT SUM(age)/COUNT(*) FROM Student; -- AVG 求出某个字段全部值的平均值 语法 SELECT AVG(字段名) FROM student; SELECT AVG(age) FROM Student; -- MAX 最大值 语法 SELECT MAX(字段名) FROM student; SELECT MAX(age) FROM Student; -- MIN 最小值 语法 SELECT MIN(字段名) FROM student; SELECT MIN(age) FROM Student; -- 排序查询 语法 SELECT 字段名 1 FROM 代表 ORDER BY 字段名 1; 默认的排序是升序的 SELECT NAME FROM Student ORDER BY mScore; SELECT * FROM Student ORDER BY mScore ASC;-- ASC 升序排列 SELECT * FROM Student ORDER BY mScore DESC;-- DESC 降序排列 -- 分组操做 语法 SELECT 字段名 1,字段名 2 FROM 表名 GROUPBY 字段名 1,字段名 2; -- 注意:该字段显示分组的第一条数据 SELECT*FROM student GROUP BY age; -- 只显示某一字段的值不一样的数据 -- 查询班级各个年龄段学生个数 SELECT age,COUNT(*) AS '人数'FROM student GROUP BY age; -- GROUPBY 和 HAVING 关键字一块儿使用 -- HAVING 关键字和 WHERE 关键字做用相同,区别在于 HAVING 关键字后能够跟聚合函数, WHERE 关键字不能 -- 将 student 表按照 mscore 字段进行分组查询,查询出 mscore 字段值之和小于 150 的分组 SELECT SUM(mscore),age FROM student GROUP BY mScore HAVING SUM(mscore)<150; -- LIMIT 限制查询结果的数量 语法 SELECT 字段名 FROM 表名 LIMIT 记录数; SELECT * FROM Student LIMIT 4; SELECT * FROM Student LIMIT 4,5;