Mysql

Mysql

数据类型

1数值型:bit(基本不是0就是1),tinyint,int,bigint

2字符型:char(定长),varchar(变长),longtext

3日期型:date(年月日),datetime(年月日时分秒),timestamp(精确到毫秒)

4枚举类型:enum(慎用,性能有问题)

5集合形:set

约束

1主键 primary key:不重复,不为空 自增长: auto increment 主键一般都是自增长

2唯一建 unique:不重复

3非空not null

4外键 foreign key Referencrs 存在依赖

mysql支持4大约束,oracle支持5个,check 例:check(gender in ('男','女'))

 CREATE TABLE course(
`cno` int(5) auto_increment COMMENT '课程编号,主键',
`cname` varchar(50) DEFAULT '' NOT NULL COMMENT '课程名称',
PRIMARY KEY(`cno`)
)
insert into course(cname) values ('Java');
insert into course(cname) values ('.Net');
insert into course(cname) values ('C#');
CREATE TABLE student16(
`id` BIGINT auto_increment,
`stuno` int(6) default 0 not null,
`stuname` varchar(50) default '' not null,
`birthday` date,
`cnum` int(5) default 0 not null,
PRIMARY KEY(`id`),
FOREIGN KEY(`cnum`) REFERENCES course(`cno`)
)

复制表

create table class_copy as select * from class

但是无法复制约束

数据库操作DML-增删改

1增加记录 insert into 表名(列名列表) values (值列表)

没写列名列表就要全部添加

添加多行记录
insert into userinfo(name,regtime) 
values 
('Tom1','2019-8-8 16:9:27'),
('Tom2','2019-8-8 16:9:27'),
('Tom3','2019-8-8 16:9:27');

2修改记录 update 表名 set 修改哪些列【where 哪些行】

binary 区分大小写

3删除数据 delete from 表名 {where 哪些行}

DML 数据操作语言:数据的增删改

DQL:查询

DDL数据定义语言:数据库对象的增删改

TPL事务控制语言:提交commit,回滚roollback

事务:一组DML语句

set autocommit=false 关闭自动提交

事务四大特性

① 原子性 :组成事务的DML语句,要么全成功【commit】,要么全失败【rollback】,不会出现半成功半失败的情况

② 一致性 :事务一旦结束,数据保持一致状态

③ 隔离性 :事务之间互不影响

④ 永久型 :事务一旦提交不能回滚

当执行了dcl或者ddl,上面的事务隐式提交

锁:这边要用,必须等待另一边把事务结束,提交完成

select 看什么 from 数据源

null值参与运算,结果一定是空值

select empno,ename,sal,sal*12+IFNULL(comm,0) 年薪,comm
from emp

列别名 通常用在运算表达式或函数上

特殊别名加双引【别命中有空格,特殊字符,区分大小写】

查询去重 distinct

特殊比较运算符

between and

in(参数列表) 等于其中任意一个

like 模糊查询 % 任意多个字符 _一个字符

转译符 \

不能用like 通配事件,不允许

is null

条件查询中不能使用列别名

排序

order by 根据列名排序

默认是升序 asc 降序是desc

排序可以用列别名,列序号(查询的第几列)因为运行顺序靠后

limit

函数

类似java中的方法,通常都有返回值

单行函数,一个返回值

多行函数 ,多个返回值

虚表dual

round (x,y)将x精确到小数点y位

truncate(x,y)截断 将x从小数点后y位截断

字符函数

length() 看看参数多长 char_length(返回多少个字符)

concat()连接 也可以连接列名

insert(x,y,z,a)从y开始,到第三个,把x中的替换成a

lower() |lcase() 将字符串全部装换成小写

upper()|ucase()将字符串全部装换成大写

replace(x,y,z)将x中的y,用z替换

substring(x,y)从x中的y开始截

日期函数

curtime() 时分秒 current_date() 获取当期日期函数 年月日

now() 年月日时分秒

timediff(x,y)时间差

datediff(x,y)天数差

date() time() year() month() day()选取时间的各个部分

-DATE_FORMAT(date,format):格式化日期;(重点)

select ename,hiredate,date_format(hiredate,'%Y-%m-%d %H:%i:%s') date

from emp

-- 计算时间间隔 TIMESTAMPDIFF()

select TIMESTAMPDIFF(hour,'2008-8-8','2019-8-30')

from dual

CASE

select empno,ename,deptno,(case deptno

                                                        when 10 then '会计部'

                                                        when 20 then '销售部'

                                                        when 30 then '管理部'

                                                        else '小卖部' END) 部门

