新普金娱乐网址


草本中中原人民共和国,江西大方天麻药材宝地

濮陽,蔬食好味

越南峴港、會安四天三夜行程

  • 四月 13, 2019
  • 地理
  • 没有评论

           

 

中标報名的前叁名送回程的中港車四个人車接送到布Rees班灣口岸,每回只限1台噢

时间:2016-3-28 19:40

留意:此團只接受多个人以上組團報名,三人以下不帶團。

 

每人均收費約¥陆仟人民幣/小童5500人民幣(包涵旅遊保險、簽證、機票、旅舍、接送機、車費、入場門票、午餐、晚餐全包只限中西餐不包涵海鮮餐)要求兌換越南社会主义共和国幣亦可幫忙兌換

 

費用會因分化時段差别酒店和機票有浮動。

上学就怕心浮气躁,有个三脚猫的素养,就以为何都会了。                  
                                                                       
                                                        ——  赠自个儿

PS:費用已带有入場門票,但景點裡面包车型客车費用需自費。本人帶團有建議的门阀都能够踴躍參與商讨,時間自由,我们盡量协作,還有;本團不必要給導遊費,所要求的不要求的費用已列明自身看清楚哈,若親們覺得小编們棒棒噠也能够給小費的,自个儿看著辦!哈哈哈哈藍

 

最後;這次是BeBe和Candy第三遍策劃的知心人帶團,所以有照顧不全面包车型客车或然有更加好的建議都BeBe和Candy說的!謝謝哦~

新手不挨训,怎么发展。

由於Candy是越南社会主义共和国本土正妹

 

由地面人帶你們遊玩越南社会主义共和国能够下降妳們被騙的機會

 
——数据库的基本概念

行程表等確定時間待定

一、定义:
    一、数据库指的是以一定艺术存款和储蓄在一块、能为多个用户提供共享,具有尽大概小的冗余度的性状,是与应用程序相互独立的数量集合。

以下先介紹旅遊的景點和小吃摊

    二、数据库是遵从某种数据结构(层次性,网状型,关系型)协会起来并存放二级存款和储蓄器(外部存款和储蓄器)中的数据集合。那种数量集合具有如下特征:尽或然不另行,以最优办法为某些特定组织的有余应用服务,其数据结构独立于选取它的应用程序,对数据的增加和删除改查由联合软件举行管制和控制。

對於越南社会主义共和国,借使你的影像還只停留在下龍灣或胡志明,这自然會讓你錯過很多绝对美丽麗的景点。想要二次擁有满世界少數未被人為破壞的最美海灘與法式罗曼蒂克風情…

二、数据库发展阶段:
    1、人工管理阶段
    2、文件系统阶段
        文件共享性差,不简单同步。
    3、数据库系统阶段

当年,到被譽為「世界六大最美的海灘」的峴港玳藍灣,絕對是你最棒的旅遊選擇!

三、数据库类别:
    1、层次模型(树状结构)
    二、网状模型(唯有概念,尚未得以实现)
    叁、关系模型(壹数据库中,多个表就是1个涉及)

越南社会主义共和国峴港

四、常见的关系型数据库:
    1、SqlServer:
        微软旗下数据库
        适用于Windows平台
        服务器版须求付费
    2、MySQL
        属于Oracle公司
        品质较高
        社区版免费
        体量小、速度快、总体拥有花费低
        开源
        适用平台:
            Windows
            Linux
            Unix
    3、DB2
        IBM公司旗下数据库
            IBM一九陆6年第二次建议关系型数据库模型。
            IBM1九7伍年建议了SEQUEL语言,即SQL语言的前身。

「峴港(保加利亚语:Thành phố Đà
Nẵng)」被美國國家地理評為「人生必去的50個地方之壹」,加上他也有「東方马尔代夫」的美喻,所以在峴港飯店的選擇,當然是以「臨近海邊」的為首選囉!峴港,位於越南社会主义共和国之中,古都順化的左近。區屬中南沿海地區。位列越南社会主义共和国第四大城市,次於汉堡、河內市和海防市。

5、从五个地点学习数据库

當大多数的遊客都忽视了這個越南社会主义共和国第四大城市而只記得順化的時候,縣港正發揮著它的魔力,這裡是越南社会主义共和国經濟重鎮,還結合了大城市、美麗的海灘和晚餐好吃的食物於1身。很多熱錢湧入到這裡,峴港有樹木成蔭的大街、美麗的橋樑和海邊的渡假宗旨。

    1、数据库是哪些存款和储蓄数据的

峴港龍橋

        字段  记录  表
约束(主键、外键、唯一键、非空、check、default、触发器)

龍橋的白昼和深夜都很不一樣,因為白天你會看到是1座很平时的橋,晚間亮燈後,你會發現裡頭的小巧思。

    二、数据库是什么样操作数据的

龍橋最大的巧思在眼睛的設計,白天不太能察覺,可是亮燈後,你就足以發現,原來龍橋的眸子是心形的。

        insert、update、delete、T-Sql、存款和储蓄进程、函数、触发器

Cầu 卡宴ồng Dragon
Bridge於二零一零年修筑,為慶祝越戰結束38週年而建立,除了有意味民族獨立的意涵外,獨特的建築工藝與造型,使它登上了CNN報導,並稱它為峴港都市的新成功象徵。

    三、数据库是什么样展现数据的

龍橋在2013啟用,橋邊的漢江同時設有行人徒步區。燈飾也是特別的心形設計,所以您要稱他為「情人徒步區」應該也足以的。許多情侶也特別在徒步區鎖上愛情鎖,希望本人能够抓住幸福。

        select(重点的主要)

Cho Con Kinh

——数据库是何等化解多少存款和储蓄难点的

Cho Con Kinh是峴港充足道地的傳統市場

表的有关数据

峴港夜市

    字段(列)

峴港夜市

        三个事物的某二个静态特征(属性)。

峴港的街角

    记录(行)

雲霧巴拿山

        字段的组合,表示的是多少个有血有肉的东西

图雲霧巴拿山

    表

巴拿山Ba
Nahill位於峴港以西40公里處,海拔14八7公尺,氣溫長年較山下低陆’C至八’C,清涼又舒適。早於20世紀初,這裡已是法國人的避暑勝地,近年來當地政党將巴拿山双重發展,构建成1個休閒度假區,在顶峰大興土木,不但建大佛、寺廟,還重修昔日法國人的酒窖,闢建室內機動遊樂場及重型空中城堡度假村等,儼如一個空间樂園。乘纜車登山,路程要分兩段,第三段是2010年被列入「金氏世界紀錄」的「全世界最長及落差最大的纜車」,總長約504二公尺,由設在景區进口的一號纜車站出發,前往海拔1330多公尺的二號Ba
Na纜車站,全程時需21分鐘。纜車開始攀升的拾分鐘,腳下盡是樹林、山澗,之後開始變得雲霧繚繞,感覺如騰雲駕霧;下車後,再乘接駁小型巴士到过去法國殖民時期在山上興建的隱蔽酒窖參觀,品嚐當地釀製的利口酒,然後沿山路而下,到大佛和靈應寺參拜,那裏有個數10公尺高、用茄皮紫丽水石建造的釋加牟尼坐像,近六柱预测當雄偉,佛像下刻了多幅石雕畫,釋迦俯視含笑的神色,令人感覺親切。看完大佛回到BaNa纜車站再從站內小通道前往第壹纜車站,乘坐第1段纜車到山頂,先到嶺主靈祠跟山神打個招呼,行個大運,再到號稱是世界第贰大的室內機動遊樂場Fantasy
Park玩個夠。

        记录的构成,表示的是一模壹样体系事物的晤面

峴香港大学教堂

    表和字段、记录的关联

峴香港大学教堂Da Nang
Cathedral,建於1⑨二叁年法國統治期間,外表呈粉青蓝。峴港现今最大的宗派建築物,正門以7座尖塔為外形,每座尖塔上均有显著的十字架。雖然該教堂共設有伍島尖拱門,不过平時貌似都用側門,Chua
Tran
Phu街的大門經常關閉,只有特別的節目才會開啟使用。整座教堂的基本点建築材质雖為木材,可是看起來絲毫不失莊嚴和神聖。

        字段表示的是东西的性质

五行山

        记录表示的是事物本人

高峰向東築有希望海台(Wai Hai Dai),能够眺望面向西开中学國海的中國灘(China
Beach),往西則建开始展览江台(Vong Giang
Dai),能够眺望翰江和其余石灰岩石峰。王海台和望江台均建於阮朝明命年間(公元1820-1840年)。除了觀景台,水山上边有众多寺廟和洞窟,為昔日占婆族佔領時是崇拜孔雀之国神祇的聖地,近日被改造為鎮山廟宇。下山後還能於山腳下欣賞到由當地藝術家所創造的石雕人文風上创作的讨论藝術村。

        表是事物的聚合

雕刻藝術村

 

靈應寺

    列

诚如去過峴港海灘的人,都只遠遠看過在乌龙茶半島腳下佇立著的赫赫的觀音像,卻不亮堂他的來歷。峴港是商丘都市,很多人都是打漁為業,漁民們每一遍出海前總要向海神祈求平安定祥和祝福,希望遇上好天氣,滿載而歸。相傳在阮朝明命帝時期,在現今靈應寺腳下的沙灘上,不知從哪裡衝來了壹尊佛像,早起打魚的漁民看見了,認為這是壹個好兆頭,自此峴港的漁民一直获得神靈的庇護,出海時都是風平浪靜。後來人們就在此处修建了靈應寺和這尊高達
六七 米的越南社会主义共和国最高佛像——觀音像。

        字段的另一名号

會安

    属性(列)

會安Hoi
An,有走入歷史如身在博物館的感覺,位於文航河邊。早期是上天貿易往來之處,國際貿易的源起可以回溯到107世紀。會安的文化深受中國、东瀛和歐洲影響,建築也都保存了這些文化。漫遊在狹小的巷弄內,讓人有重回150年前的感覺。會安吸重力不僅止於美麗的建築,左近的海灘和湛遺址都值得讓人壹探究竟,它也是1個美食古都。

        字段的另一种称谓

日本橋

    元组(行)

日本橋

        行、记录的另一种称谓

日本橋

 

扶桑橋又稱「來遠橋」,西元15玖三年興建,由新加坡人修筑的木造拱橋。當時這座橋是連結东瀛與中國的城區。橋上有屋頂可供遮蔽用,北側建有小寺廟。根據某個传说的說法,這座橋是猴年興建,狗年形成,因而兩側出入口分別由猴子與狗來共同守護,相傳它們是东瀛太古敬意的吉祥物。

——MySQL数据库的下载和装置

廣紹會館

安装到位后装置数据库字符集为UTF-八:
    查看字符集:show variables like ‘character%’;
    修改字符集:
        打开my.ini文件,在ini文件中#代表注释。
        添加:default-character-set=utf8
                  character-set-server=utf8
    修改完结后重启服务器。

廣紹會館

壹、MySQL安装成功后会在八个目录中贮存文件
    >   D:\Program Files\MySQL Server 5.6
        DBMS管理程序
    >   C:\ProgramData\MySQL Server 5.6\data
        DBMS数据库文件,卸载数据库时不会删除该目录,须要团结手动删除。

建於1786年,此會館由廣東经纪人所興建的,正殿供奉關公,入口處兩側繪有桃園結義和關公千里送嫂的彩繪圖案,會館內還有一座華麗的水池,用瓷磚鑲出精緻的龍型圖案。漫步於會安古村落,能够观望民宅、會館、寺廟、市場、碼頭等差异樣式的建築集中於此,簡直就是越南社会主义共和国开中学古時期的「復刻版」。

