【997755.com澳门葡京】Server数据库基础,MySQL学习笔记一

建库建表:

if DB_id('TicketManager ')is not null --判断数据库是否已经存在
drop database TicketManager --移除已经存在的数据库
go
create database TicketManager --新建数据库
on
(
    name='TicketManager ',--数据库名称
    filename='E:\CS架构复习案例\TicketManager\DB\TicketManager.mdf'--编写建立数据库的位置
)
use TicketManager--打开数据库
if OBJECT_ID('Ticket')is not null--判断表是否已经存在
drop table Ticket--移除已经存在的数据库
go
create table Ticket--新建表
(
    TrainID int identity(1,1) primary key,--列 数据类型 约束
    TrainNO nvarchar(50) not null unique,
    leaveCity nvarchar(50) not null,
    arriveCity nvarchar(50) not null,
    LeaveTime nvarchar(50) not null,
    SeatPrice int not null,
    BedPrice int not null
)

insert Ticket values('N5545','北京','武汉','6:11','150','200') --添加数据
insert Ticket values('N5546','武汉','北京','6:12','150','200')
insert Ticket values('N5547','广东','江西','4:13','150','200')
insert Ticket values('N5548','江西','广东','7:14','150','200')
insert Ticket values('N5549','珠海','深圳','6:15','50','70')

壹、数据库的询问用法

一、 数据表记录的查询: 运算符、虑重、列运算、小名、排序、聚合函数、分组

MySQL 学习笔记

五1柒个SQL非凡案例入门到精通:

--1、查找员工的编号、姓名、部门和出生日期,如果出生日期为空值,显示日期不详,并按部门排序输出,日期格式为yyyy-mm-dd。
select emp_no,emp_name,dept,isnull(convert(char(10),birthday,120),'日期不详') birthday
from employee
order by dept

--2、查找与喻自强在同一个单位的员工姓名、性别、部门和职称
select emp_no,emp_name,dept,title
from employee
where emp_name<>'喻自强' and dept in
(select dept from employee
where emp_name='喻自强')

--3、按部门进行汇总,统计每个部门的总工资
select dept,sum(salary)
from employee
group by dept

--4、查找商品名称为14寸显示器商品的销售情况,显示该商品的编号、销售数量、单价和金额
select a.prod_id,qty,unit_price,unit_price*qty totprice
from sale_item a,product b
where a.prod_id=b.prod_id and prod_name='14寸显示器'

--5、在销售明细表中按产品编号进行汇总,统计每种产品的销售数量和金额
select prod_id,sum(qty) totqty,sum(qty*unit_price) totprice
from sale_item
group by prod_id

--6、使用convert函数按客户编号统计每个客户1996年的订单总金额
select cust_id,sum(tot_amt) totprice
from sales
where convert(char(4),order_date,120)='1996'
group by cust_id

--7、查找有销售记录的客户编号、名称和订单总额
select a.cust_id,cust_name,sum(tot_amt) totprice
from customer a,sales b
where a.cust_id=b.cust_id
group by a.cust_id,cust_name

--8、查找在1997年中有销售记录的客户编号、名称和订单总额
select a.cust_id,cust_name,sum(tot_amt) totprice
from customer a,sales b
where a.cust_id=b.cust_id and convert(char(4),order_date,120)='1997'
group by a.cust_id,cust_name

--9、查找一次销售最大的销售记录
select order_no,cust_id,sale_id,tot_amt
from sales
where tot_amt=
(select max(tot_amt)
from sales)

--10、查找至少有3次销售的业务员名单和销售日期
select emp_name,order_date
from employee a,sales b 
where emp_no=sale_id and a.emp_no in
(select sale_id
from sales
group by sale_id
having count(*)>=3)
order by emp_name

--11、用存在量词查找没有订货记录的客户名称
select cust_name
from customer a
where not exists
(select *
from sales b
where a.cust_id=b.cust_id)

--12、使用左外连接查找每个客户的客户编号、名称、订货日期、订单金额订货日期不要显示时间,日期格式为yyyy-mm-dd按客户编号排序,同一客户再按订单降序排序输出
select a.cust_id,cust_name,convert(char(10),order_date,120),tot_amt
from customer a left outer join sales b on a.cust_id=b.cust_id
order by a.cust_id,tot_amt desc

--13、查找16M DRAM的销售情况,要求显示相应的销售员的姓名、性别,销售日期、销售数量和金额,其中性别用男、女表示
select emp_name 姓名, 性别= case a.sex when 'm' then '男'
when 'f' then '女' 
else '未'
end,
销售日期= isnull(convert(char(10),c.order_date,120),'日期不详'),
qty 数量, qty*unit_price as 金额
from employee a, sales b, sale_item c,product d
where d.prod_name='16M DRAM' and d.prod_id=c.prod_id and
a.emp_no=b.sale_id and b.order_no=c.order_no

--14、查找每个人的销售记录,要求显示销售员的编号、姓名、性别、产品名称、数量、单价、金额和销售日期
select emp_no 编号,emp_name 姓名, 性别= case a.sex when 'm' then '男'
when 'f' then '女' 
else '未'
end,
prod_name 产品名称,销售日期= isnull(convert(char(10),c.order_date,120),'日期不详'),
qty 数量, qty*unit_price as 金额
from employee a left outer join sales b on a.emp_no=b.sale_id , sale_item c,product d
where d.prod_id=c.prod_id and b.order_no=c.order_no

