MySQL

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。

SQL(Structured Query Language)

事务的四个特性ACID

ACID,是指数据库管理系统(DBMS)在写入/更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具有的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

范式

常用(第一范式-->BC范式)

对指定列的结果集进行排序。

SELECTcolumn_name, aggregate_function(column_name)FROMtable_nameWHEREcolumn_name operator valueGROUP BY column_name

聚合函数(Aggregate Functions)

Average: avg

Minimum: min

Maximum: max

Total: sum

Count: count

聚合函数会忽略空值。

DDL和DML

嵌套子查询(Nested Subqueries)

in, all, exists, some, any (可以相互转换)。

数据库连接池是什么意思?

像打开关闭数据库连接这种和数据库的交互可能是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。连接请求由池中的连接提供。在连接使用完毕以后,把连接归还到池中,以用于满足将来更多的请求。

MySQL

mysql 使用的数据类型分为三类: 数值类型,日期和时间类型,字符类型。

Software

installation (on raspbian as an example)

sudo apt-get install mysql-server

login with password prompt

mysql -u root -p

show database; # list databases

use db-name; # use a database

show tables; # list table for current database being used

Basic CRUD

CREATE DATABASE demo; # create a database named demo;

# 创建一个表tutorials_tbl

CREATE TABLE demo.tutorials_tbl(

tutorial_id INT NOT NULL AUTO_INCREMENT,

tutorial_title VARCHAR(100) NOT NULL,

tutorial_author VARCHAR(40) NOT NULL,

submission_date DATE,

PRIMARY KEY ( tutorial_id )

);

# 查询

SELECT tutorial_id, tutorial_title, tutorial_author FROM tutorials_tbl;

# 更新

UPDATE tutorials_tbl SET tutorial_title="Learning JAVA" WHERE tutorial_id=3;

# 删除

DELETE FROM tutorials_tbl WHERE tutorial_id=3;

# 删除表

DELETE FROM tutorials_tbl;

DROP TABLE tutorials_tbl; # drop表

DROP DATABASE demo; # drop数据库demo

例子

在 db_SPJ 中创建以下四个关系(表)

供应商表 S(SNO,SNAME,STATUS,CITY)

零件表P(PNO,PNAME,COLOR,WEIGHT)

工程项目表 J(JNO,JNAME,CITY)

供应情况表 SPJ(SNO,PNO,JNO,QTY)

 每一张表都必须有主键。

 需要使用外键的表必须使用外键。

 根据需要适当采用唯一值、检查、非空和默认值约束。要求这四种约束在 S、P 和 J 表这三张表中至少使用一次。

 根据主键、外键、唯一值、检查、非空和默认值六种约束的特性,设计适 当的方案对 S、P 和 J 表中的这六种约束进行检验。方案自定。一种约束进行检验一次即可

使用 `SHOW CREATE DATABASE db_SPJ;`来查看更多信息(类似地,可以用它来查看创建表的信息)

DDL:

1 USEdb_SPJ;2

3 CREATE TABLE S(SNO char(10) ,SNAME char(10) not null,STATUS int check(STATUS >0),CITY char(30) not null, primary key(SNO)) ;4 CREATE TABLE P(PNO char(10) UNIQUE,PNAME char(20) not null,COLOR char(10) default '白',WEIGHT int CHECK(WEIGHT >0), primary key(PNO));5 CREATE TABLE J(JNO char(10) UNIQUE,JNAME char(20) not null,CITY char(30) not null, primary key(JNO));6 CREATE TABLE SPJ(SNO char(10),PNO char(10),JNO char(10),QTY int, primary key(SNO,PNO,JNO));7 ALTER TABLE SPJ ADD CONSTRAINT FK_SNO foreign key(SNO) references S(SNO) ON DELETE CASCADE;8 ALTER TABLE SPJ ADD CONSTRAINT FK_PNO foreign key(PNO) references P(PNO) ON DELETE CASCADE;9 ALTER TABLE SPJ ADD CONSTRAINT FK_JNO foreign key(JNO) references J(JNO) ON DELETE CASCADE;

View Code

插入记录:

1 INSERT INTO S VALUES

2 ('S1','精益',20,'天津'),3 ('S2','盛锡',10,'北京'),4 ('S3','东方红',30,'北京'),5 ('S4','丰泰',20,'天津'),6 ('S5','为民',30,'上海');7

8 INSERT INTO P VALUES