二、MySQL首要文件
    >   D:\Program Files\MySQL Server 5.6\bin\mysql.exe
        客户端程序,用来操作服务器,但不可能不确定保障服务器已经运维才能接二连三数据库。
    >   D:\Program Files\MySQL Server 5.6\bin\mysqld.exe
        服务器程序,必须先运营它,然后客户端才能接二连三服务器。
    >   D:\Program Files\MySQL Server 5.6\bin\my.ini
        服务器配置文件。

會安古村落

3、C:\ProgramData\MySQL\MySQL Server 5.6\data
    该目录下的每贰个目录都意味一个数据库,例如该目录下有七个mysql目录,表达DBMS中有一个名称叫mysql的databases。
    在各种数据库目录下会有0~N个扩充名称为frm的公文,每个frm文件表示3个table,不要使用文本编辑器打开。

會安古村落

4、my.ini
    配置MySQL的端口:默认为3306,
    配置字符编码:
        *   [client]下安插客户端编码:default-character-set=utf8
        *   [mysqld]下计划服务器编码:character-set-server=utf八
    配置2进制数据大小上限:
        *   在[mysqld]下配置:max_allowed_packet=8M

會安古村落

5、导出数据库及数量
    mysqldump -uroot -pAdmin123 mydb3 >f:\sql1.sql

會安古镇

——MySQL数据库基本操作

會安古村

一、服务器的开发银行与停止
    在services中运营或终止。
    一)开启服务:net start mysql
    二)关闭服务:net stop mysql
    服务器:一直处在监听状态,等待接受命令
二、MySQL客户端登录
    mysql -uroot -p123 -hlocalhost
    >   -u:表示用户名
    >   -p:表示密码
    >   -h:表示主机(IP地址)
        *   root用户能够应用任意IP,普通用户则绑定IP。
三、退出客户端
    exit、quit
3、查看数据库
    查看全体数据库:show databases;
    information_schema:提供访问数据库元数据的办法。
    mysql:与数据库系统服务有关的数码。
    performance_schema:收集服务器数据库品质的参数
    test:用户测试表。
            
查看全数数据库:show databases;
切换来当下数据库:use 数据库名;
查看当前数据库中全数表:show tables;
询问某表中的数据:select * from 表名;

會安古镇Hoi An Old
Town,已為聯合國教科文組織钦命為世界遺產。可以選擇要參觀歷史景點,包括無形文化資產選項,像是傳統的音樂演奏會或是戲劇表演。

——管理数据库

咖啡屋

1、数据库相关概念
    1)数据库 DataBase
        分类:
            针对于系统数据库
                information_schema
                mysql
                performance_schema
                    用于帮忙数据库系统符合规律运营的数据库。
            用户数据库:
                针对于特定类型须求所开创的数据库
        组成:
            逻辑结构:
                数据库中文件的公司结构。
            物理构造:
                存款和储蓄在磁盘上的文本结构。
    二)数据库管理连串 DBMS
        DataBase Management System
        管理数据库的平台:
        服务器
        客户端

纵使沒有去過越南社会主义共和国,也大约有聽過越南社会主义共和国的咖啡呢,在峴港旅行到處都是咖啡,不過壹般集中在峴港的市區,如若你是住在峴港的海邊,这麼想要買手信的話,就不得不回去市區了,一般我们都會去市區的
Big C
超级市场,當然你也足以選擇去當地的市場。這家店很知名,喝上一杯你會無法忘懷那種味道,就連小編BeBe小编不喝咖啡的人,去完越南社会主义共和国卻從此愛上了咖啡。

二、管理措施
        1)可视化管理
            例如navicat管理数据库
        2)SQL语言管理
            Structured Query Language
            针对于数据库操作的语言,程序开发进程中所要求的语言。
            分类:
                DDL:Data Description Language,数据定义语言
                    用于创制,从无到有。

魚餅粉

                    对数据库或表的布局实行操作。

自助餐

                DML:Data Manipulation Language,数据操作语言
                    操作数据库,例如增加和删除改。
                    insert  delete  update 

越南社会主义共和国街邊咖啡

                DQL:Data Query Language,数据查询语言
                    select  查询

AROI麥麥

                DCL:Data Control Language,数据控制语言
                    对用户的创制及授权。
                    revoke  create  table  from  user1

這是小编上次去過的一家AROI
café。咖啡廳相当小,不过卻相當有風味,尤其是二樓的戶外座位。2樓的魔力在於,她讓你身处大巴黎時代的時空錯覺。室內法語爵士繞樑配上俐落的工業風設計,落地窗外卻是30年间的雙層店屋。

                DAC:Data Administrate Command,数据管理命令。

在這裡笔者感触了法國留下的風情萬種。

                TCC:Thing Control Command,事务控制命令。

滴滴咖啡

叁、数据库的管理表达
    1)创立:create database 数据库名;    制造在私下认可data目录下。
    2)删除:drop database 数据库名;

特征小店

——管理表

海鮮大餐

一、表的连锁概念
    关周全据库(Relational DataBase,
酷威DB):正是基于关系模型的数据库,在计算机中,关周到据库是数据和数据库对象的整合关系型数据库基础数据是数据表。

酒店

2、实体
    数据表是由行row和列column组成的贰维表,每行描述一个实体,数据表中的列平常叫做字段,他代表数据表中蕴藏实体的共有属性。
    属性值的分化代表不相同的实业。
    数据表中存款和储蓄的数码正是具有分歧属性的的例外实体的集纳。

酒店

三、数据表的军管
    设计某类实体具有怎样属性(字段)、表结构
        类似于统筹类,该类具有啥样属性。
        依照项目实际供给布署怎么着表,每一种表包括哪些字段。
    对质量有啥样限定标准——约束。

還有很多旅社後續補圖…

    数据类型:
        整型:
            int
                占4个字节。
            tinyint
                占二个字节,在数据库优化的时候能够行使tinyint。
        浮点型:
            float / double
                double(5,
2)表示最多五个人整数,当中必须有四人小数,即最大值为99玖.9玖
        浮点型:
            decimal(6,2)
               
用于开始展览10进制运算,精确度高,不会丢掉二进制数据,常用来表示金额。
                1共陆个人数,小数占3位。
                此时decimal占8个字节。
                在规划数据库时要小心不要浪费空间。 
        日期:
            date:
                占3个字节。
                日期类型,不可能保留时间
                格式:YYYY-MM-DD
                范围:1000-01-01 到 9999-12-31
                假使超出范围,则存款和储蓄0000-00-00
            time:
                占3个字节。
                时间项目,无法保存日期
            datetime:
                占8个字节。
                日期、时间档次,即年月日时分秒
            timestamp:
                占伍个字节,并且能够代表年月日时分秒.
                可以代表飞秒。
                ts timestamp default
CURRENT_TIMESTAMP(那是二个常量,表示系统当下日子。)
                因为timestamp也足以代表年月日时分秒,并且所需空间是datetime的5/10,所以在统一筹划数据库时得以用时间戳表示时间
            year:
                表示年,占一个字节,范围是一九零四-215伍年,即使没有则0000。
        字符:
            char(m)
                m指的是字符数,而不是字节数。
               
定长字符串,数据长度相差钦定长度,会活动补足到钦赐长度。
                最大值为255。
                一般用于保存时间等一定长度字符串。
            varchar
                可变长度字符串类型,最大值为65535。
                会单独行使二个字节保存字符串长度。
        大字符串类型(CLOB):(MySQL独有)
            tinytext:2^8-1B  255
            text:2^16-1B  65535
            mediumtext:2^24-1B  3KB
            longtext:2^32-1B  4GB
        BLOB:(大字节类型)

去越南社会主义共和国旅行有個好處正是越南社会主义共和国的消費水平相對來說較低,去峴港自由行的話最佳還是選擇海邊的酒吧,這樣你翌日想看日出1打開窗戶或走出陽台就足以见见了,而不用起早冥暗走路去海邊,超爽!

    注意:数据库优化
        当每一条记下都是定长数据时,会大幅的滋长数据库的搜寻作用。
        因为每1行的尺寸都以定位的,所以寻找时的定址、寻址越来越快。
        当存在数据浪费和功效增加三种情况还要存在是,以频率为准。(无法浪费太多)
        时间与空间是一对抵触体,无非是时刻换空间,也许空间换时间。
        当数码表中的某一列影响了整机进度并且不恐怕开始展览空中优化时,并且该列修改频率也不高,
        那么能够将该列单独取出存为一张表。
        在开发进程中,数据库优化往往是把频仍用到的消息存储到一张表中,优先思量寻找效能。
        不常用的音讯和相比占据空间的音讯,优先思量空间占据,单独存款和储蓄到此外一张表中。
        并且一般时间并不选用datetime存款和储蓄,而是选择时间戳,因为datetime固然直观,但不便于总结,影响效能。

遇見美好的您

四、SQL管理表结构
    壹)建表语法
        use 数据库名;
        create table [if not exists] 表名
        (
            id int not null,
            name varchar(20) not null
        );

陪伴是最長情的启事

    二)查看表结构
        desc t1;    description描述
        查看表结构。
        show create table t1;
        查看成立表的经过。

小幸運

    三)列的特征
        是还是不是为主键
        是或不是为空
        是还是不是为全自动增加列
        是还是不是有私下认可值

旅程中的每一個好與壞都是經歷,加上旅遊的心理其實也比較放鬆,所以广大作业都看得很開。當然,要是得以圆满的結束最佳,沒有的話,就當作是1個經過囉。
很慶幸……每一趟的旅遊都帶給作者這麽美好的回憶❤️

        以上特征都属于数据表的束缚

    肆)表字段修改
        修改字段定义:
            修改数据类型用modify
            alter table 表名
            modify 字段名 数据类型;
 
        修改字段名用change
            alter table 表名;
            change 旧字段名 新字段名 新数据类型;
 
        扩大字段:
            alter table 表名 
            add 字段名 数据类型 (完整性约束原则)

            /*假定想在首先个职位增添字段,供给在数据类型前面加上first*/
            /*比方想在钦赐地点添加,能够使用after 字段名;  
在该字段之后添加*/

        删除字段:
            alter table 表名 drop 字段名;

        删除表:
            drop table 表名;

伍、管理约束
    概念:
        对二个表中的性质操作的限制叫做约束。
        约束是数据库提供的机关强制数据完整性的一种格局,它是因此定义列的取值规则来爱护数据的完整性。
    数据完整性:
        实体完整性:必要数据表中无法出现重复行(完全相同数据行)
        域完整性:域,范围,其实便是性质,须求列的数据类型,取值范围,特定值等符合规定要求
        引用完整性:供给五个或两个以上表之间的涉嫌,关类别在数值上保持1致。
        自定义完整性:针对于具体表的实际规定。
    约束类型:
        1)主键约束
            primary key
            维护实体完整性
            该字段唯一,并且不能够为null
            经常是不曾工作含义的数码做主键
            含有主键的表叫做主键表

            主键常常都以整数,不提出利用字符串当主键(就算主键是用于集群式服务,能够设想用字符串当主键)。

            主键的值一般不一样意修改,除非本记录被去除。

        二)外键约束
            foreign key
            维护引用完整性
            不是本表的主键,但却是另三个表的主键。
        问题:

            借使删表,先删主键表依旧先删外键表?

        答案:先删外键表

            借使先删主键表,会报错,因为这会促成外键表中的数额援引失利。

            借使外键表存在,则主键表不可能删除。

        3)唯一约束
            unique
            维护实体完整性
            和主键的分化:unique允许有且只有1个null(Oracle中允许null
重复)

            二个表中能够有几个unique列。

        4)检查约束
            check
            维护数据完整性
            在MySQL中数据库引擎会分析check语句,可是会忽略check约束。
            所以有关字段范围的操作,能够在程序中限定。
        五)暗中同意约束
            default
            维护域完整性
        陆)非空约束
            not null
            维护域完整性
            假使不加约束,暗许能够为空。
        7)自动增加列
            auto_increment
            可以自行增进的类别必须是整型
            默认从1开始
            借使想改变初步值,代码如下:
            create table 表名
            (
                id int primary key auto_increment
            )auto_increment=20160001;
            那样就将自动增进的开头值改为二〇一六000壹了。
            修改约束:
                alter table 表名
                auto_increment = 1001;