--15、查找销售金额最大的客户名称和总货款
select cust_name,d.cust_sum
from customer a,
(select cust_id,cust_sum
from (select cust_id, sum(tot_amt) as cust_sum
from sales
group by cust_id ) b
where b.cust_sum = 
( select max(cust_sum)
from (select cust_id, sum(tot_amt) as cust_sum
from sales
group by cust_id ) c )
) d
where a.cust_id=d.cust_id 

--16、查找销售总额少于1000元的销售员编号、姓名和销售额
select emp_no,emp_name,d.sale_sum
from employee a,
(select sale_id,sale_sum
from (select sale_id, sum(tot_amt) as sale_sum
from sales
group by sale_id ) b
where b.sale_sum <1000 
) d
where a.emp_no=d.sale_id 

--17、查找至少销售了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额
select a.cust_id,cust_name,b.prod_id,prod_name,d.qty,d.qty*d.unit_price
from customer a, product b, sales c, sale_item d
where a.cust_id=c.cust_id and d.prod_id=b.prod_id and 
c.order_no=d.order_no and a.cust_id in (
select cust_id
from (select cust_id,count(distinct prod_id) prodid
from (select cust_id,prod_id
from sales e,sale_item f
where e.order_no=f.order_no) g
group by cust_id
having count(distinct prod_id)>=3) h )

--18、查找至少与世界技术开发公司销售相同的客户编号、名称和商品编号、商品名称、数量和金额
select a.cust_id,cust_name,d.prod_id,prod_name,qty,qty*unit_price
from customer a, product b, sales c, sale_item d
where a.cust_id=c.cust_id and d.prod_id=b.prod_id and 
c.order_no=d.order_no and not exists
(select f.*
from customer x ,sales e, sale_item f
where cust_name='世界技术开发公司' and x.cust_id=e.cust_id and
e.order_no=f.order_no and not exists
( select g.*
from sale_item g, sales h
where g.prod_id = f.prod_id and g.order_no=h.order_no and
h.cust_id=a.cust_id)
)

19、查找表中所有姓刘的职工的工号,部门,薪水
select emp_no,emp_name,dept,salary
from employee
where emp_name like '刘%'

20、查找所有定单金额高于2000的所有客户编号
select cust_id
from sales
where tot_amt>2000

21、统计表中员工的薪水在4000-6000之间的人数
select count(*)as 人数
from employee
where salary between 4000 and 6000

22、查询表中的同一部门的职工的平均工资,但只查询"住址"是"上海市"的员工
select avg(salary) avg_sal,dept 
from employee 
where addr like '上海市%'
group by dept

23、将表中住址为"上海市"的员工住址改为"北京市"
update employee 
set addr like '北京市'
where addr like '上海市'

24、查找业务部或会计部的女员工的基本信息。
select emp_no,emp_name,dept
from employee 
where sex='F'and dept in ('业务','会计')

25、显示每种产品的销售金额总和,并依销售金额由大到小输出。
select prod_id ,sum(qty*unit_price)
from sale_item 
group by prod_id
order by sum(qty*unit_price) desc

26、选取编号界于'C0001'和'C0004'的客户编号、客户名称、客户地址。
select CUST_ID,cust_name,addr
from customer 
where cust_id between 'C0001' AND 'C0004'

27、计算出一共销售了几种产品。
select count(distinct prod_id) as '共销售产品数'
from sale_item 

28、将业务部员工的薪水上调3%。
update employee
set salary=salary*1.03
where dept='业务'

29、由employee表中查找出薪水最低的员工信息。
select *
from employee
where salary=
(select min(salary )
from employee )

30、使用join查询客户姓名为"客户丙"所购货物的"客户名称","定单金额","定货日期","电话号码"
select a.cust_id,b.tot_amt,b.order_date,a.tel_no
from customer a join sales b
on a.cust_id=b.cust_id and cust_name like '客户丙'

31、由sales表中查找出订单金额大于"E0013业务员在1996/10/15这天所接每一张订单的金额"的所有订单。
select *
from sales
where tot_amt>all
(select tot_amt 
from sales 
where sale_id='E0013'and order_date='1996/10/15')
order by tot_amt

32、计算'P0001'产品的平均销售单价
select avg(unit_price)
from sale_item
where prod_id='P0001'

33、找出公司女员工所接的定单
select sale_id,tot_amt
from sales
where sale_id in 
(select sale_id from employee
where sex='F')

34、找出同一天进入公司服务的员工
select a.emp_no,a.emp_name,a.date_hired
from employee a
join employee b
on (a.emp_no!=b.emp_no and a.date_hired=b.date_hired)
order by a.date_hired

35、找出目前业绩超过232000元的员工编号和姓名。
select emp_no,emp_name
from employee 
where emp_no in
(select sale_id
from sales 
group by sale_id
having sum(tot_amt)<232000)

