MySQL学习笔记(一)—数据库基础
一、数据库概述
1.数据库的组织结构
(1)数据库就是用来存放信息的仓库。
(2)数据库里的数据集合都存放在数据表(table)里。
(3)数据表由数据行(row)和数据列(column)构成。
(4)一个数据行就是数据表里的一条记录。
二、数据库设计的三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
1.第一范式(确保每列保持原子性)
如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式。
例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。
2.第二范式(确保表中的每列都与主键相关)
如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式。
例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。
3.第三范式(属性不依赖于其它非主属性,消除传递依赖)
简而言之,第三范式就是属性不依赖于其它非主属性。
三、数据库基本操作
1.创建表
格式: create table tb_name(column_specs);
tb_name: 数据表名字。
column_specs: 数据表各个数据以及各种索引(如果有的话)。
CREATE TABLE president
(
last_name VARCHAR(15) NOT NULL,
first_name VARCHAR(15) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(2) NOT NULL,
birth DATE NOT NULL
);
2.查看表结构
格式: describe tb_name; 或 desc tb_name;
DESCRIBE president;
结果:

3.添加数据
(1)一次性的列出全部数据的值
格式: insert into tb_name values(...)
关键字values后面的括号必须为数据表全体数据列准备好对应的值,这些值的顺序也表存储的顺序一致。
还可以一次性插入多个数据行,格式如下。
格式: insert into tb_name values(...),(...),...;
INSERT INTO president VALUES('Tom','A','China','Bj','1992-10-30');
INSERT INTO president VALUES('Jerry','B','China','SH','1991-10-31'),('Li','B','China','BJ','1991-11-11');
结果:

(2)给出数据列的名字再列出它的值
这种适合与只有少数几个数据列需要有初始值的情况。
格式: insert into tb_name (name1,name2,...) values (value1,value2,...);
4.查询数据
(1)推荐明确指定列名
格式: select column_1,column_2,... from tb_name;
使用'*'来无条件的地获取所有列数据,当然简单,但是会产生几个问题。如果针对拥有很多列的表情况,那些不需要的列就会浪费很多内存。
SELECT last_name,city,birth FROM president;
结果:

(2)条件检索
如果想获取与特定条件一致的记录必须使用where语句。
SELECT last_name,city,birth FROM president WHERE birth >= '1991/10/31';


(3)模糊检索
模糊检索就是以列中是否有指定字符串为条件的检索。
SELECT last_name,city,birth FROM president WHERE last_name LIKE 'T%';
T%: 代表以T开头的所有字符串。
%T: 代表以T结尾的所有字符串。
%T%: 代表所有包含T的所有字符串。
(4)NULL条件
不是使用=运算符,必须得使用 is。
SELECT last_name,city,birth FROM president WHERE birth IS NULL;
结果:

(5)多个条件表达式
AND运算符是左右都为True返回True。
OR运算符是只要有一个为True时返回True。
NOT: 求反值的运算符。

运算符的优先级: NOT---AND---OR
所以应该这样写。
SELECT name,birth,sex FROM customer WHERE (birth<= '1976-01-01' OR birth >= '1980-01-01' ) AND sex='1';
(6)结果排序
使用order by语句进行数据的排序。

(7)取得指定区间的

SELECT name, age,address FROM person LIMIT 2;
结果:

limit 2: 是从开始取出两个数据。要取出2、3行数据,使用limit 1,2。即[开始位置,数量],开始位置从0开始。
SELECT name, age,address FROM person LIMIT 1,2;
结果:

原则上limit语句是要与order by语句同时使用的,如果没有指定排序方式,数据库就会按照随机的顺序将数据取出。
(7)数据分组
group by通常与统计函数一起使用。


我想列出每个部门最高薪水的结果。
SELECT dep,MAX(salary) AS MaxSalary FROM person GROUP BY dep;
结果:

MySQL学习笔记(一)—数据库基础的更多相关文章
- MySQL学习笔记01_数据库基础知识
01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...
- SQL学习笔记之 数据库基础(一)
数据库基础 数据库系统的组成:由数据库,数据库管理软件,数据库管理员DBA,支持数据库系统的硬件和软件组成,其中数据库管理员是对数据库进行规划.设计.维护.和监视的专业管理人员,在数据库系统中起着非常 ...
- MySQL学习笔记02_数据库和表的基本操作
02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...
- MySQL学习笔记_8_SQL语言基础复习
SQL语言基础复习 一.概述 SQL语句注释方式 1)以"#"开头直到行尾的所有内容都是注释 2)以"--"(--后还有一个空格)开头直到行尾的所有内容都是注释 ...
- 数据库MySQL学习笔记高级篇
数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
随机推荐
- SQL中的join连接查询
inner join(交集 ,自然连接, 简写成join) 是最普通的连接查询,相当于早期根据where条件连接的查询 outer join(并集或部分并集,左表 + 右表) le ...
- jvm系列(八):jvm知识点总览-高级Java工程师面试必备
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...
- Android通过Apk插件调起微信支付
App对接微信调起微信支付需要在微信平台注册,鉴别的标识就是App的包名,所以将申请的包名单独打包成一个Apk文件,则在其他的App调起此Apk的时候同样可以起到调用微信支付的功能.这样就实现了调起微 ...
- c#之循环效率
很多人在保存数据时候对于使用数组.集合等?然后遍历数据的时候是for.froeach? 下面我就写一个小例子进行测试看看,话不多说,直接用数据说话. 1.构建数据分别是数组.集合构建,数据类型分别是值 ...
- Hibernate一级缓存(基于查询分析)
首先我们应该弄清什么是hibernate缓存:hibernate缓存是指为了降低应用程序对物理数据源的访问频次,从而提高应用程序的运行性能的一种策略.我们要将这个跟计算机内存或者cpu的缓存区分开. ...
- iOS 注册密码加密 添加了时间戳 遇到的问题...
今天项目 遇到一个事故,我本想用 一个形容这个事故的adj 算了 既然 叫事故 已经能表达我们处于的一种状态, 是这样的: 有小部分用户反应 app无法注册 总提示密码错误的情况 实际 该步骤 已经 ...
- Debian/Ubuntu安装Oracle客户端TNS
本文作为新手在Linux上部署Java程序的必经之路的Oracle客户端配置,请高手绕道. 确定服务器版本 首选确定你的Oracle服务器版本,以便下载相应的客户端.查看的sql如下: select ...
- Java面试03|并发及锁
1.synchronized与Lock的区别 使用synchronized这个关键字实现的同步块有一些缺点: (1)锁只有一种类型 (2)线程得到锁或者阻塞 (3)Lock是在Java语言层面基于CA ...
- 九度oj题目1207:质因数的个数
题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1&l ...
- 如果服务器不能把编码格式改成UTF8怎么办?(20161113)
//数组内容的编码格式:utf8 /* 如果服务器不能把编码格式改成UTF8 则在方法里的执行sql语句之前输入下面三段代码就可以使得返回的数组的编码格式为UTF8 $conn->query(' ...