陆、怎么样设计主外键:

    create table product

    (

        pid int not null default 0,

        name varchar(10) not null default ”,

        price int,

        store int

    );

 

    create table sale

    (

        sid int not null default 0,

        pid int not null default 0,

        salecount int default 0,

        saledate date default ‘0000-00-00’

    );
 

/*

— 创立外键表

商品表中pid是商品编号,应该是唯壹的,在商品表中pid应该设置为主键,

在销售表中,只要迈出1件货物,就必要在销售表中添加一条记下,因为二个货品能够卖数拾2回,

由此该表中pid允许再一次,所以pid不能够当做该表的主键,不过她在商品表中作为主键,

据此pid能够看成sale表中的外键。

*/

7、SQL管理约束
    添加约束:
        成立表时增进
            非空约束
                not null

                壹般不钦命列为null值,因为不简单相比与查询。

                因为null是一类别型,相比时只好用专门的is null和is not
null进行相比较,费时费劲,如若利用运算符举办相比较,则一律再次回到null,成效不高且不便宜数据库优化(影响索引效果)。
                由此在建表时,壹般内定not null default ’ ’ 只怕default
0。

            主键约束
                primary key,主键暗许非空。
            唯壹约束
                直接写
            缺省封锁
                default ‘男’
            自动拉长列
                auto_increment
                创制表后添加
                    格式
                        alter table 表名
                        add
                            constraint 约束名
                            具体约束表达;
            外键约束
                格式
                    alter table 外键表名
                    add constraint 约束名   
(fk_主键表_外键表_外键)
                    foreign key(外键)references 主键表(主键)
                删除此之外键约束:
                    alter table 表名 drop foeign key 外键外号;

——数据库操作

    增加和删除改中都不会并发table关键字。

    增:
        1、insert [into] <表名> [(列明)]
values<(值列表)>
            < >必写、[ ] 可选,最佳都写,方便移植。
           
能够不钦定列名,不过值列表中值的逐一必须与表中字段顺序保持一致。
           
可以钦赐列名,并且不遵照数据库表中字段顺序插入,可是值需求和钦赐列名保持一致。
        2、对于活动增进列的拍卖:
            1)能够内定自动拉长列的数值。
                insert into t1 values(10,’qq’,21,2);
            2)假诺不点名,则遵照近日列的最大值自动扩展。
                insert into t1 (name,age,class)values(‘dd’,19,5);
            三)能够以钦定自动增进列,赋值时赋null,如故自动增加。
                insert into t1 (id,name,age,class) values
(null,’qq’,21,2);
            4)不钦赐列,并且自动拉长赋null。
                insert into t1 values(null,’aa’,21,2);
            只要插入值和插入列不相称,就要钦赐列。
        三、当存在暗中认可值时,有三种插入形式:
            一)钦命全体值
            2)指定列,指定值
            三)使用default关键字来钦点使用暗中同意值。
        四、三次性插入多行
            insert into 表名 values (值列表1),(值列表2),(值列表);

    改
        修改数据
            平时依据主键来修改,因为主键是唯一的。
            语法
                修改单列值:
                    update 表名
                    set 字段名 = 修改的值
                    where 字段名 = 值;

                修改多列值:
                    update 表名
                    set 字段名1 = 值1,字段名2 = 值2
                    where 字段名 = 值;

                多条件
                    where 字段名1 = 值1 and 字段名2 = 值2; 

    删
        delete from 表名
        where 删除条件
            删除表中数据,保留表结构。
            事务提交后才生效,不然回滚。
            借使有相应的触发器,会重罚执行。

        delete from 表名
            删除表中全体数据,保留表结构,记录日志。
        
        truncate 表名
            删除表中数据,保留表结构。
            不记录日志,删除后不得复苏。
           
删除后一定于保留表结构,全部景况苏醒到早先时期。(无数据,约等于格式化)
            truncate属于DDL,数据定义语言。
    
        drop table 表名
            直接从数据库中删除表。

——单表查询

    一、查询和记录集的定义
        查询:在存活的数据表中过滤符合条件的音讯。
        记录集:查询的结果平时号称“记录集”,记录集日常是1个虚拟表。

    2、基本select查询语句
        语法格式:
                select 列名 from 表名
                where 查询条件表达式
                group by 属性名一 having 条件表达式    — 用于分组
                order by 排序的列名 asc | desc;  — 用于排序
        查询表中全数列:
                select * from 表名;
                查询全数列,顺序遵照表的本来顺序展现。
                select 列名二,列名1 from 表名,调整列名的种种。
        查询表中有个别列:
                select 列名1,列名2 from 表名 where 条件;
                在询问全部记录的根底上过滤音信。
                条件大小顺序无法更改,必须扩展。
                条件:
                        比较
                        内定范围:between and  /  not between and
                            能够and三个标准化
                        钦点集合:in  /  not in
                        匹配字符:like  /  not like
                            %:相称任意七个字符
                            _: 相称任意一个字符
                             [a-f]

                                能够是字符列[a-f]中的任意3个字符。

                               
–查询ename字段中第二个字符是A到F中随意一个单一字符的职员和工人音信。

                                    select * from emp

                                        where ename like ‘_[A-F]%’ 

                            [a,f]

                                能够是a或f的单一字符。

                               
–查询ename字段中第3个字符是A或F的职员和工人音信。

                                    select * from emp

                                        where ename like ‘_[A,F]%’ 

                            [^a-c]

                                不在字符列中的任意三个字符。

                               
–查询ename字段中第贰个字符不在A到F的限量内的职员和工人信息。

                                    select * from emp

                                        where ename like ‘_[A-F]%’

                       
注意:相称的准绳必须用单引号括起来。(单引号表示字符串,双引号表示1个目的的名字)

                        –借使要查询% _ 通配符等特殊字符,能够运用:

                            select * from emp

                                where ename like ‘%\%%’ escape ‘\’

                            –当中escape关键字将’\’转换来“转义字符”,使
‘\’ 之后的字符不再是理所当然含义。

                        是不是为空值:is null  /  is not null
                        四个查询条件:and  /  or
                

        使用distinct关键字屏蔽重复数据:
                select distinct 列名 from 表名;
                    对点名列屏蔽重复值。

        使用limit关键字查询表中限定行:
                select * from 表名 limit m,n
                m是开始记录,从0初阶,n为查询的记录数
                当m为3时,从第四条记下伊始,显示五行。
                不点名初步地方时,暗许从记录第三行起头。

            公式:(当前页-1) * 每页记录数,得出的就是初始行

    3、对查询结果进行排序
        select 列名 from order by 排序字段 排序情势
        order by 放在查询的最终面。
        order by暗中认可升序排序。
                asc:升序    desc:降序
       
还足以按多列进行排序,当当中八个队列值相同时按另一列排序(多门课程成绩)
                order by sclass,sbirthday;    —
先遵照班级排序,当班级相同时,再遵照破壳日排。

——分组计算与多表关联合检查询
    一、聚合函数
        where中不可能包涵聚合函数。
        凡是聚合函数,重回的都以单值。
            sum
            avg
            max
            min
        以上各种聚合函数通用特点:
            select 聚合函数(列名) from 表名

            count
                总括记录数,不过不记录null。
                count(*)   count(列名)

    二、分组查询
     
  –分组查询只好呈现分组之后的欧洲经济共同体消息,不可能展现组内部某一字段的新闻。
        语法:
                select 字段列表 [聚合函数] from 表
                [where 条件]
                group by 字段列表
                [having 筛选标准]
                [order by 排序字段]

        单列分组:
                对内部1列分组,对另一列实行总结。
                查询项只含有分组列和计算列。
                例:总计教师表中各职位的平均年龄。
                        — 总结教授表中各岗位的平均年龄

                        select tjob,avg(tage) from t_teacher

                        group by tjob;
                        计算学生表中各班级人数
                            — 总括学生表中各班级人数

                            select sclass,count(*) from t_student

                            group by sclass 

        多列分组:
                对多列实行分组,对另1列举行计算。
               
对分组列按顺序进行分组总括,先对tjob进行分组,再对tsex实行分组。
                select tjob,tsex,avg(tage) from t_teacher
                group by tjob,tsex;
        HAVING:    
            使用having子句对分组音讯重新过滤。
            筛选分组后的音信。
            必须同盟group by使用。
         
  having语句能够遵从select字段名展开过滤,能够用聚合函数进行过滤,不可以利用小名和混淆查询举行询问。

            having中只可以查询组的一体化音信,但不能够查询组的详细音信。
             where必须写在having后面,顺序不可本末倒置,不然运转出错。

        对分组结果开始展览排序:
            order by放在查询语句的末尾。

        select语句中查询列必须在聚合函数中或group by中。
            
    3、条件计算
        where
            针对于表中有着新闻实行筛选。
        having
            针对于分组后的新闻实行筛选。

    4、多表关联合检查询
        一、使用多表关联合检查询的缘故:
                查询的音信分布在三个表中。
                多个表几个连续条件,八个表多少个三番五次条件。
        贰、交叉连接
               
得到的结果是1个笛卡尔积,是三个表记录的交叉乘积,列是五个列表的集聚。
                壹旦表名钦命了别称,则全体查询必须选拔小名。
        3、内连接
                语法
                        join on法
                            select 字段名
                            from 表1 inner join 表2
                            on 表1.字段名 = 表2.字段名
                            where 筛选标准
                            order by 排序列
                            条件运算符 = 或 <>
                        说明
                            列名能够试表壹和表第22中学的任意字段。
                           
若查询列出现共有字段则必须钦点该字段取自哪个表,格式是:表名.列名。
                            表1.列名 =
表二.列名:使用五个表共有的字段建立联系。
                          
 能够内定表的别称,一旦钦赐小名后,全部现身表名的地方都要动用别称。
                        where条件法
                            select 字段名 from 表1,表2
                步骤计算
                    列出查询字段
                    观望询问字段在什么表中
                    提取个表的公家字段作为三番五次条件
                    分析条件
        4、外连接
                左外连接
                   
哪个人做主表,什么人的音讯全部来得,假设音讯不包容,则右表信息展现null。
                        语法
                            select 字段名 from 左表 left [outer] join
右表
                                on 左表.列名 条件运算符 右表.列名
                                where 条件
                            含义
                             
  左外连接是以左表为主表,去老是右表(从表),结果集中包涵主表全部数据行,即便主表的某行在从表中没
                                有杰出时,则从表的取舍列为null值。
                                例如:
                                        以学员表作为主表,连接战表表。
                右外接连
                    主从表与左外连接相反。
                    