36、查询出employee表中所有女职工的平均工资和住址在"上海市"的所有女职工的平均工资
select avg(salary)
from employee
where sex like 'f'
union
select avg(salary)
from employee
where sex like 'f' and addr like '上海市%'

37、在employee表中查询薪水超过员工平均薪水的员工信息。
Select * 
from employee 
where salary>( select avg(salary) 
from employee)

38、 找出目前销售业绩超过10000元的业务员编号及销售业绩,并按销售业绩从大到小排序。
Select sale_id ,sum(tot_amt)
from sales 
group by sale_id 
having sum(tot_amt)>10000
order by sum(tot_amt) desc

39、 找出公司男业务员所接且订单金额超过2000元的订单号及订单金额。 
Select order_no,tot_amt
From sales ,employee
Where sale_id=emp_no and sex='M' and tot_amt>2000

40、 查询sales表中订单金额最高的订单号及订单金额。
Select order_no,tot_amt from sales 
where tot_amt=(select max(tot_amt) from sales)

41、 查询在每张订单中订购金额超过4000元的客户名及其地址。
Select cust_name,addr from customer a,sales b 
where a.cust_id=b.cust_id and tot_amt>4000

42、 求出每位客户的总订购金额,显示出客户号及总订购金额,并按总订购金额降序排列。
Select cust_id,sum(tot_amt) from sales
Group by cust_id 
Order by sum(tot_amt) desc

43、 求每位客户订购的每种产品的总数量及平均单价,并按客户号,产品号从小到大排列。
Select cust_id,prod_id,sum(qty),sum(qty*unit_price)/sum(qty)
From sales a, sale_item b
Where a.order_no=b.order_no
Group by cust_id,prod_id
Order by cust_id,prod_id

44、 查询订购了三种以上产品的订单号。
Select order_no 
from sale_item
Group by order_no
Having count(*)>3

45、 查询订购的产品至少包含了订单3号中所订购产品的订单。
Select distinct order_no
From sale_item a
Where order_no<>'3'and not exists ( 
Select * from sale_item b where order_no ='3' and not exists 
(select * from sale_item c where c.order_no=a.order_no and c.prod_id=b.prod_id))

46、 在sales表中查找出订单金额大于"E0013业务员在1996/11/10这天所接每一张订单的金额"的所有订单,并显示承接这些订单的业务员和该订单的金额。
Select sale_id,tot_amt from sales
where tot_amt>all(select tot_amt 
from sales 
where sale_id='E0013' and order_date='1996-11-10') 

47、 查询末承接业务的员工的信息。
Select *
From employee a
Where not exists 
(select * from sales b where a.emp_no=b.sale_id)

48、 查询来自上海市的客户的姓名,电话、订单号及订单金额。
Select cust_name,tel_no,order_no,tot_amt
From customer a ,sales b
Where a.cust_id=b.cust_id and addr='上海市'

49、 查询每位业务员各个月的业绩,并按业务员编号、月份降序排序。
Select sale_id,month(order_date), sum(tot_amt) 
from sales 
group by sale_id,month(order_date)
order by sale_id,month(order_date) desc

50、 求每种产品的总销售数量及总销售金额,要求显示出产品编号、产品名称,总数量及总金额,并按产品号从小到大排列。 
Select a.prod_id,prod_name,sum(qty),sum(qty*unit_price)
From sale_item a,product b
Where a.prod_id=b.prod_id 
Group by a.prod_id,prod_name
Order by a.prod_id
51、 查询总订购金额超过'C0002'客户的总订购金额的客户号,客户名及其住址。
Select cust_id, cust_name,addr
From customer
Where cust_id in (select cust_id from sales 
Group by cust_id
Having sum(tot_amt)>
(Select sum(tot_amt) from sales where cust_id='C0002'))

52、 查询业绩最好的的业务员号、业务员名及其总销售金额。
select emp_no,emp_name,sum(tot_amt)
from employee a,sales b
where a.emp_no=b.sale_id
group by emp_no,emp_name
having sum(tot_amt)=
(select max(totamt)
from (select sale_id,sum(tot_amt) totamt
from sales
group by sale_id) c)

53、 查询每位客户所订购的每种产品的详细清单,要求显示出客户号,客户名,产品号,产品名,数量及单价。
select a.cust_id, cust_name,c.prod_id,prod_name,qty, unit_price
from customer a,sales b, sale_item c ,product d
where a.cust_id=b.cust_id and b.order_no=c.order_no and c.prod_id=d.prod_id

54、 求各部门的平均薪水,要求按平均薪水从小到大排序。
select dept,avg(salary) 
from employee
group by dept 
order by avg(salary)

一.一数额妄图

style=”font-size: 1.167rem;”>create table exam(

  id
int primary key auto_increment,

 
name varchar(20) not null,

 
chinese double,

 
math double,

 
english double

style=”font-size: 1.167rem;”>);

style=”font-size: 1.167rem;”>insert into exam
values(null,’关羽’,85,76,60);

style=”font-size: 1.167rem;”>insert into exam
values(null,’张飞’,70,75,70);

style=”font-size: 1.167rem;”>insert into exam
values(null,’赵云’,90,65,95);

style=”font-size: 1.167rem;”>insert into exam
values(null,’刘备’,97,50,50);