9 ('P1','螺母','红',12),10 ('P2','螺栓','绿',17),11 ('P3','螺丝刀','蓝',14),12 ('P4','螺丝刀','红',14),13 ('P5','凸轮','蓝',40),14 ('P6','齿轮','红',30);15

16 INSERT INTO J VALUES

17 ('J1','三建','北京'),18 ('J2','一汽','长春'),19 ('J3','弹簧厂','天津'),20 ('J4','造船厂','天津'),21 ('J5','机车厂','唐山'),22 ('J6','无线电厂','常州'),23 ('J7','半导体厂','南京');24

25 INSERT INTO SPJ VALUES

26 ('S1','P1','J1',200),27 ('S1','P1','J3',100),28 ('S1','P1','J4',700),29 ('S1','P2','J2',100),30 ('S2','P3','J1',400),31 ('S2','P3','J2',200),32 ('S2','P3','J4',500),33 ('S2','P3','J5',400),34 ('S2','P5','J1',400),35 ('S2','P5','J2',100),36 ('S3','P1','J1',200),37 ('S3','P3','J1',100),38 ('S4','P5','J1',100),39 ('S4','P6','J1',100),40 ('S4','P6','J4',100),41 ('S5','P2','J4',100),42 ('S5','P3','J1',200),43 ('S5','P6','J2',200),44 ('S5','P6','J4',500);

View Code

实现以下查询(Transact-SQL):

[1] 找出所有供应商的姓名和所在城市。

[2] 找出所有零件的名称、颜色和重量。

[3] 找出使用了供应商 S1 所供应的零件的工程号码。

[4] 找出工程 J2 使用的各种零件的名称和数量。

[5] 找出上海供应商供应的所有零件的零件号码。

[6] 找出使用了上海供应商供应的零件的工程名称。

[7] 找出供应工程 J1 零件的供应商号 SNO。

[8] 找出供应工程 J1 零件 P1 的供应商号 SNO。

[9] 找出供应工程 J1 红色零件的供应商号 SNO。

[10] 找出没有使用天津供应商生产的红色零件的工程号 JNO。

[11] 求所有有关 project 的信息。

[12] 求在北京的所有 project 的信息。

[13] 求为 project(工程)J1 提供 part(零件)的 supplier(供应商)的号 码。

[14] 求数量在 300 到 750 之间的发货。

[15] 求所有的零件颜色 / 城市对。注意:这里及以后所说的“所有”特指 在数据库中。 [16] 求所有的 supplier-number / part-number / project-number 对。其中所 指的供应商和工程在同一个城市。

[17] 求所有的 supplier-number / part-number / project-number 对。其中所 指的供应商和工程不在同一个城市。

[18] 求由北京供应商提供的零件的信息。

[19] 求由北京供应商为北京工程供应的零件号。

[20] 求满足下面要求的城市对,要求在第一个城市的供应商为第二个城 市的工程供应零件。

[21] 求供应商为工程供应的零件的号码,要求供应商和工程在同一城市。

[22] 求至少被一个不在同一城市的供应商供应零件的工程号。

[23] 求由同一个供应商供应的零件号的对。

[24] 求所有由供应商 S1 供应的工程号。

[25] 求供应商 S1 供应的零件 P1 的总量。

[26] 对每个供应给工程的零件,求零件号、工程号和相应的总量。

[27] 求为单个工程供应的零件数量超过 350 的零件号。

[28] 求由 S1 供应的工程名称。

[29] 求由 S1 供应的零件颜色。

[30] 求供应给北京工程的零件号。

[31] 求使用了 S1 供应的零件的工程号。

[32] 求 status 比 S1 低的供应商号码。

[33] 求所在城市按字母排序为第一的工程号。

[34] 求被供应零件P1 的平均数量大于供应给工程J1 的任意零件的最大 数量的工程号。 [35] 求满足下面要求的供应商号码,该供应商供应给某个工程零件 P1 的 数量大于这个工程被供应的零件 P1 的平均数量。

[36] 求没有被北京供应商供应过红色零件的工程号码。

[37] 求所用零件全被 S1 供应的工程号码。

[38] 求所有北京工程都使用的零件号码。

[39] 求对所有工程都提供了同一零件的供应商号码。

[40] 求使用了 S1 提供的所有零件的工程号码。

[41] 求至少有一个供应商、零件或工程所在的城市。

[42] 求被北京供应商供应或被北京工程使用的零件号码。

[43] 求所有 supplier-number / part-number 对,其中指定的供应商不供应 指定的零件。

[44] 向 p 表追加如下记录(P0,PN0,蓝)。