——子查询
    壹、子查询的概念
       
假设3个select语句能够回到1个单值或壹列值并嵌套在三个select、insert、update或delete语句中,则称之为子查询也许
        内层查询,而带有一个子查询的言语则变为主查询或外层查询。
        执行进度:
            先执行子查询,再执行主查询。
        难题浅析:
            查询出破壳日期小于小米科学和技术创办人雷军的学习者消息:
                第一步:
                        分析查询字段-学生表的兼具音信字段。
                        select * from student
                第二部:
                        分析查询条件,出破壳日期小于小Miko技创办者雷军的出生日期。
                        where birthday < (雷布斯的出生日期)
                第壹部:查询雷布斯的出生日期。
                        select birthday from student
                        where name = ‘雷军’
    2、子查询的归类
        1)比较子查询
            带有相比运算符的查询
                单值相比查询
                    where id = (子查询)
                批量相比较子查询
                    图片 1
                    语法:
                        select 字段名 from 表名
                        where 字段名 相比较运算符 any | all ( 子查询 )
                    说明:
                       
在富含any或all运算符的子查询中,子查询的结果是二个聚集,在动用时务必同时选拔相比运算符。
                    示例:
                       
在上学的孩童表中询问比贰班中某一学生出生日期小的学员音信。
                            select * from student
                            where birthday < any
                            (
                                select birthday from student
                                where class = 2
                            );
        二)带有in或not in的子查询
            语法:
                select 字段名 from 表名
                where 字段名 [not] in (子查询)
                示例:
                    查询选修了学科的学生消息
                    select * from student
                    where sid in 
                    (
                        select sid from score
                    )
        三)连接查询和子查询的下结论
            连接查询:
                查询的字段存在于三个表中
                    首先分析查询字段
                    再查看查询字段分布的表
                    然后找出表之间的共用字段(建立连接的口径)
                    最终再分析任何标准
            子查询:
                查询的字段在同叁个表中
                    首先分析查询字段
                    再分析查询条件
                    然后找出查询条件用到的字段
                    再分析该字段关联的表

——函数
    具有一定成效的秘诀    
    常用在创立表和查询表中。
    
    mod(x,y)
    rand()
    round(x,y)

    curdate()
    curtime()
    now()
    datediff(expr1,expr2)

    concat(str1,str2)
    lower(str)
    upper(str)
    length(str)
    trim(str)
    replace(str,oldstr,newstr)
    substring(str,pos,len)

    database()
    version()
    user()

    常用函数
 

        — database()

        — 重回当前数量库名

        select database();

 

        — version()

        — 再次来到当前数据库版本

        select version();

 

        — user()

        — 再次来到当前报到用户名

        select user();

 

        — inet_aton(ip)

        — 重临IP地址的数字代表方式

        select inet_aton(‘192.168.1.127’);

 

        — inet_ntoa(ip)

        — 重临数字代表的IP地址

        select inet_ntoa(3232235903);

 

        — password(str)

        —
重临字符串str的加密版本,加密是单向的(不可逆),适用于MySQL数据库的用户密码加密,四壹位稳定长度。

        select password(‘aaa’);

 

        — md5(str)

        —
重临字符串str的MD五值,该值以30人十陆进制数字的二进制字符串的花样再次来到。

        select md5(‘aaa’);

    字符串函数

        — concat(str1,str2)

        — 连接字符串,重回3个子串。

        select concat(‘aaa’,’222′);

    

        — insert(str,pos,len,newstr)

        — 将字符串str从第pos地方上马的len个字符替换为新串newstr

        select insert(‘aaaaaa’,1,4,’ss’)

        — 倘诺新串长度不足len,则将len长度的字符串全体调换为newstr

        select insert(‘aaaaaa’,1,4,’ss’)

        str = ssaa

        —
假设newstr长度抢先len,则将newstr全体布署钦赐地方,就算超出长度。

        select insert(‘aaaaaa’,1,4,’sssss’)

        str = sssssaa

        

        — lower(str)

        — 转换来小写

        select lower(‘AAA’);

        

        — upper(str)

        — 转换到大写

        select upper(‘aaa’);

        

        — length(str)

        — 获取字符串长度

        select length(‘aa’);

        

        — char_length(str)

        — 重回字符串str的长短

        select char_length(‘aa’);

        

        — lpad(str,len,padstr)

        — 重回字符串str,其左手由字符串padstr填补到len字符长度。

        select lpad(‘aaaaa’,5,’c’);

        —
当str不满意len长度时,才会动用padstr填补,假诺str超出len长度限制,则不开展填补。

        

        — rpad(str,len,padstr)

        — 与lpad相反。

        

        — trim(str)

        — 去掉字符串两边的空格。

        select trim(‘  a’);

        

        — repeat(str,count)

        — 再次回到str重复count次的结果。

        select repeat(‘a’,5);

        

        — replace(str,from_str,to_str);

        — 用字符串to_str替换字符串str中颇具的字符串from_str

        select replace(‘aabbccdd’,’bb’,’ss’);

        

        — substring(str,pos,len)

        — 重临从字符串str的pos地点起len个字符长度的子串。

        select substring(‘aaabbbccc’,3,2);

    时间函数

        — curdate()

        — 重返当今日期 年月日

        select curdate();

        

        — curtime()

        — 再次来到当前时光 时分秒

        select curtime();

        

        — now()

        — 重临当前的日子和岁月

        select now();

        

        — week(date)

        — 再次来到钦赐日期为一年中的第几周

        — 其中date可以是date time datetime timestamp

        select week(timestamp(now()));

        

        select timestamp(curdate())

        

        — year(date)

        — 再次回到钦赐日期的年份

        select year(now());

        

        — hour(time)

        — 再次回到日期的小时值

        select hour(now());

        

        — minute(time)

        — 重回time的分钟值

        select minute(now());

        

        — monthname(date)

        — 再次回到date的月度名

        select monthname(now());

        

        — date_format(date,fmt)

        — 再次来到按字符串fmt格式化日期date的值

        — %a:缩写星期名

        — %b:缩写月名

        — %d:日(05,06)

        — %e:日(5,6)

        — %H:24小时制(05,06)

        — %h:12小时制(05,06)

        — %k:24小时制(5,6)

        — %l:12小时制(5,6)

        — %s:秒

        — %S:秒

        — %Y:年,4位

        — %y:年,2位

        select date_format(now(),’%yy年%M月%d日’);

        

        — date_add(date,interval exp type)

        — 重回三个日期或时间值加上上3个光阴距离的大运值。

        — year:年 — YY

        — month:月 — MM

        — day:日 — DD

        — hour:时 — hh

        — minute:分 — mm

        — second:秒 — ss

        select date_add(now(),interval 1 year);

        date = 2017-04-05 12:29:19

        

        — datediff(expr1,expr2)

        — 重返初步时间expr1和了结时间expr二之间的流年。

        select datediff(‘2012-08-08’,now());

        — 注意:expr必须是正经时间格式。

 

    数学函数

        — abs(x)

        — 再次来到x的相对值

        select abs(-1);

 

        — ceil(x)

        — 重返相当的大于x的蝇头整数值

        select ceil(3.8);

 

        — floor(x)

        — 重回一点都不大于x的最大整数值

        select floor(3.9);

    

        — mod(x,y)

        — 返回x/y的模(取余)

        select mod(5,3);

        select round(一.伍,0);   该办法能够4舍5入取整数。

        

        — rand()

        — 重临多个0-1.0里头的私下浮点数,(0 <= x <=壹.0)

        select rand();

        

        — round(x,y)

        — 再次来到参数x的肆舍5入的y位小数的值

        — 只4舍5入小数位,不取整

        select round(1.2338,3);

        

        — truncate(x,y)

        — 重返数字x截断为y位小数的结果

        select truncate(1.222333,5);

——索引

    索引管理
        概念:
               
索引是起家在表上,是对数据库表上的1列可能多列进行排序的1种结构
                作用:
                        提升对数据库表查询的速度。
                       
也正是依照拼音或部首查找某字在词典中的地点——词典的目录。
                       
对于数据库来讲,成立索引,正是将数据库中最首要字的位置树立目录,方便于查找。
                索引的储存类型:
                        BTREE:
                        HASH:
                        分裂的囤积引擎选拔索引的仓库储存类型不相同。
                        查看数据库引擎:
                                show engines;
                       
各样引擎支持的作用各异,所以索引的仓库储存类型也不及,innodb存款和储蓄类型是BTREE
        使用索引的带价:
                1、索引要求占用数据表以外的情理存款和储蓄空间。
               
二、成立索引和维护索引要开支时间(数据库举行的操作,而不是程序员举办的操作)
                         
只要插入大概去除数据,索引都要修改。(能够全方位删减,然后重新建表,速度略快)
               
叁、当对表实行立异操作时,索引须要被重建,下跌数据的掩护速度。
        索引类型:
                一、普通索引
                        能够在数据表的任意列建立该索引。
                        创造情势:
                            1)创造表时创设索引
                                create table 表名
                                (
                                    [字段表明]
                                    index [索引名] ( 列名 [长度] )
                                );
                            二)修改表时添加索引
                                alter table 表名
                                add index[索引] (列名 [长度])
                            三)创立表后开创索引
                                create index 索引名 on
表名(列名[长度])
                        注意:
                               
如若要创造索引的列是char或varchar类型,长度能够低于实际尺寸。
                二、唯一索引
                        创造索引列的绝无仅有值
                       
相对于平常索引,唯一索引创造索引时在index前拉长unique
                叁、主键索引
                        主键索引是一种奇特的绝无仅有索引,不允许为null。
                        主键索引是在给表设置主键时自动成立。
                        一个表只可以有七个主键,即只可以有1个主键索引。
                4、全文索引
                五、单列索引和多列索引
                        单列索引:
                                索引建立在表中的某1列上。
                        多列索引:
                                索引建立在表中的七个列上
                                例如:
                                        create index 索引名 on
表名(列名1[长度],列名2[长度])
                                        create index index_id_name on
t1(id,name(2))
                                           
将三个列作为七个索引,能够增进查询效用。
                陆、删除索引
                    不恐怕修改索引,只可以删除索引,再次创下造。
                        alter table 表名
                        drop index 索引名;
                    或者
                        alter table 表名
                        drop index 索引名 on 表名;
                    例如
                        alter table t1
                        drop index index_id;
                7、建立目录的准绳
                    最契合建立目录的列是where子句中的列。
                    索引列的值不壹样的越多,索引效果越好
                           
比如:不指出在x性别列建索引,因为重新值太多。
                    使用短索引
                            取字符类型的前多少个字符。
                    利用最左前缀
                            多列索引
                            create index index_id_name on
t1(id,name(2))
                               
当创设了index_id_name索引时,查询id可以,查询id,name也可以。
                                只借使左边的索引列即可。
                    不要过分施用索引
                            因为制造和爱护索引须要开销时间。

——视图

    视图、存款和储蓄进程和自定义函数的分别:
            视图仅限于查询,而存款和储蓄进度和自定义函数能够操作表。

    能够将有所音信寄存到一张视图中,再由其它条件举行筛选。
    定义:
            视图是一种数据库对象,其剧情由询问(来自于查询)定义
           
实例:成立视图,查询学号,姓名,联系电话,班级,选课号,课程名,成绩,教师名称
                    create view view_v

                    as

                    select
t_student.sid,sname,stelephone,sclass,t_score.cid,cname,score,tname

                    from