style=”font-size: 1.167rem;”>insert into exam
values(null,’曹操’,90,89,80);

style=”font-size: 1.167rem;”>insert into exam
values(null,’司马懿’,90,67,65);

style=”font-size: 1.167rem;”>insert into exam
values(null,’刘阿斗’);

1、数据库简介

SQL语法格式:

select
<查询的目的>from<对象所在的文书>
Delete<删除的目的>from<对象所在的文件>
insert <增多的表(增多的列)> select
<‘增加的数据’>或values<(‘增多的数据’)>
update <修改对象所在表> set
<修改对象>=<值> where
<条件对象>=<‘条件内容’>

create database【加多类型—数据库】
<数据库名>
on【增添到何等职位】
(
name='<数据库名>’,

filename=’E:\SQL数据库\Tourism.Mdf’【'<路线消息+数据库名.Mdf>’】
)
create table【增多类型—表】
<表名>
(
<列名> <数据格式>
<约束>【identity(一,1) primary key—主键】,
<列名> <数据格式>
<约束>【check—其余约束】
)
foreign key(<列名>) references
<表名>(<列名>)【外键—从本表的列与目的表的列相连】

select * into <备份表名> from <目的表名> where 一=0【不对等的口径只备份列名、约束,不备份数据】

 

壹.二 数据查询

style=”font-size: 一.1陆七rem;”>文件结构:

style=”font-size: 1.167rem;”>名字:    

style=”font-size: 1.167rem;”>语法:

█▓     查询全数音讯

     
 select * from 表名

█▓    查询内定列的新闻

       
select 列名,列名… from 表名;

█▓     条件查询

       
select * from表名 where 条件

 

█▓    运算符

        

 

 

正如运算符

>  <<=  >=  =<>

不止、小于、大于/小于等于、不对等

between 1 and 10

呈现某一间距的值:1—10之内

in(1,2,3)

【997755.com澳门葡京】Server数据库基础,MySQL学习笔记一。展现在in列表中的值:一、二、三随意一个

Like ‘张_’

Like ‘张%’

混淆查询:%表示零或随便八个字符,_意味着三个字符.

例子1:张三丰      like ‘张%’

例子2:张三        like ‘张_’

is null、is not null

是还是不是为空

 

逻辑运算符

and&&

多少个原则还要创造

or||

四个标准化任性1个起家

not!

不成立,例如:where
not(age>18)

█▓     
 虑重

        查询排重:select distinct 列名 from 表名 where 条件;

 

█▓     
 别称以及列运算

        select 列名 as 别名, 列名 as 别名 … from 表名 where
条件;

 

█▓     order by 排序 

        select * from 表名 order by 列名 asc desc;

█▓     关于null 问题 

        通过 ifnull(values,default)解决 

 

█▓    SQL中聚合 / 聚焦函数

     
  聚焦函数:八个数据进行演算,运算出三个结果。举例,求和,平均值,最大值,最小值。

997755.com澳门葡京 1

        语法:select avg(列名) from 表名;都以身处 select 后

 

█▓  █▓  █▓      group by 分组查询

            select  … from … group by 列名;

 

 

█▓  █▓  █▓ █▓  █▓  █▓ █▓  █▓  █▓ █▓  █▓ 珍视计算 select
语句实施顺序
  █▓  █▓ █▓  █▓  █▓ █▓  █▓  █▓ █▓  █▓  █▓ 

 

select
…要显得的内容.. from …表名.. where 条件…. group by …分组的列 …having
…分组后的标准… order by …排序

 

select …4… from
…1.. where …2.. group by ..3…having ..5… order by …6.

 

 

一、 根据数据库的进化时间各类,首要出现了以下种类数据库系统:

二、数据备份和恢复生机

█▓  █▓  █▓    
 1.备份

    

语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路线

 █▓  █▓ █▓      
 2.恢复

        复苏措施壹:

                一.创制数据库

                           
备份的时候,未有备份创设数据库的语句,当须要复苏有些具体数额的时候须要手动创制

                  2. 导入数据

                    source D://mydb.sql

          恢复生机措施二:

                一.开立数据库

                 二.语法:mysql -u 用户名 -p 导入库名 <
硬盘SQL文件相对路线

                

Ø 网状型数据库

三、外键约束

 

加上国外国语高校键须要留意的主题素材


假诺从表要去加多一个外键约束。供给主表被引用的字段是主键大概唯一的。平时采取主键。


假设要删减主表中的数据。须要在从表中这么些数目,要未有被引用,才足以去删除。


要是要向从表中去丰裕多少。须要在主表中,要有对应的数码。才方可去丰硕。


假设要删除表。要先删除从表。然后去删除主表。


新建表的时候。必要先去创立主表,然后去制造从表。

 

效果:保持数据的完整性,和卓有成效。

 

 

一.增加外键约束的语法

       
   
创造表之后加多外键

█▓  █▓        alter table 从表名称    add foreign key
(外键列的称呼)references 主表名称(主键)

 

               
创立表的时候增加外键

/*成立单位表*/

create table dept(

       id int primary key auto_increment,

       name varchar(20)

);

/*创造职员和工人表*/