[45] 把零件重量在 15 到 20 之间的零件信息追加到新的表 p1 中。

[46] 向 s 表追加记录(s1, n2, ’上海’)能成功吗?为什么?

[47] 把 s、p、j 三个表中的 s#,p#,j#列进行交叉联接,把结果追加到 spj1 表中(如果只考虑下面表格中的原始数据,应该在 spj1 表中追加多 少条记录?你是如何计算记录条数的?)。

[48] 向 spj 表追加(s6,p1,j6,1000)本操作能正确执行吗?为什么?如果 追加(s4,p1,j6,-10) 行吗?如果现在想强制追加这两条记录该怎么

办?

[49] 把 s1 供应商供应的零件为 p1 的所有项目对应的数量 qty改为 500。

[50] 把 qty值大于等于 1000 的所有供应商城市更改为‘北京’ 。

[51] 把 j1 更改成 j7,本操作能正确执行吗?为什么?如果改成 j0 呢?spj 表中记录有何变化?为什么?

[52] 把零件重量低于 15 的增加 3,高于 15 的增加 2。

[53] 删除为 j7 工程供应零件的所有供应商信息(如果建立外键时没有带 级联删除选项,本操作能正确执行吗?为什么?)

[54] 删除 p1 表中所有记录。

[55] 删除供应商和工程在同一个城市的供应商信息。

# DML on spj database

USEdb_spj;

#[1]

SELECT sname,city FROMs;

#[2]

SELECT pname,color,weight FROMp;

#[3]

SELECT jno FROMspjWHERE sno = 'S1';

#[4]

SELECT p.pname, spj.qty FROMspjLEFT JOIN p ON (spj.pno =p.pno)WHERE spj.jno = 'J2';

#[5]

SELECT DISTINCT spj.pno FROMspjWHERE spj.sno IN (SELECT sno FROM s WHERE s.city='上海');

#[6]nested querySELECT DISTINCT j.jname FROMjRIGHT JOIN spj ON(j.jnoin (SELECT jno FROM spj WHERE spj.sno IN (SELECT sno FROM s WHERE s.city='上海')));

#[7]

SELECT DISTINCT sno FROMspjWHERE spj.jno='J1';

#[8]

SELECT sno FROMspjWHERE jno='J1' AND pno='P1';

#[9]

SELECT DISTINCT sno FROMpINNER JOIN spj ON p.pno=spj.pnoWHERE p.color='红';

#[10]

SELECT DISTINCT spj.jno FROMspjWHERE spj.sno NOT IN (SELECT sno FROM s WHERE s.city='天津')OR spj.pno NOT IN (SELECT pno FROM p WHERE p.color='红');

#[11]

SELECT SPJ.JNO,JNAME,CITY,SNO,PNO,QTY FROMJinner join SPJ on J.JNO=SPJ.JNOORDER BYSPJ.JNO;

#[12]

SELECT SPJ.JNO,JNAME,CITY,SNO,PNO,QTY FROMJinner join SPJ on J.JNO=SPJ.JNO WHERE CITY='北京'

ORDER BYSPJ.JNO;

#[13]

SELECT sno FROMspjWHERE spj.jno = 'j1';

#[14]

SELECT SNO,PNO,JNO FROM SPJ WHERE QTY BETWEEN 300 AND 750;

#[15]

SELECT DISTINCTp.color, s.cityFROM (p INNER JOIN spj ON p.pno=spj.pno)INNER JOIN s ON s.sno =spj.snoORDER BY color ASC;

#[16]

select distinct spj.sno,spj.jno,spj.pno froms,spjright join j on spj.jno=j.jnowhere s.sno=spj.sno and s.city=j.city;

#[17]

select distinct spj.sno,spj.jno,spj.pno froms,spjright join j on spj.jno=j.jnowhere s.sno=spj.sno and s.city!=j.city;

#[18]

select * frompwhere p.pno in(select spj.pno from spj where spj.sno in(select s.sno from s where s.city='北京')

);

#[19]

select distinct spj.pno froms,spjright join j on spj.jno=j.jnowhere s.sno=spj.sno and s.city='北京' and s.city=j.city;

#[20]

select distinct s.city, j.city froms,spjright join j on spj.jno=j.jnowhere s.sno=spj.sno;

#[55]

DELETE FROM S WHERES.SNOIN (SELECT SPJ.SNO FROM (SPJ INNER JOIN S ON SPJ.SNO=S.SNO) INNER JOIN J ON SPJ.JNO=J.JNOWHERE S.CITY=J.CITY) ;