t_student,t_score,t_course,t_teacher,t_teachcourse

                    where t_student.sid = t_score.sid and t_score.cid
= t_course.cid

                    and t_course.cid = t_teachcourse.cid and
t_teachcourse.tid = t_teacher.tid

 

                    select * from view_v
    目的:
            用于集中、简化和定制展现数据库中的数据消息。
            增加数据的安全性。
            提升表的逻辑独立性。
                数据的修改不会影响视图定义。 
    创制视图
            T-SQL语句
            语法:
                create [or replace] view 视图名
                as
                <select 语句> 

            or replace 是替换当前视图。
    对视图的更为验证
        一、视图是八个虚拟表,从1个或四个表中导出(查询)
        二、视图也足以从视图中程导弹出。
        3、其情节由询问语句(select)定义生成
       
四、在数据库中不设有视图的询问内容,只设有视图的定义,何时用实体,哪天实施视图的概念。
    管理视图
        壹、使用视图:对视图可以像对待表一样进行查询和改动
                查询:select * from view_v
                修改:
                        update view_v
                        set score = 65
                        where sid = 2016001;
                        因为视图是表的映射,所以修改视图也正是修改表。
                        只好修改表的原数据,不能够修改总括出来的数额。
        二、查看视图定义(命令)
                desc 视图名;
                show create view 视图名;
        3、修改视图定义
                适用于初次创造和修改:
                    create or replace view 视图名
                    as
                    select 语句;
                    假使视图不设有,则创设视图,假若存在则修改视图

                必须确认保障视图已经存在:
                    alter view 视图名
                    as
                    select 语句;
                    仅限于修改已存在的视图。

        四、删除视图
                drop view [if exists] 视图名
                判断倘若视图存在,则删除视图视图。

目录练习-student数据库

    1、在t_student 表中的sname列创造唯一索引

        create index index_sname on t_student(sname(2));

 

        alter table t_student

        add index ss (sname(2)); 

    2、在t_student表中的sname和stelephone列创制多列索引

    3、在t_teacher表中的tname创制普通索引

    4、在t_course表中的cname列成立唯一索引

    五、删除上述索引

    drop index index_sname on t_student;

 

    alter table t_student

    drop index index_sname;

 

视图演练-student数据库

 

    1、创制视图

        a)创制视图view_selStu,能够突显选修课程的学习者的学号,姓名,选修科目代号,科目名称,科目成绩

            create view view_selstu

            as

            select
t_student.sid,t_student.sname,t_course.cid,cname,score

            from t_student,t_course,t_score

            where t_student.sid = t_score.sid 

            and t_score.cid = t_course.cid;

        b)制造视图view_selSubject,能够展现选修科目代号,科目名称和科目成绩

            create view view_selstu

            as

            select
t_student.sid,t_student.sname,t_course.cid,cname,score

            from t_student,t_course,t_score

            where t_student.sid = t_score.sid 

            and t_score.cid = t_course.cid;

        c)创立视图view_execllent,能够突显选修课成绩>八5的上学的小孩子的学号,姓名,选修科目名称,成绩

            create view view_execllent

            as

            select t_student.sid,sname,cname,score

            from t_student,t_course,t_score

            where t_student.sid = t_score.sid

            and t_score.cid = t_course.cid

            and score > 85;

        d)创设视图view_fail,能够彰显选修课成绩比不上格的学生学号,姓名,班级,课程号,课程名,战表消息

            create view view_fail

            as

            select t_student.sid,sname,sclass,t_course.cid,cname,score

            from t_score,t_student,t_course

            where t_student.sid = t_score.sid

            and t_score.cid = t_course.cid

            and score < 60

    

    二、通过所开创的视图查询数据音信

        a)在view_execllent 中询问选修课成绩在85-九伍的新闻

            select * from view_execllent

            where score between 85 and 95;

        b)在view_fail中询问各班比不上格的战绩新闻

            select * from view_fail

            where score < 60;
        c)在view_selSubject中执会侦察总结局计各科指标最高战绩,最低成绩,平均成绩

            select max(score) ‘最高战绩’,min(score)
‘最低成绩’,avg(score) ‘平均战绩’

            from view_selsubject

    3、通过视图修改数据

        a)修改view_fail,将某壹不比格成绩新闻修改成陆13分

            update view_fail

            set score = 60

        b)修改view_selStu,修改某一学员的选修科目代号及学科名称

            update view_selstu

            set cname = ‘2’

            where cid = 2

    四、修改视图定义

        a)修改视图view_execllent,
能够显示选修课成绩>八伍的学员的学号,姓名,选修科目,战表,科目先生

            alter view view_execllent

            as

            select t_student.sid,sname,cname,score,tname

            from t_student,t_score,t_course,t_teachcourse,t_teacher

            where t_student.sid = t_score.sid

            and t_score.cid = t_course.cid

            and t_course.cid = t_teachcourse.cid

            and t_teachcourse.tid = t_teacher.tid

            and score > 85;

        b)修改视图view_selStu,能够显示选修课程的学习者的学号,姓名,选修科目代号,科目名称,科目战绩,班级,教师姓名

            create or replace view view_selstu

            as

            select
t_student.sid,sname,t_course.cid,cname,score,sclass,tname

            from t_student,t_course,t_score,t_teachcourse,t_teacher

            where t_student.sid = t_score.sid

            and t_score.cid = t_course.cid

            and t_course.cid = t_teachcourse.cid

            and t_teachcourse.tid = t_teacher.tid

    

    伍)删除视图:将上述有些视图删除

        drop view if exists view_selstu

 

——存款和储蓄过程

    存款和储蓄进程概述
            概念:
                   
存款和储蓄进度是壹种数据库对象,是为了完成有些特定职分,将一组预编写翻译的SQL语句以一个存款和储蓄单元的情势储存在服务器上
                    ,由用户通过点名存款和储蓄进度的名字内定它。
                    MySQL5.0此前不支持存款和储蓄进度。
                    示例:
                           
创造2个囤积进度,输入学生的学号,查询学生的详细消息。

                            delimiter &&           
//分隔符,当下一回相见&&时就会终结     能够采纳任何字符 例如://

                            create procedure sp_stu(in inputsid int ) 
  in 输入     int 参数类型

                            reads sql data

                            begin 

                            select * from t_student

                            where sid = inputsid;

                            end && 
                            delimiter;            //
将分隔符再一次设为分号  ;
 

                            call sp_stu(201400三);        //
使用存款和储蓄进程

                            对于 select * from where sid =
二〇一六00一,数据库每一遍执行都要求分析查询语句,转成执行。
                           
而对于仓库储存进度,在服务器已经编写翻译好,不须求再去分析语句。 

                意义:
                       
一、存款和储蓄进度只在创设时开始展览编写翻译,现在推行都不必要编写翻译,而壹般的SQL语句执行三遍就必要编译二回,所以利用存款和储蓄
                             进程会增加执行功效。
                       
2、存款和储蓄进度能够重复使用,能够减掉数据库开发人士的工作量。

 

    创立存款和储蓄进程
            不带参数的仓库储存进度
                    语法:
                            delimiter &&
                            create procedure 存款和储蓄进度名()
                            reads sql data
                            begin
                                    存款和储蓄进程语句
                            end &&
                            delimiter ;
                    示例:
                           
成立存储进度sp_fail,查询全体选修课成绩不如格的上学的小孩子学号,姓名,课程号,课程名。

                            delimiter &&

                            create procedure sp_fail()

                            reads sql data

                            begin

                                select
t_student.sid,sname,t_course.cid,cname from
t_student,t_course,t_score

                                where t_student.sid = t_score.sid

                                and t_score.cid = t_course.cid

                                and score < 60;

                            end &&

                            delimiter ;

                            执行:call sp_fail(); 

                带有输入与参数的蕴藏进程。
                        语法:
                                delimiter &&
                                create procedure 存款和储蓄进度名(in 参数名
参数数据类型,……)    // 能够输入多少个参数。
                                reads sql data
                                begin
                                        存款和储蓄进程语句
                                end &&
                                delimiter ;

                        说明:
                                输入参数平常作为查询条件。
                                 
                        示例:
                               
创设存款和储蓄进度sp_stuscore输入学生学号,查询学生学号,姓名,课程名和大成。
                                delimiter &&

                                create procedure sp_stuscore(in
inputsid int)

                                reads sql data

                                begin

                                    select
t_student.sid,sname,cname,score

                                    from t_student,t_course,t_score

                                    where t_student.sid = t_score.sid

                                    and t_score.cid = t_course.cid

                                    and t_student.sid = inputsid;

                                end &&

                                delimiter ;

                        执行:call sp_stuscore(2016001)

                带输出参数的蕴藏进程:
                        语法:
                                delimiter &&

                                create procedure sp_phone(in inputsname
varchar(20),out otelephone varchar(11))

                                reads sql DATA

                                begin

                                    select stelephone into otelephone
from t_student    — 将查找到的stelephnoe赋值给otelephone

                                    where sname = inputsname;

                                end&&

                                delimiter;

 

                                — 调用

                                call sp_phone(‘马云’,@telephone);

                                — 输出

                                select @telephone;

 

                        示例:
                                —
定义存款和储蓄进程sp_score,输入学生学号和学科号,再次来到学生的成就

                                delimiter &&

                                create procedure sp_score(in inputsid
int,in inputcid int,out outscore int)

                                reads sql data

                                begin

                                    select score into outscore 

                                    from t_student,t_score

                                    where t_score.sid = t_student.sid

                                    and inputsid = t_student.sid

                                    and inputcid = t_score.cid;

                                end &&

                                delimiter;

 

                                drop procedure sp_score;

 

                                — 调用

                                call sp_score(2016001,2,@score);

 

                                — 输出

                                select @score;

                        银行转账示例:

                                — 创立银行表

                                create table bank

                                (

                                    id int not null primary key,

                                    name varchar(5) not null default”,

                                    balance float not null default 0

                                );

 

                                insert into bank
values(10001,’张三’,100);

                                insert into bank
values(10002,’李四’,200);

 

                                — 创制存款和储蓄进程

                                delimiter &&

                                create procedure bank_test(in inputid
int,in outputid int, in money float)

                                modifies sql data    // 此处使用midifies
 因为急需修改五个内容

                                begin

                                    — 转入账户

                                    update bank

                                    set balance = balance + money

                                    where id = inputid;

 

                                    — 转出账户

                                    update bank

                                    set balance = balance – money

                                    where id = outputid;

                                end &&

                                delimiter;

 

                                call bank_test(10001,10002,100);

 

                                select * from bank;

 

                删除存款和储蓄进度:
                        drop procedure 存款和储蓄进度名;

                        

——触发器

    触发器的定义
            触发器是由inert update delete等事件来触发某种特定事件

    触发器的多个特点
            原子性:Atomiity
                   
事务是三个1体化的操作,事务的各步操作都以不可分的(原子的);要么都推行,要么都不履行。
             一致性:Consistency
                   
当事情落成时,数据必须处于相同状态。也便是说,在业务起先从前,数据存款和储蓄中的数据处于同①状态。在正在进
                    行的工作中,数据可能处于不雷同的处境,例如,数据也许有一些修改。但是,当工作成功做到时,数据必须再次
                    回到已知的平等状态,通过业务对数据所做的改动不能够破坏数据,大概说事务不可能使数码存款和储蓄处于不平稳的气象。
            隔离性:Isolation
                   
对数据开始展览修改的享有并发事务是互为隔断的,那申明工作必须是单独的,它不应以此外方法重视于或影响其余事情。
            永久性:Durability
                   