create table employee(

       id int primary key auto_increment,

       name varchar(20),

       age int ,

       salary double,

       dept_id int,

       foreign key (dept_id) references
dept(id)

);

 

总结:

库的操作

创建库:create database 库名 character
set 编码表;

删除库:drop database 库名;

查询库:show databases;

查看库的编码表:show create database 库名;

更改库:use 库名;

查阅当前正在接纳的库:select database();

修改库的编码表:alter database 库名 character
set 编码表;

 

表本人的操作

创造表:create table 表名(
列名 列的体系(长度) 
类的束缚
,列名 列的种类(长度) 
类的约束…… );

删除表:drop table 表名;

查询表:show tables;

查看表的结构:desc 表名;

查看表的编码表:show create table 表名;

修改表:alter table 表名 增/删/改 列名 列的类别(长度)
约束;

997755.com澳门葡京,add/drop/change/modify

修改表名:rename table 旧表名 to
新表名;

 

 

表中多少的操作

增:insert into 表名(列名)
values(值);

删:delete from 表名 where
条件;  truncate

改:update 表名 set
列名=值 ,列名=值
where 条件;

查:select 列名 as
别名 ,列名 as 别名… from
表名  where 条件 group by 列名 having 条件 order by 排序.

询问排重:select distinct 列名 from
表名 where 条件;

 

 

聚合函数:

count 计算个数、sum求和、avg 平均值、max、min

在利用那多少个函数举办数据的总计分析时,有时要求对数码表中的列举办数量的分组管理。group by

 

分组
group by :

 

 

排序:order  by 列名  asc | desc;

 

 

 

 

 

 

 

 

 

<wiz_tmp_tag id=”wiz-table-range-border” contenteditable=”false”
style=”display: none;”>

 

 

 

 

根源为知笔记(Wiz)

Ø 档案的次序型数据库

Ø 关系型数据库

Ø 面向对象数据库

地点4中数据库系统中,关系型数据库使用最为布满。面向对象数据库则是由面向对象语言催生的新式数据库,近来的有个别数据库系统,如:SQL
Server 二零零五、Oracle十g等都从头增添面向对象的特征。

二、常用基本SQL语句/语法

Ø SQL语句基础理论

SQL是操作和探索关系型数据库的正规语言,标准SQL语句可用来操作然后关系型数据库。

正式的SQL语句平常划分为以下种类:

查询语句:首要由于select关键字完毕,查询语句是SQL语句中最复杂,效率最丰盛的话语。

DML(Data Munipulation
Language,数据操作语言)语句,那组DML语句修改后数据将保持较好的1致性;操作表的说话,如插入、修改、删除等;

DDL(Data Definition
Language,数据定义语言)语句,操作数据对象的言语,有create、alter、drop。

DCL(Data Control
Language,数据调整语言)语句,首要有grant、revoke语句。

政工调控语句:根本有commit、rollback和savepoint七个十分重要字实现

DDL语句

DDL语句是操作数据库对象的讲话,包含创设create、删除drop、修改alter数据库对象。

大规模数据库对象

对象名称

对应关键字

描述

table

表是数据库存储的逻辑单元,以行和列的形式存在;列是字段,行就是一条数据记录

数据字典

 

就是系统表,存储数据库相关信息的表,系统表里的数据通常有数据库系统维护。系统表结构和数据,开发人员不应该手动修改,只能查询其中的数据

视图

view

一个或多个数据表里的数据的逻辑显示,视图就是一张虚拟的表,并不真正存储数据

约束

constraint

执行数据检验规则,用于保证数据完整性的规则

索引

index

用于提高查询性能,相当于书的目录

函数

function

用于完成一个特定的计算,具有返回值和参数

存储过程

procedure

完成某项完整的业务处理,没有返回值,但可通过传出参数将多个值传个调用环境

触发器

trigger

相当于一个事件的监听器,当数据库发生特定的事件后,触发器被触发,完成响应处理

地点的目的都得以透过用create、alter、drop落成有关的创始、修改、删除操作。

常用数据类型

列类型

说明

tinyint/smallint/mediumint int(integer)/bigint

1字节、2字节、3字节、4字节、8字节整数,又可分有符号和无符号两种。这些整数类型的区别仅仅表现范围不同

float/double

单精度、双精度浮点类型

decimal(dec)

精确小数类型,相当于float和double不会产生精度丢失问题

date

日期类型,不能保存时间。当Java里的Date对象保存到该类型中,时间部分丢失

time

时间类型,不能保存日期。当Java的Date对象的保存在该类型中,日期部分丢失

datetime

日期、时间类型

timestamp

时间戳类型

year

年类型,仅保存年份

char

定长字符串类型

varchar

可变长度字符串类型

binary

定长二进制字符串类型,它以二进制形式保存字符串

varbinary

可变长度的二进制字符串类型,二进制形式保存字符串

tingblob/blob

mediumblob/longblob

1字节、2字节、3字节、4字节的二进制大对象,可存存储超图片、音乐等二进制数据,分别可存储:255/64K/16M/4G的大小

tingtext/text

mediumtext/longtext

1字节、2字节、3字节、4字节的文本对象,可存储超长长度的字符串,分别可存储:255/64K/16M/4G的大小的文本