多表连接

多表连接 :连接1张以上的表

笛卡尔积 : 一张表中的所有记录和另一张表中所有记录,都发生连接

查询员工姓名,工资,工资等级
SELECT ename,sal,grade,losal,hisal
FROM emp
JOIN salgrade
ON sal BETWEEN losal and hisal

自连接(内连接)

查询员工姓名和直接上级姓名
SELECT e.ename,m.ename
FROM emp e
JOIN emp m
ON e.mgr = m.empno

了解 : 交叉连结CROSS JOIN(笛卡尔积)、

自然连接NATURAL JOIN(相同类型、名称的字段做等值连接)、

USING 子句(指定某一列做等值连接)

掌握

join on

左【外】连接 以关键字左边表为主表,肯定显示

右【外】连接 以关键字右边表为主表,肯定显示

分组函数

在 WHERE 条件中不能直接使用

SUM,AVG,MAX,MIN,COUNT

MAX 最大值,MIN 最小值

NULL : ①影响运算;②不能比较

-- 分组函数不计算NULL值

group by(写在where 后面,order by前面)

使用分组函数时:查看字段不能随意写

SELECT 子句中,非分组函数必须写在GROUP BY后面语法才能通过

WHERE 筛选组前条件

HAVING 组后条件

查询每个部门的平均工资,部门编号,只显示平均工资2000以上的部门
SELECT AVG(sal) avgsal,deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000

子查询(嵌套查询)

子查询如果返回多行记录,不能使用单行比较运算符(>,<,=,>=,!=,<=)

oracle支持分组函数嵌套,mysql不支持,需要额外嵌套一层查询

查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
-- 注意:oracle支持分组函数嵌套,mysql不支持,需要额外嵌套一层查询
select d.deptno,dname,count(empno) counts
from emp e 
join dept d 
on e.deptno = d.deptno
group by d.deptno,dname
having counts > (select avg(counts)
                                 from (select count(empno) counts
                                            from emp e 
                                            group by deptno) a)

多行运算符

in

any 任意一个

all 全部

not in (查询,参数) 不能有NULL,必须处理

-- 查询比自己部门平均工资高的员工姓名,工资,部门编号,部门平均工资
select ename,sal,d.deptno,avgsal
from emp e
join (select deptno,avg(sal) avgsal from emp group by deptno) d
on e.deptno = d.deptno
where sal > avgsal

相关(高级)子查询

select ename,sal
from emp e
where sal = (select max(sal) from emp where deptno = e.deptno)

删除注意的问题:外键问题,默认情况下,外键是删不掉的

视图

本质就是(命名的)查询,如果你想频繁的调用这个查询,就建一个视图

CREATE VIEW emp_20
AS 
select * from emp where deptno = 20
drop view emp_20

索引

index

优点 :加快查询速度

-- 缺点 :①占内存;②降低了增删改速度

-- 索引是作用在列上的

-- 主键,唯一键,外键自带索引

-- 什么样的列适合加索引 :经常作为查询条件的,数据量大的时候

-- 建表直接给索引

CREATE TABLE index_tab(
`id` BIGINT auto_increment,
`name` varchar(20),
PRIMARY KEY(`id`),
index(`name`)
)

-- 建表后给索引

CREATE TABLE index_tab1(
`id` BIGINT auto_increment,
`name` varchar(20),
PRIMARY KEY(`id`)
)

CREATE INDEX aaa
ON index_tab1(`name`)

触发器

触发器就是某个表发生一个事件(增删改操作),然后自动的执行预先编译好的SQL语句,执行相关操作。触发器事件跟触发器中的SQL语句是原子性的(要么同时执行,要么同时不执行),这样保证了数据的完整性。

存储过程

简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

缺点:1不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

2.不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,659评论 0 8
  • 作者:烨竹 数据库的基本操作 登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 ...
    DragonRat阅读 1,368评论 0 7
  • .数据库 数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=...
    小Q逛逛阅读 963评论 0 2
  • 数据库基础 DB:专门存储和维护信息的容器(软件)数据库管理系统:管理数据库的软件。具有存储、安全、一致性、并发 ...
    _NineSun旭_阅读 350评论 0 1
  • 1.数据库的三范式 第一范式:是指原子性,属性不可分割,即表中的字段不可分割。所谓不可分割就是最小单位,不能再被拆...
    人间六月_阅读 329评论 0 0