事务完毕后,它对数据库的改动被永远保存,事务日志能够保持业务的永久性。
    创制触发器的语法
            语法格式
                    create trigger 触发器名
                    before | after 触发事件
                    on 表名 for each row
                    触发执行语句
            说明:
                    trigger:触发器关键字
                    before | after:钦赐执行语句在接触前依旧接触后。
                    触发事件:insert  delete  update
                    触发执行语句:当有接触事件发生所推行的言语。
                    on表名:触发事件产生的表。
    创制触发器示例
            new代表新加上的数据行对象。
            old代表刚删除的数据行对象。
            一、扩张一条选课音讯后,相应的教程实际选课人数增一。
                    — 一、扩充一条选课音信后,相应的实际选课人数增多一

                    create trigger tr_choose

                    after insert

                    on t_score for each row

                    — 插入一条选课消息后 需要掌握选课号是稍稍

                    update t_course

                    set realcount = realcount + 1

                    where cid = new.cid

 

                    select * from t_course

                    — 使用触发器

                    insert into t_score (sid,cid)values(2016001,1)

            二、删除一条选课新闻后,相应的教程实际选课人数减一

                    create trigger tr_del

                    after delete

                    on t_score

                    for each row

 

                    update t_course

                    set realcount = realcount -1

                    where cid = old.cid;

 

                    select * from t_course;

                    select * from t_score

 

                    delete from t_score

                    where cid = 1 and sid = 2016001;

    删除触发器
            drop trigger 触发器名;

——MySQL保存大数据类型

规范SQL中提供了之类类型来保存大数据类型:
    BLOB:binary 字节流
    CLOB:character 字符流
    类型                        长度
tinyblob                    2^8-1B(256B)
blob                          2^16-1B(64KB)
mediumblob             2^64-1B(16MB)
longblob                   2^32-1B(4GB)

tinyclob                    2^8-1B(256B)
clob                          2^16-1B(64KB)
mediumclob             2^64-1B(16MB)
longclob                   2^32-1B(4GB)

而是在MySQL中绝非提供以上字符流的两种数据类型,二十施用如下多种档次来拍卖大文本数据:
    tinytext、text、mediumtext、longtext

先是需求创立一张表,表中有2个mediumblob(16M)类型的字段:
create table tab_bin(
    id int primary key auto_increment,
    filename varchar(100),
    data mediumblob
);

向数据库插入二进制数据须求运用PreparedStatement为原serBinaryStream(int,
InputStream)方法来成功。

还要求在my.ini中添加如下配置:
    max_allowed_packet=102400
设置最大可传输数据包 大小。

演示代码:

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.sql.Blob;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

import javax.sql.rowset.serial.SerialBlob;

 

import org.apache.commons.io.IOUtils;

import org.junit.Test;

 

import sun.nio.ch.IOUtil;

 

import com.wyc.demo03.JDBCUtils;

 

/*

 * 2016年12月1日15:45:48

 * 向数据库中插入大文本数据

 */

public class Demo04 {

    /*

     * 把mp叁保存到数据库中

     */

    @Test

    public void fun1() throws Exception {

        /*

         * 一、获得Connection对象 二、给出SQL模板,创立pstmt
三、设置SQL模板中的参数

         * 四、调用pstmt的executeUpdate()方法执行SQL语句

         */

        Connection conn = JDBCUtils.getConnection();

        String sql = “insert into tab_bin values(?,?,?)”;

 

        PreparedStatement pstmt = conn.prepareStatement(sql);

        pstmt.setInt(1, 1);

        pstmt.setString(2, “Alan Walker – Fade.mp3”);

        /*

         * 得到Blob 一、现把文件变成byte数组 二、再利用byte数组创造Blob

         */

        // 使用字节数组创立Blob

        byte[] bytes = IOUtils.toByteArray(new
FileInputStream(“F:/Alan Walker – Fade.mp3”));

        // Blob是1个接口,能够动用它的贯彻类来成立对象

        Blob blob = new SerialBlob(bytes);

        // 设置参数

        pstmt.setBlob(3, blob);

        pstmt.executeUpdate();

    }

 

    /*

     * 从数据库中取出mp3

     */

    @Test

    public void fun2() throws Exception {

        // 得到Connection对象

        Connection conn = JDBCUtils.getConnection();

        // 给出select模板,创建pstmt

        String sql = “select * from tab_bin”;

        PreparedStatement pstmt = conn.prepareStatement(sql);

 

        // pstmt执行executeQuery方法,执行查询,获得ResultSet

        ResultSet rs = pstmt.executeQuery();

 

        // 获取第三列名称叫data数据

        if (rs.next()) {

            Blob blob = rs.getBlob(“data”);

            /*

             * 将Blob保存到硬盘 1、通过Blob得到输入流对象
二、本人创制输出流对象 3、把输入流的数据写入到输出流中

             */

            InputStream in = blob.getBinaryStream();

            OutputStream out = new FileOutputStream(“D:/Alan Walker –
Fade.mp3”);

            IOUtils.copy(in, out);

        }

    }

}

——MySQL事务

为了有利于业务的操作,需求创立二个account表:
create table account(
    id int primary key auto_increment,
    name varchar(20),
    balance number(10,2)
);
insert into account(name, balance) values (“张三”, 100000);
insert into account(name, balance) values (“李四”, 100000);
insert into account(name, balance) values (“王五”, 100000);

面试不难问到:
一、事务的四大特点(ACID)
   
一)原子性(Atomicity):事务中存有操作是不足再分开的原子单位,事务中兼有操作依然全体实施成功,要么全体实施破产。
   
二)一致性(Consistency):事务执行后,数据库状态与其它作业规则保持一致,如转账业务,无论工作执行成功与否,参预转载的多个账号越之和应有是不变的。其余天性都以为着那一特色服务的。
   
三)隔绝性(Isolation):隔开分离性是指在产出操作中,不一样事物之间应当隔开分离开来,使各类并发中的实物不会相互烦扰。
   
四)持久性(Durability):1旦事情提交成功,事务中颇具的多寡操作必须被持久化到数据库中,尽管付出业务后,数据库发生崩溃,在重启数据库时,也亟须能担保通过某种机制苏醒数据。

二、MySQL中的事务
   
在暗中同意意况下,MySQL每执行一条SQL语句,都是3个单身的业务,假设需求在二个工作中包涵多个SQL语句,那么需求敞开事务和终止工作:
        *   开启事务:start transaction;
        *   停止工作:commit或rollback
    在推行SQL语句此前,先实施start
transaction,那就翻开了三个业务(事务的起源),然后可以实施多条SQL语句,最终要甘休工作,能够应用commit提交事务,即工作中的多条SQL语句所作出的影响会被持久化到数据库中,大概利用rollback回滚,即回滚到业务的源点,在此以前所作的有所操作都被撤回了。

——事务隔开分离级别

1、事务的面世读取难题
    *   脏读:读取到另多少个政工未提交的多少,即读取到了脏数据。
    *  
不可重复读:一次读取内容不1样,因为另一事情对该记录做了改动。
    *  
虚读:对同一张表的三遍搜索内容不均等,读到另一事情已提交的数目。

    不可重复读和虚读的界别:
        *   不可重复读是读取到了另一事情的创新。
        *   虚读是读取到了另一东西的插入(MySQL中不恐怕测试虚读)。

二、第四次全国代表大会隔断级别
   
6个级次的事体隔开分离级别,在平等数量环境下,使用同壹的输入,执行同样的工作,依照差别的隔开级别,能够引致分歧的结果,差异工作隔开级别能够化解的数额出现难题的力量是见仁见智的。
    1)SERIALIZABLE(串行化):
        *  
不会冒出别的并发难题,因为它是对同样数据的访问是串行的,非并发访问。
        *   品质最差。
    二)REPEARABLE READ(可另行读):(MySQL默许)
        *   制止脏读和不可重复读,不可能处理虚读难点。
        *   性能比SERIALIZABLE好。
    3)READ COMMITTED(读取已交给数据):(Oracle私下认可)
        *   幸免脏读,不能够处理不可重复读,也无法处理虚读。
        *   性能比REPEATABLE READ好。
    4)READ UNCOMMITTED(读取未提交数据):
        *   恐怕出现别的业务并发难点。
        *   质量最高。

    MySQL暗许的割裂级别为REPEATABLE READ,可以经过下边包车型客车说话查看:
        select @@tx_isolation
    也得以通过上边语句来设置当前连日的割裂级别:
        set transaction isolationlevel [4 选 1]

——MySQL语句

     建表

            通过图片化界面建表。

            通过命令建表:

                create table Course

                (

                        Cou_name nvarchar(50) not null,

                        Cou_id int not null primary key,

                        Cou_tercher nvarchar(20) not null

                )

 

                create table Student

                (

                        Stu_id int not null primary key,

                        Stu_name nvarchar(50) not null,

                        Stu_sex nchar(2) not null,

                        Stu_age int not null,

                        Cou_id int foreign key references
Course(Cou_id) not null

                )

            create table 最终2个字段的前边提出不用写逗号。

                references的作用是外键表创立外键时引用主键表的主键。

    修改字段属性:
        update 表名
        set 字段名 = 要求修改的值
        where 字段名 = 值;    //假若不加限制,则会将该字段全体制改善动。
    
    添加记录:
        insert into 表名 (列名) values(值列表);
        列名能够简简单单,根据值列表举办判定。

    删除:
        delete from 表名
        where 字段 = 值;

    创建表:
        create table 表名
        (
            字段名 数据类型
        );

    查看表结构:
        desc 表名;
        show create table 表名;

    字段修改属性:
        修改字段数据类型:
            alter table 表名
            modify 字段名 数据类型;
    
    修改字段名:
            alter table 表名
            change 旧属性名 新属性名 新属性类型;
            当不钦赐原有字段的自拉长时,自拉长会丢失。

    增添字段:
        alter table 表名
        add 字段名 数据类型(完整性约束原则);
            要是想在首先个岗位增加字段,供给在数据类型后边加上first
            假使想在钦定地方添加,可以使用 after 字段名;   
意思是在该字段后边添加。

    删除字段:
        alter table 表名
        drop 字段名;

    删除表:
        drop table 表名;

    主键约束:
        create table 表名
        (
            主键 数据类型 primary key
        );

    外键约束:
        create table 表名
        (
            外键名 数据类型,
            constraint fk_主键约束名 foreign key (外键名) references
主键表(主键)
        );

    唯壹约束:
        create table 表名
        (
            字段名 数据类型 unique
        );

    暗中认可约束:
        create table 表名
        (
            字段 数据类型 default 默许值
        );

    检查约束:
       
在MySQL中数据库引擎会分析check语句,可是会忽略check约束,所以关于字段限制范围的操作,可以在先后中限定。

    非空约束:
        create table 表名
        (
            字段名 数据类型 not null
        );

    自动拉长列:
        create table 表名
        (
            字段名 数据类型(必须是int型) primary key(必须是主键)
auto_increment
        ) auto_increment = 一千壹;(能够在那里钦点暗中认可值初步值)

——MySQL入门最基本语句
    连接服务器:
        mysql -uusername -ppassword
   