enum(‘val1’, ‘val2’, …)

枚举类型,该列的值只能是enum括号中出现的值的之一

set(‘value1’, ‘value2’, …)

集合类型,该列的值可以是set中的一个或多个值

Ø 常用查询

MySQL甘休符是“;”截至。

壹、    展现全体数据库

show databases;

二、    删除数据库

drop database dbName;

三、    创制数据库

create database [if not exists] dbName;

中括号部分可选的,剖断该数量不存在就创制

四、    切换、使用钦定数据库

use dbName;

五、    展现当前使用数据库全体的表对象

show tables;

6、    呈现表结构describe(desc)

desc tableName;

7、    创设一张表

create table user (

        –int 整型

        uId int,

        –小数

        uPrice decimal,

        –普通长度文本,default设置私下认可值

        uName varchar(255) default ‘zhangsan’,

        –超长文本

        uRemark text,

        –图片

        uPhoto blob,

        –日期

        uBirthday datetime

);

八、    子查询建表方法

一些列名相称格局:

create table userInfo (

name varchar(20),

sex char

)

as

select name, sex from user;

上边的列名和子查询的列名以及项目要对应

1切列名方式:

create table userInfo

as

select * from user;

平昔将全方位表的门类和数据备份到新表userInfo中

九、    加多表字段

增加单列

alter table user add tel varchar(11) default ‘02012345678’;

拉长多列

alter table user

add (

photo blob,

birthday date

);

上边就同时增加了多列字段

十、    修改表字段

修改tel列

alter table user modify tel varchar(15) default ‘02087654321’;

修改tel列的地方,在率先列显示

alter table user modify tel varchar(15) default ‘02087654321’ first;

修改tel列的任务,在钦命列之后显得

alter table user modify tel varchar(15) default ‘02087654321’ after age;

专注:alter modify不协理1遍修改多少个列,可是Oracle支持多列修改

而是MySQL能够透过四个modify的不2秘诀产生:

alter table user

modify tel varchar(15) default ‘02087654321’ first,

modify name varchar(20) after tel;

11、    删除钦命字段

alter table user drop photo;

1贰、    重命名表数据

表重命名

alter table user rename to users;

字段重命名

alter table users change name u_name varchar(10);

alter table users change sex u_sex varchar(10) after u_name;

假定须求转移列名建议使用change,纵然急需更改数据类型和显示地点能够行使modify

13、 删除表

drop table users;

drop删除表会删除表结构,表对象将不设有数据中;数据也不会存在;表内的对象也不设有,如:索引、视图、约束;

truncate删除表

truncate都被当成DDL出来,truncate的机能正是去除该表里的一体数码,保留表结构。也正是DDL中的delete语句,

然则truncate比delete语句的速度要快得多。可是truncate不能够带条件删除钦赐数量,只会删除全体的数据。如若剔除的表有外键,

去除的进程类似于delete。但新本子的MySQL中truncate的快慢比delete速度快。

Ø 约束

MySQL中约束保存在information_schema数据库的table_constraints中,可以经过该表查询约束消息;

封锁主要产生对数据的印证,有限扶助数据库数据的完整性;如若有互相注重数据,保障该数据不被删去。

常用5类约束:

not null:非空约束,钦点某列不为空

unique: 唯壹约束,钦命某列和几列组合的数额无法再度

primary key:主键约束,钦定某列的数据不能够再一次、唯一

foreign key:外键,钦命该列记录属于主表中的一条记下,参照另一条数据

check:检查,钦命一个表达式,用于核实钦点数量

MySQL不帮忙check约束,但足以行使check约束,而尚未其余意义;

听说约束数据列限制,约束可分为:

单列约束:每种约束只约束一列

多列约束:各种约束约束多列数据

MySQL中约束保存在information_schema数据库的table_constraints中,可以因而该表查询约束信息;

1、    not null约束

非空约束用于确定保障当前列的值不为空值,非空约束只可以出现在表对象的列上。

Null类型特征:

有着的品种的值都能够是null,包涵int、float等数据类型

空字符串“”是不对等null,0也不等于null

create table temp(

        id int not null,

        name varchar(255) not null default ‘abc’,

        sex char null

)

地点的table加上了非空约束,也得以用alter来修改或充实非空约束

增添非空约束

alter table temp

modify sex varchar(2) not null;

撤废非空约束

alter table temp modify sex varchar(2) null;

注销非空约束,扩展默许值

alter table temp modify sex varchar(2) default ‘abc’ null;

2、    unique

唯一约束是钦命table的列或列组合不能够重复,保险数据的唯1性。即使唯1约束不允许出现重复的值,但是足感觉三个null

同2个表可以有八个唯一约束,两个列组合的羁绊。在开立唯一约束的时候,假若不给唯一约束名称,就私下认可和列名同样。

唯一约束不仅能够在二个表内创设,而且能够同时多表创设组合唯一约束。

MySQL会给唯一约束的列上私下认可创制贰个唯一索引;

create table temp (

        id int not null,

        name varchar(25),

        password varchar(16),

        –使用表级约束语法,

        constraint uk_name_pwd unique(name, password)

);

意味着用户名和密码组合不可能再一次

增加唯1约束