View Code

Reference

http://blog.webfsd.com/article-7.html

mysql中pi是什么意思_MySQL 基础知识与常用命令相关推荐

  1. 【Java从0到架构师】Linux 基础知识、常用命令

    Linux 基础知识.常用命令 Linux 基础知识 内核和发行版 常见的 Linux 发行版 Linux 的应用领域 Linux 与 Windows 的区别 Linux 常用命令 *系统目录结构 s ...

  2. Redis基础知识+安装+常用命令使用

    Redis NoSql概述 为什么用NoSql 单机MySQL的时代! 上古90年代,更多的是静态网页,动态交互类型的网站不多.一个基本网站访问量一般不会太大,单个数据库可以轻松应付. 现如今的大数据 ...

  3. Linux 1:基础知识和常用命令

    文章目录 一.Linux基础 1. 为什么要学习Linux? 2. Linux学习方法 二.Linux历史介绍 三.Linux简介 1. Linux和window系统有什么区别? 2. Linux的内 ...

  4. Git的基础知识和常用命令

    源代码的管理从最原始的手工备份到后来的CVS, SVN和GIT的应用,经历了一个漫长的过程.GIT大概是除了linux内核以外, Linus Torvalds对信息技术发展的另一重要贡献啦. GITH ...

  5. Git基础知识与常用命令

    一:相关概念: 1:工作区(Working Directory): 就是你在电脑里能看到的目录 2:版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. ...

  6. zookeeper基础知识以及常用命令

    zookeeper简介 1.中间件,提供协调服务. 2.作用于分布式系统,发挥其优势,可以为大数据服务. 3.支持java,提供Java和c语言的客户端API. 什么是分布式系统 1.很多台计算机组成 ...

  7. Linux基础知识、常用命令

    一.Linux文件与目录管理 绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录. 相对路径: 路径的写法,不是由 / 写起,例如由 /usr/share/do ...

  8. Redis(三):Redis基础知识与常用命令

    1.基础命令 Redis默认有16个数据库,用的是第0个数据库,可以使用select进行切换数据库,使用DBSIZE查看DB大小(只针对当前数据库). 使用keys * 查看当前数据库下所有的key, ...

  9. Git—基础知识及常用命令(系列一)

    1.集中式和分布式区别 1.1 集中式   集中式版本控制系统,版本库是集中存放在中央服务器的.用户都是用自己的电脑,要先从中央服务器取得最新的版本,然后coding,最后把代码推送到中央服务器.   ...

最新文章

  1. 框架:SpringMVC中Interceptor拦截器的两种实现
  2. java中获取时间6,Java中获取指定日为星期几及其他日期操作(2)
  3. 一步一步学Silverlight 2系列(3):界面布局_转载
  4. 批量提取视频文件信息(文件大小及时长)并统计
  5. 如何使用Aimersoft iMusic for Mac从 Android 手机备份歌曲到 PC/Mac?
  6. 中国移动也要办电竞大赛了!联合腾讯网易办首届电竞大赛
  7. python global nonlocal
  8. (6)matplot去掉坐标轴
  9. vue学习笔记-2-模板语法中得指令
  10. 盘点那些年,被Oracle收购的公司
  11. 栈的应用:火车调度问题
  12. 江湖救急笔记——计算机网络
  13. 【LeetCode】《剑指Offer》第Ⅴ篇⊰⊰⊰ 39 - 47题
  14. web在线编辑word,excel,pdf插件-----WebOffice 文档控件API
  15. 在STM32上实现NTFS之4:GPT分区表的C语言实现(1):主GPT表头的实现
  16. 云图数字iOS客户端
  17. DC有刷电机驱动硬件电路
  18. 美与物理学(杨振宁)
  19. mysql优化——mycat数据库中间件
  20. 诺基亚的驱动力:研发与产业族群

热门文章

  1. YOLOv5在建筑工地中安全帽佩戴检测的应用(已开源+数据集)
  2. mysql6.10,MySQL经典50题-第6-10题
  3. SpringBoot实现国际化
  4. 复习---使用基础语法实现栈及迭代
  5. Bootstrap-select使用说明
  6. org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the
  7. java 获取子线程_Java 主线程获取子线程返回结果
  8. docker 删除image_如何用两个小时入门 Docker?
  9. springboot urlresource_Spring Boot上传文件+部署到Tomcat
  10. oracle 31693,ORACLE expdp备份与ORA-31693、ORA-02354、ORA-01555