当连上服务器后,我们首先面对的是库,库有3个或多少个,假使不知晓有如何库,要求查阅全体的库,语句如下
    查询全部库:
        show databases;

    设置字符集:
        set names gbk;
        设置mysql字符集为gbk。 

   大家要想对表/行实行操作的话,首先要选库
    选库语句:
        use 库名;

    选库之后,面对的是多张表:
    查看全数表:
        show tables;

    创制一个数据库:
        create database [IF NOT EXISTS] 数据库名 [charset=字符集]; 
  — 中括号内容可选
        create database if not exists mydb charset=utf8;

    删除数据库:
        drop database 数据库名;

    修改数据库编码:
        alter database mydb character set utf8;

    数据库如何改名?
        MySQL中,表和列能够改名,不过database无法改名。
        修改表名
            rename table oldname to newname;
            或者:alter table 原表名 rename to 新表名;

        PHPMyAdmin:新建库,把装有表复制到新库,再删除旧库达成的。

    创建表:
        create table test
        (
            id int
        ); 

    清空表
        truncate 表名;
        truncate和delete的区别:
            truncate清空表并且保留表结构,不记录日志。
            delete只删除数据,记录日志。

    退出
        exit;
        quit;
        \c  跳出执行

——错误提醒
    136陆:客户端未注解字符集。
    1064:语法错误。

 

————————————————————————————————————————————————————————

查询!!!!!!!!!!!!!!!!!!

以goods表作为演练表。

— 创建goods表

create table goods

(

    goods_id mediumint(8) unsigned primary key not null
auto_increment,

    cat_id smallint(5) unsigned not null default ‘0’,

    goods_sn varchar(60) not null default ”,

    goods_name varchar(120) not null default ”,

    click_count int(10) unsigned not null default ‘0’,

    goods_number smallint(5) unsigned not null default ‘0’,

    market_price decimal(10,2) unsigned not null default ‘0.00’,

    shop_price decimal(10,2) unsigned not null default ‘0.00’,

    add_time int(10) unsigned not null default ‘0’,

    is_best tinyint(1) unsigned not null default ‘0’,

    is_new tinyint(1) unsigned not null default ‘0’,

    is_hot tinyint(1) unsigned not null default ‘0’

);

 

— 将shop.goods表中的数据插入testshop.goods表

insert into testshop.goods

select
goods_id,cat_id,goods_sn,goods_name,click_count,goods_number,market_price,shop_price,add_time,is_best,

is_new,is_hot from shop.goods;

goods_id cat_id goods_sn goods_name click_count goods_number
market_price shop_price add_time is_best is_new is_hot

|  1 |  4| ECS000000 | KD876                        |       7 |        
        1 |         1665.60 |    1388.00 | 1240902890 |       1 |      1
|      1 |

|  三 |  八| ECS00000二 | 金立原装5800动圈耳机  |       3 |               二四|             八一.60 |        68.00 | 1241422082 |       0 |      0 |    
 0 |

|  四 |  捌| ECS00000四 | 黑莓N85原装充电器|       0 |               17 |
            6九.60 |        5捌.00 | 124142240二 |       0 |      0 |    
 0 |

|  5 |1一| ECS000005 | 红米原装M2卡读卡器  |       3 |                八 |
             二4.00 |        20.00 | 1241422518 |       1 |      一 |    
 0 |

|  6 |11| ECS000006 | 胜创KINGMAX内存卡 |       0 |               15 |  
           50.40 |       42.00 | 1241422573 |       0 |      0 |      0
|

|  七 | 八| ECS000007  | NokiaN八伍原装立体声动圈耳机HS-八二 | 0 |   20 |        
  120.00        100.00 | 12414227八伍 |       0 |      0 |      0 |

|  8 | 3| ECS000008  | 飞利浦9@9v              |       9 |            
     1 |           478.79 |      399.00 | 1241425512 |       1 |      1
|      1 |

|  9 | 3| ECS000009  | 诺基亚E66                 |      20 |            
    4 |         2757.60 |    2298.00 | 1241511871 |       1 |      1 |  
   1 |

|10 | 3| ECS000010  | 索爱C702c                |      11 |             
    7 |         1593.60 |    1328.00 | 1241965622 |       0 |      0 |  
   1 |

|11 | 3| ECS000011  | 索爱C702c                 |       0 |             
    1 |               0.00 |    1300.00 | 1241966951 |       0 |      0
|      0 |

|12 | 三| ECS00001二  | 索爱A捌10           |      一3 |                
八 |          117九.60 |      玖八三.00 | 124529765二 |       0 |      一 |    
 0 |

|13 | 3| ECS000013  | 诺基亚5320 XpressMusic |13|                 8 |  
      1573.20      1311.00 | 1241967762 |       0 |      0 |      1 |

|14 | 4| ECS000014  | 诺基亚5800XM          |       6 |                 
1 |         3150.00      2625.00 | 1241968492 |       0 |      0 |    
 1 |

|15 | 三| ECS000015  | 红米A八10           |       八 |               
  3 |           玖四五.60 |       78捌.00 | 1二四一九陆陆70三 |       0 |      1 |
     一 |

|1陆 | 二| ECS00001六  | 恒基伟业G10一           |       3 |                
0 |           98八.00 |       捌贰三.33 | 1二四壹九陆994玖 |       0 |      0 |  
   0 |

|17 | 3| ECS000017  | 夏新N7                      |       2 |          
      1 |          2760.00 |    2300.00 | 1241969394 |       1 |      0
|      1 |

|18 | 4| ECS000018  | 夏新T5                      |       0 |          
      1 |          3453.60 |    2878.00 | 1241969533 |       0 |      0
|      0 |

|19 | 3| ECS000019  | 三星SGH-F258         |       7 |               12
|          1029.60 |      858.00 | 1241970139 |       1 |      1 |    
 1 |

|20 | 3| ECS000020  | 三星BC01                 |      14 |             
12 |            336.00 |      280.00 | 1241970417 |       1 |      1 |  
   1 |

|21 | 3| ECS000021  | 金立 A30                   |       4 |           
   40 |          2400.00 |   2000.00 | 1241970634 |       0 |      0 |  
   0 |

|22 | 3| ECS000022  | 多普达Touch HD       |      15 |                1
|          7198.80 |   5999.00 | 1241971076 |       1 |      1 |      0
|

|23 | 5| ECS000023  | 诺基亚N96                |      17 |             
  8 |          4440.00 |   3700.00 | 1241971488 |       1 |      1 |    
 0 |

|24 | 3| ECS000024  | P806                         |      35 |         
  100 |          2400.00 |   2000.00 | 1241971981 |       1 |      1 |  
   1 |

|二伍 |13| ECS000025 | 小灵通/固话50元充值卡 |    0 |                二 |  
           伍七.5九 |       48.00 | 1二肆壹玖七370玖 |       一 |      0 |      一|

|贰陆 |一叁| ECS00002六 | 小灵通/固话20元充值卡 |    0 |                2 |  
           2二.80 |       1九.00 | 12肆一9七五78九 |       0 |      0 |      一|

|二七 |一伍| ECS0000二7 | 联通拾0元充值卡       |        0 |               贰|             100.00 |       玖五.00 | 124一9七五8九4 |       一 |      一 |    
 1 |

|28 |一伍| ECS00002八 | 联通50元充值卡         |        0 |               0
|              50.00 |        45.00 | 1二四壹玖柒197陆 |       0 |      0 |  
   一 |

|2玖 |1四| ECS00002玖 | 移动100元充值卡       |        0 |               0
|                0.00 |        90.00 | 12四一玖七一02贰 |       1 |      0 |  
   一 |

|30 |1四| ECS000030 | 移动20元充值卡         |        1 |               九|              2一.00 |        1八.00 | 124一玖七一11四 |       一 |      0 |  
   1 |

|3一 | 三| ECS000031  | BlackBerryE八                |        5 |            
  1 |          1604.3玖 |    1337.00 | 124211041二 |       0 |      0 |  
   0 |

|32 | 3| ECS000032  | 诺基亚N85                 |        9 |            
  4 |          3612.00 |    3010.00 | 1242110760 |       0 |      1 |  
   1 |

——where条件查询

    比较运算符
        <    <=    =    >    >=    <>    in
    逻辑运算符
        not 或 !    or 或 ||    and 或 &&
    — 一、查询主键为3②的货物

    select * from goods

    where goods_id = 32;
     

    — 二、查询不属于第一栏的保有商品

    select * from goods

    where cat_id <> 3;

    

    — 三、本店价格超越三千元的货品

    select * from goods

    where shop_price > 3000;

    

    — 四、本店价格低于或等于100元的商品

    select * from goods

    where shop_price <= 100;
    

    — 5、取出第陆栏和者第二一栏的货品(无法用or)

    select * from goods

    where cat_id in (4,11);
    

    — 6、取出十0<=店铺价格<=500的货品(不许用and)

    select * from goods

    where shop_price between 100 and 500;
    

    — 七、取出不属于第2栏目且不属于第3一栏指标货品(and,或not in分别达成)

    select * from goods

    where cat_id <> 3 and cat_id <> 11;

    

    select * from goods

    where cat_id not in(3,11);

    

    — 八、取出店铺价格高于十0且低于300,也许高于四千且小于5000的货色()

    select * from goods

    where (shop_price > 100 and shop_price < 300)

    or (shop_price > 4000 and shop_price < 5000);

        

    — 9、取出第二个栏目上边价格<一千或>三千,并且点击量>伍的1体系商品

    select * from goods

    where cat_id = 3 and (shop_price < 1000 or shop_price >
3000) and click_count > 5;

        注意:必须加括号,不然暗中同意or两边各为二个规范。
                   or的优先级最低。
    

    — 10、取出第1个栏目上边包车型地铁货色(注意:一栏目上边没商品,但其子栏目下有)
       
Infiniti极分类,一流分类,也正是该大类上面未有直接数据,而是二级分类。
    

    — 1一、取有名字以”三星”起初的商品

    select * from goods

    where goods_name like ‘诺基亚%’;
        此处使用模糊查询,而不是正则相配,因为正则相配作用低。
        %:相称零到三个字符。
        _:相称二个字符。
    
    — 1二、取有名字不以”One plus”起头的货色

    select * from goods

    where goods_name not like ‘诺基亚%’;

    

    — 一三、取出第三个栏目下边价格在1000到2000以内,并且点击量>5″OPPO”初步的比比皆是商品

    select * from goods

    where (cat_id = 3 and shop_price > 1000 and shop_price <
3000 and click_count > 5)and goods_name like ‘诺基亚%’;

    

    面试题

    有如下表和数组,把num值处于[20,29]的数改为20,把num值处于[30,39]里头的数改为30。

    +——+

    | num  |

    +——+

    |    3 |

    |   12 |

    |   15 |

    |   25 |

    |   23 |

    |   29 |

    |   34 |

    |   37 |

    |   32 |

    |   45 |

    |   48 |

    |   52 |

    +——+

    

    update test

    set num = 20

    where num between 20 and 29;

    update test 

    set num = 30

    where num between 30 and 39;
    
    或者:
    
    update test
    set num = floor(num/10)*10
    where num >= 20 and num <= 30; 

    
    where查询模型
       
能够把字段看成变量,把where看做Java中if语句中的条件,便是哪条记下能让if为真,就能取出哪条记下。
        非零 并且 非null 非字符串 都为真。
        既然字段是变量,那么变量之间就足以运算。
        例如:
                select market_price – shop_price as discount from
goods

                where goods_id = 1;
               
注意:不能够在where中应用discount,因为where是对原表举办筛选生成叁个一时表,discount存在于一时半刻表中,所以where无
                           法使用discount对原表实行筛选。 
                          