alter table temp add unique(name, password);

alter table temp modify name varchar(25) unique;

去除约束

alter table temp drop index name;

3、    primary key

主键约束也正是唯一约束+非空约束的重组,主键约束列不容许再度,也不一致意出现空值;假使的多列组合的主键约束,

那正是说那些列都不允许为空值,并且结合的值不容许再一次。

种种表最八只允许2个主键,营造主键约束能够在列品级创设,也足以在表品级上成立。MySQL的主键名总是P昂CoraIMAENVISIONY,

当创设主键约束时,系统暗中同意会在所在的列和列组合上创立相应的无与伦比索引。

列模式:

create table temp(

    /*主键约束*/

    id int primary key,

    name varchar(25)

);

create table temp2(

    id int not null,

    name varchar(25),

    pwd varchar(15),

    constraint pk_temp_id primary key(id)

);

结合形式:

create table temp2(

    id int not null,

    name varchar(25),

    pwd varchar(15),

    constraint pk_temp_id primary key(name, pwd)

);

alter删除主键约束

alter table temp drop primary key;

alter加多主键

alter table temp add primary key(name, pwd);

alter修改列为主键

alter table temp modify id int primary key;

安装主键自增

create table temp(

        id int auto_increment primary key,

        name varchar(20),

        pwd varchar(16)

);

auto_increment自增方式,设置自增后在插入数据的时候就不必要给该列插入值了。

4、    foreign key 约束

外键约束是确认保障八个或四个表之间的参考完整性,外键是创设于三个表的四个字段或是八个表的多个字段之间的参阅关系。

也便是说从表的外键值必须在主表中能找到或然为空。

当主表的笔录被从表参照时,主表的笔录将差别意删除,借使要删减数据,需求先删除从表中信赖该记录的数额,

下一场才能够去除主表的数据。还有壹种便是级联删除子表数据。

留神:外键约束的参照列,在主表中援引的只好是主键或唯一键约束的列,假定引用的主表列不是独占鳌头的笔录,

那么从表引用的数码就不分明记录的任务。同一个表能够有四个外键约束。

始建国门外键约束:

主表

create table classes(

        id int auto_increment primary key,

        name varchar(20)

);

从表

create table student(

        id int auto_increment,

        name varchar(22),

        constraint pk_id primary key(id),

        classes_id int references classes(id)

);

通常先建主表,然后再建从表,那样从表的参考引用的表才存在。

表等第创设外键约束:

create table student(

        id int auto_increment primary key,

        name varchar(25),

        classes_id int,

        foreign key(classes_id) references classes(id)

);

上边包车型大巴创办外键的主意未有点名约束名称,系统会暗中同意给外键约束分配外键约束名称,命名称叫student_ibfk_n,

内部student是表名,n是当前封锁从一开首的整数。

点名约束名称:

create table student(

        id int auto_increment primary key,

        name varchar(25),

        classes_id int,

        /*钦命约束名称*/

        constraint fk_classes_id foreign key(classes_id) references
classes(id)

);

多列外键组合,必须用表品级约束语法:

create table classes(

        id int,

        name varchar(20),

        number int,

        primary key(name, number)

);

create table student(

        id int auto_increment primary key,

        name varchar(20),

        classes_name varchar(20),

        classes_number int,

        /*表品级联合外键*/

        foreign key(classes_name, classes_number) references
classes(name, number)

);

删除外键约束:

alter table student drop foreign key student_ibfk_1;

alter table student drop foreign key fk_student_id;

日增外键约束

alter table student add foreign key(classes_name, classes_number)
references classes(name, number);

自引用、自关联(递归表、树状表)

create table tree(

        id int auto_increment primary key,

        name varchar(50),

        parent_id int,

        foreign key(parent_id) references tree(id)

);

级联删除:删除主表的数据时,关联的从表数据也删除,则需求在创制外键约束的背后增添on
delete cascade

或on delete set
null,前者是级联删除,后者是将从表的关联列的值设置为null。

create table student(

        id int auto_increment primary key,

        name varchar(20),

        classes_name varchar(20),

        classes_number int,

        /*表品级联合外键*/

        foreign key(classes_name, classes_number) references
classes(name, number) on delete cascade

);

5、    check约束

MySQL能够运用check约束,但check约束对数据证实未有其余意义。

create table temp(

        id int auto_increment,

        name varchar(20),

        age int,

        primary key(id),

/*check约束*/

check(age > 20)

);

下面check约束供给age必须大于0,但尚未其余效果。但是制造table的时候未有其它错误或警示。

 

Ø 索引

目录是存放在在格局(schema)中的四个数据库对象,索引的机能正是增高对表的搜索查询速度,

目录是透过快速访问的主意来进行高效稳固数据,从而收缩了对磁盘的读写操作。

目录是数据库的三个目的,它无法独立存在,必须对某些表对象开始展览依赖。

提醒:索引保存在information_schema数据Curry的STATISTICS表中。

开创索引格局:

机关:当表上定义主键约束、唯壹、外键约束时,该表会被系统活动加多上索引。

手动:手动在相关表或列上扩充索引,升高查询速度。

剔除索引格局:

自动:当表对象被删去时,该表上的目录自动被删除