假使想对结果也正是discount进行筛选,只可以接纳having,因为在where生成结果后,having是对结果再一遍进行筛选。
     
 ——group by分组查询

    
        max()函数取最大值。
        min()函数取最小值。
        avg()总括平均值
       
count(*)函数总计个数,假如count(列名),在钦赐列名时则不总计null值。
        那么使用count(*)和count(一)什么人更加好吧?
           
对于myisam引擎的数据库未有差距,那种内燃机的数据库内部有1个计数器计算那行数,当必要输出游数的时候,会直接取出游数
           
对于使用innodb引擎的数据库,使用count(*)直接读行数,会造功效率低下,因为innodb会壹行1行的数。
    
        有如下语句:
            select goods_id,sum(goods_number) from goods;
            取出结果为:
            goods_id    sum(goods_number)
                  1                        314
           
对于SQL标准来说,该语句是不对的,不可能被执行,不过在MySQL中得以被实施,不过为了可移植性和规范性,不推荐使用。
    

    — 一、查询出最贵的货物价位

    select max(shop_price) from goods;

    

    — 2、查询最新的商品编号

    select max(goods_id) from goods;

    

    — 3、查询最便利的的货色价位

    select min(shop_price) from goods;

    

    — 四、查询最旧的商品编号

    select min(goods_id) from goods;

    

    — 5、查询该店全部商品的仓库储存总量

    select sum(goods_id) from goods;

 

    — 六、查询全部商品的平均价

    select avg(shop_price) from goods;

    

    — 七、查询该店壹共有个别许种商品

    select count(goods_id) from goods;

    

    — 8、查询各类栏目下边

    — 最贵商品价位

    — 最低商品价位

    — 商品平均价格

    — 仓库储存总量

    — 商品系列

    — (提醒:七个聚合函数sum avg max min count 与 group by综合应用)

    select
cat_id,max(shop_price),min(shop_price),avg(shop_price),sum(goods_number)
from goods

    group by cat_id;

    
    
——having分组筛选

 

    — 一、查询该店的商品比集镇价所节省的标价

    select goods_id,market_price – shop_price from goods;

 

    — 2、查询每一种商品所积压的货款(库存*单价)

    select shop_price,(goods_number * shop_price) from goods;

    

    — 三、查询该店积压的总货款

    select sum(goods_number * shop_price) from goods;

    

    — 四、查询该店每一个栏目下边积压的货款

    select cat_id,goods_number * shop_price from goods

    group by cat_id;

    

    — 5、查询比市场价省钱200元以上的货色及该商品所省的钱。

    — 用where和having分别达成

    select goods_id,market_price – shop_price as price

    from goods

    where market_price – shop_price > 200;

    

    select goods_id,market_price – shop_price as price

    from goods

    having price > 200;

    

    — 六、查询积压货款超越二万元的栏目,以及该栏目积压的货款

    select cat_id,sum(goods_number * shop_price) as price

    from goods

    group by cat_id

    having price > 20000;

    

    — 七、where group by having综联合排演习题

    — 有如下表及数码

    — 查询出二门及2门以上比不上格者的平分成绩

    — +——+———+——-+

    — | name | subject | score |

    — +——+———+——-+

    — | 张三 | 数学    |    90 |

    — | 张三 | 语文    |    50 |

    — | 张三 | 地理    |    40 |

    — | 李四 | 语文    |    55 |

    — | 李四 | 政治    |    45 |

    — | 王五 | 政治    |    30 |

    — +——+———+——-+

    create table score

    (

        sname char(4) not null,

        ssubject char(5) not null,

        sscore float not null

    );

    insert into score values(‘张三’,’数学’,90);

    insert into score values(‘张三’,’语文’,50);

    insert into score values(‘张三’,’地理’,40);

    insert into score values(‘李四’,’语文’,55);

    insert into score values(‘李四’,’政治’,45);

    insert into score values(‘王五’,’政治’,30);

    insert into score values(‘赵六’,’政治’,90);

    insert into score values(‘赵六’,’政治’,80);

    

    select sname,count(sscore < 60) as c,avg(sscore) as a 

    from score

    group by sname

    having c >= 贰        —
错误!因为不论count()中是还是不是为真,都会将行数全部取出,尽管整体过关,会整整取出。

    ## 1种错误做法

    mysql> select name,count(score<60) as k,avg(score) from stu
group by name having k>=2;

    +——+—+————+

    | name | k | avg(score) |

    +——+—+————+

    | 张三     | 3 |    60.0000 |

    | 李四     | 2 |    50.0000 |

    +——+—+————+

    2 rows in set (0.00 sec)

    

    mysql> select name,count(score<60) as k,avg(score) from stu
group by name;

    +——+—+————+

    | name | k | avg(score) |

    +——+—+————+

    | 张三     | 3 |    60.0000 |

    | 李四     | 2 |    50.0000 |

    | 王五     | 1 |    30.0000 |

    +——+—+————+

    3 rows in set (0.00 sec)

    

    mysql> select name,count(score<60) as k,avg(score) from stu
group by name having k>=2;

    +——+—+————+

    | name | k | avg(score) |

    +——+—+————+

    | 张三     | 3 |    60.0000 |

    | 李四     | 2 |    50.0000 |

    +——+—+————+

    2 rows in set (0.00 sec)

    

    #累加赵六后错误揭露

    mysql> insert into stu 

        -> values 

        -> (‘赵六’,’A’,100),

        -> (‘赵六’,’B’,99),

        -> (‘赵六’,’C’,98);

    Query OK, 3 rows affected (0.05 sec)

    Records: 3  Duplicates: 0  Warnings: 0

    

    #荒谬显现

    mysql> select name,count(score<60) as k,avg(score) from stu
group by name having k>=2;

    +——+—+————+

    | name | k | avg(score) |

    +——+—+————+

    | 张三 | 3 |    60.0000 |

    | 李四 | 2 |    50.0000 |

    | 赵六 | 3 |    99.0000 |

    +——+—+————+

    3 rows in set (0.00 sec)

    

    #正确思路,先查看种种人的平均成绩

    mysql> select name,avg(score) from stu group by name;

    +——+————+

    | name | avg(score) |

    +——+————+

    | 张三 |    60.0000 |

    | 李四 |    50.0000 |

    | 王五 |    30.0000 |

    | 赵六 |    99.0000 |

    +——+————+

    4 rows in set (0.00 sec)

    

    mysql> # 看种种人挂科景况

    mysql> select name,score < 60 from stu;

    +——+————+

    | name | score < 60 |

    +——+————+

    | 张三 |          0 |

    | 张三 |          1 |

    | 张三 |          1 |

    | 李四 |          1 |

    | 李四 |          1 |

    | 王五 |          1 |

    | 赵六 |          0 |

    | 赵六 |          0 |

    | 赵六 |          0 |

    +——+————+

    9 rows in set (0.00 sec)

    

    mysql> #计量各类人的挂科学科

    mysql> select name,sum(score < 60) from stu group by name;

    +——+—————–+

    | name | sum(score < 60) |

    +——+—————–+

    | 张三 |               2 |

    | 李四 |               2 |

    | 王五 |               1 |

    | 赵六 |               0 |

    +——+—————–+

    4 rows in set (0.00 sec)

    

    #与此同时计算每人的平分分

    mysql> select name,sum(score < 60),avg(score) as pj from stu
group by name;

    +——+—————–+———+

    | name | sum(score < 60) | pj      |

    +——+—————–+———+

    | 张三 |               2 | 60.0000 |

    | 李四 |               2 | 50.0000 |

    | 王五 |               1 | 30.0000 |

    | 赵六 |               0 | 99.0000 |

    +——+—————–+———+

    4 rows in set (0.00 sec)

    

    #动用having筛选挂科二门以上的.

    mysql> select name,sum(score < 60) as gk ,avg(score) as pj
from stu group by name having gk >=2; 

    +——+——+———+

    | name | gk   | pj      |

    +——+——+———+

    | 张三 |    2 | 60.0000 |

    | 李四 |    2 | 50.0000 |

    +——+——+———+

    2 rows in set (0.00 sec)

    正确答案:
        select sname,sum(sscore < 60) as s,avg(sscore) from score

        group by sname

        having s >= 2; 

——order by排序
    order by 列名 desc/asc

    当需求进行频仍排序时:

        order by 列名1 desc/asc,列名2 desc/asc,

    当得到终极结出集现在,才能够进行排序,因为在结果集生成进度个中举行排序无意义。

    反过来说,排序是针对性最终结果,即:order by要放在where/group by
having之后,顺序无法颠倒。

 

    知识点:

        回收站机制,逻辑删除。

 

——limit限制结果条数
    limit [offset,] n(不包含offset)

    offset:偏移量(跳过些微行,也正是从什么职位上马取出记录,不带有offset)

    n:取出条目。

    offset借使不写,也就是limit 0,n

 

    — 一、按价格由高到低排序

    select * from goods

    order by shop_price;

    

    — 二、按公布时间由早到晚排序

    select * from goods

    order by add_time 

    

    — 三、按栏目由低到高排序,栏目之中按价格由高到低排序

    select * from goods

    order by cat_id,shop_price desc;

    

    — 4、取出价格最高的前五个商品

    select * from goods

    order by shop_price desc

    limit 3;

    

    — 5、取出点击量前三名到前五名的货品

    select * from goods

    order by click_count desc

    limit 2,3

    

    多个子句的运算顺序

        where  group by  having  order by  limit

 

——where型子查询

    把内层查询结果作为外层查询的可比标准

    例题:

        — 取出种种栏目下的新型的货品

        — 第3步:先查询每一种栏目下流行商品的goods_id

        select max(goods_id),cat_id from goods

        group by cat_id;

        — 第二步:把goods_id对应的商品音信输出即可

        select * from goods

        where goods_id in

        (

            select max(goods_id) from goods

            group by cat_id

        );

    where子查询的SQL语句不能够select * from表

        因为:

            假如where 列名 = (内层SQL)
则内层SQL再次来到的必须是单列单行值,也正是单个值。

            就算where 列名 in (内层SQL)
则内层SQL只可以回到单列值,可以多行,也能够单个值。

 

——from型子查询

    将内层查询SQL的询问结果,当成一张一时半刻表,供外层SQL再度展开查询。

    注意:

        权且表一定要起三个外号。

    例题:

        — 取出各类栏目下的风靡的货色

            select * from 

            (

                select * from goods

                order by cat_id,goods_id desc

            ) as t

            group by cat_id

            order by goods_id;

 

 

——exists型子查询

    将外层的询问结果(查询字段)获得内层查询,判断内层的查询是不是创建,假若内层的询问where创制,则该行取出,
    并在外行输出突显,假若不树立则不出口。

    
    exists作用超越in,因为exists蒙受满足条件就回来,而in则全部相比。

——两表之间的全连接查询

表与聚集的关系

一张表正是3个集聚。

每一行正是3个成分。

疑问:

集结不可能重复,不过有相当的大可能有两行数据完全相同,如何处理?

答:

MySQL内部每壹行又2个rowid

在数据库中,怎样操作表来获得笛Carl积:

select * from table1,table2;

 

——左连接

A表与B表通过三个关乎来筛选B表的行

语法:

A left join B on 筛选标准

若果基准为真,则B表取出对应的行。

该语句获得的结果也是四个权且表,可以用作一张表,设为C。

既是,就能够对C表做询问,所以where group by having order by
limit都可以照常使用。

多表连接中的where和on

在多表连接之后,形成的是第二张新表,第一张新表中无其它索引字段,因而子表的目录发挥不了效能。

 

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图