手动:手动删除钦定表对象的有关列上的目录

目录类似于书本的目录,能够比异常的快稳固到相关的数据,1个表能够有多少个目录。

创设索引:

create index idx_temp_name on temp(name);

组合索引:

create index idx_temp_name$pwd on temp(name, pwd);

去除索引:

drop index idx_temp_name on temp;

Ø 视图

视图就是1个表或多个表的询问结果,它是一张虚拟的表,因为它并无法积存数据。

视图的机能、优点:

限制对数据的拜访

让复杂查询变得轻松

提供数据的独立性

可以产生对同样数量的不如彰显

   

开创、修改视图

create or replace view view_temp

as

    select name, age from temp;

平凡大家并不对视图的多寡做修改操作,因为视图是一张虚拟的表,它并不存款和储蓄实际多少。如若想让视图不被涂改,能够用with
check option来形成限制。

create or replace view view_temp

as

    select * from temp

with check option;

修改视图:

alter view view_temp

as

    select id, name from temp;

删除视图:

drop view view_temp;

呈现创立语法:

show create view v_temp;

Ø DML语句

DML首要针对数据库表对象的数额来讲的,一般DML达成:

安排新数据

修改已增添的数目

剔除不须求的数额

①、    insert into 插入语句

insert into temp values(null, ‘jack’, 25);

主键自增能够不插入,所以用null代替

指定列

insert into temp(name, age) values(‘jack’, 22);

在表前面边带括号,括号中写列名,values中写钦命列名的值就能够。当省略列名就表示插入全体数额,

小心插入值的相继和列的逐壹需要保持壹致。

Set方式插入,也足以钦点列

insert into temp set id = 7, name = ‘jason’;

MySQL中外键的table的外键引用列能够插入数据足感觉null,不参照主表的数量。

使用子查询插入数据

insert into temp(name) select name from classes;

多行插入

insert into temp values(null, ‘jack’, 22), (null, ‘jackson’ 23);

二、    update 修改语句

update首要实现对数据的改变操作,能够修改一条或多条数据。修改多条或钦点条件的多少,须求用where条件来落成。

修改全体数据

update temp set name = ‘jack2’;

持有的数码的name会被改变,倘若退换多列用“,”分开

update temp set name = ‘jack’, age = 22;

修改钦赐条件的记录供给用where

update temp set name = ‘jack’ where age > 22;

三、    delete 删除语句

删去table中的数据,能够去除全体,带条件得以去除钦命的笔录。

去除全部数据

delete from temp;

删去钦点条件数据

delete from temp where age > 20;

Ø select 查询、function 函数

select查询语句用得最布满、成效也最足够。能够做到单条记录、多条记下、单表、多表、子查询等。

一、    查询某张表全数数据

select * from temp;

*意味着全数列,temp代表表名,不带条件就询问全数数据

二、    查询钦定列和原则的数量

select name, age from temp where age = 22;

查询name和age这两列,age 等于22的数据。

三、    对查询的数额开始展览演算操作

select age + 2, age / 2, age – 2, age * 2 from temp where age – 2 >
22;

四、    concat函数,字符串连接

select concat(name, ‘-eco’) from temp;

concat和null进行再而三,会导致连日后的数目产生null

五、    as 对列重命名

select name as ‘名称’ from temp;

as也能够简轻松单不写,效果一样

假若重命名的列名出现特殊字符,如“‘”单引号,那就要求用双引号引在外界

select name as “名’称” from temp;

陆、    也得以给table去小名

select t.name Name from temp as t;

7、    查询常量

类似于SQL Server

select 5 + 2;

select concat(‘a’, ‘bbb’);

8、    distinct 去掉重复数据

select distinct id from temp;

多列将是构成的重复数据

select distinct id, age from temp;

9、    where 条件查询

抢先>、大于等于>=、小于<、小于等于<=、等于=、不对等<>

都得以出现在where语句中

select * from t where a > 2 or a >= 3 or a < 5 or a <= 6 or
a = 7 or a <> 0;

10、    and 并且

select * from temp where age > 20 and name = ‘jack’;

询问名称等于jack并且年龄大于20的

11、    or 或者

满足二个就能够

select * from tmep where name = ‘jack’ or name = ‘jackson’;

12、    between v and v2

过量等于v且小于等于v二

select * form temp where age between 20 and 25;

13、    in 查询

能够多少个标准 类似于or

select * from temp where id in (1, 2, 3);

询问id在括号中冒出的多少

1肆、    like 模糊查询

查询name以j开头的

select * from temp where name like ‘j%’;

查询name包含k的

select * from temp where name like ‘%k%’;

escape转义

select * from temp where name like ‘\_%’ escape ‘\’;

指定\为转义字符,上边的即可查询name中富含“_”的数据

15、    is null、is not null

查询为null的数据

select * from temp where name is null;

查询不为null的数额

select * from temp where name is not null;

16、    not

select * from temp where not (age > 20);

取小于等于20的多寡

select * from temp where id not in(1, 2);

17、    order by

排序,有desc、asc升序、降序

select * from temp order by id;

默认desc排序

select * from temp order by id asc;

多列组合

select * from temp order by id, age;

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website