mysql数据库基础 博客园_MySQL数据库基础

数据库的一些概念题:

DB DBMS 和DBS三者之间的关系

DBS(数据库系统) 包含DB(数据库)和DBMS(数据库管理系统)

DB:是指datebase(数据库)

DBS:是指datebase systerm (数据库系统)

DBMS:是指datebase mangement systerm(数据库管理系统)

区别:数据库就是存放数据的仓库,数据库管理系统就是用来管理数据库的,其中数据库系统是一个通称,包括数据库、数据库管理系统、数据库管理人员等的统称,是最大的范畴。

常见存储引擎的类型

39b48d68978aa5464a172810583486a3.png

需改表alter

4.修改表结构:

语法:1. 修改表名

ALTER TABLE 表名

RENAME 新表名;2. 增加字段

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…],

ADD 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…] FIRST;

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;3. 删除字段

ALTER TABLE 表名

DROP 字段名;4. 修改字段

ALTER TABLE 表名

MODIFY 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名

CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];

ALTER TABLE 表名

CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

ee870df06e3ba6f0d72a6345a5228a66.png

外键的设置

在员工表里面先设置 emp_id的字段然后再关联 emp表里面的字段

1、安装mysql和navicat

2、Mysql数据语法学习

数据库的种类:关系型数据库和非关系型数据库

mysql数据库的操作

查看数据库

show databases;

show create database db1;selectdatabase();

选择数据库

USE 数据库名

删除数据库

DROP DATABASE 数据库名;

修改数据库

alter database db1 charset utf8;

查入数据insert

1. 插入完整数据(顺序插入)

语法一:

INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

语法二:

INSERT INTO 表名 VALUES (值1,值2,值3…值n);2. 指定字段插入数据

语法:

INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);3. 插入多条记录

语法:

INSERT INTO 表名 VALUES

(值1,值2,值3…值n),

(值1,值2,值3…值n),

(值1,值2,值3…值n);4. 插入查询结果

语法:

INSERT INTO 表名(字段1,字段2,字段3…字段n)

SELECT (字段1,字段2,字段3…字段n) FROM 表2

WHERE …;

更新数据UPDATE

语法:

UPDATE 表名 SET

字段1=值1,

字段2=值2,

WHERE CONDITION(条件);

示例:

UPDATE mysql.user SET password=password(‘123’)

where user=’root’ and host=’localhost’;

一定要加where

mysql表的操作

表的数据类型:

#1. 数字:

整型:tinyinitintbigint

小数:float:在位数比较短的情况下不精准double:在位数比较长的情况下不精准0.000001230123123123存成:0.000001230000

decimal:(如果用小数,则用推荐使用decimal)

精准

内部原理是以字符串形式去存

#2. 字符串:char(10):简单粗暴,浪费空间,存取速度快

root存成root000000

varchar:精准,节省空间,存取速度慢

sql优化:创建表时,定长的类型往前放,变长的往后放

比如性别 比如地址或描述信息>255个字符,超了就把文件路径存放到数据库中。

比如图片,视频等找一个文件服务器,数据库中只存路径或url。

#3. 时间类型:

最常用:datetime

#4. 枚举类型与集合类型enum('male','female')set('play','music','read','study')

MariaDB [db1]> create table consumer(

-> name varchar(50),

-> sex enum('male','female'),

-> level enum('vip1','vip2','vip3','vip4','vip5'), #在指定范围内,多选一

-> hobby set('play','music','read','study') #在指定范围内,多选多

-> );

表的约束

7260ec3af3e3de4f094de64d89384b8e.png

#1、建立表关系:

#先建被关联的表,并且保证被关联的字段唯一 #----- 父表--------create table dep(

idintprimary key,

namechar(16),

commentchar(50)

);

部门表和员工表 foreign key设置在员工表

#再建立关联的表

create table emp(

idintprimary key,

namechar(10),

sexenum('male','female'),

dep_idint,

foreign key(dep_id) references dep(id)

on delete cascade # 删除同步 只要被关联的 ,关联的 也删除 解散it部门,其他关联it部门的员工也删除

on update cascade # 更新同步,

);

d8a9f7f8b9584f763c14c9e7ecec8c68.png

表与表之间的关系

分析步骤:

#1、先站在左表的角度去找

是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key(外键) 右表一个字段(通常是id)

#2、再站在右表的角度去找

是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

#3、总结:

#多对一:

如果只有步骤1成立,则是左表多对一右表

如果只有步骤2成立,则是右表多对一左表

#多对多

如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

#一对一:

如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

mysql字段的操作

mysql表的查询

单表查询和多表查询

select count(学号) as “总人数” FROM student;

这个as可以写也可以不写

单表查询:

http://www.cnblogs.com/linhaifeng/articles/7267592.html

1.单表查询的语法2.关键字的执行优先级(重点)3.简单查询4.where约束5.分组查询:group by 在where之后查询6.having 过滤7.查询排序:order by

fccc045ca582b7cb6fd021a9f8f1439f.png

8.限制查询得记录数:limit9.使用正则表达式查询

多表查询:

SELECT DISTINCT FROM

JOIN ONWHEREGROUP BYHAVINGORDER BYLIMIT

b940d839f6ee00d5994facd0e7d63cfc.png

内连接:只取两张表的共同部分select * from employee inner join department on employee.dep_id =department.id ;

左连接:在内连接的基础上保留左表的记录select * from employee left join department on employee.dep_id =department.id ;

右连接:在内连接的基础上保留右表的记录select * from employee right join department on employee.dep_id =department.id ;

全外连接:在内连接的基础上保留左右两表没有对应关系的记录select * from employee full join department on employee.dep_id =department.id ;select * from employee left join department on employee.dep_id =department.id

unionselect * from employee right join department on employee.dep_id = department.id ;

7.4 使用事务保证数据完整性

ca258e77cbb5129a81d211694a3f9a3c.png

事务就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。

注意:

MySQL事务处理只支持InnoDB和Berkeley DB数据表类型

ACID,指数据库事务正确执行的四个基本要素的缩写。

包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性。

使用场景:

银行的交易系统

原子性:执行事务要么都成功,要么都不成功

一致性:执行后,保存数据的一致性

隔离性:事务之间相互独立,互不影响

持久性:数据永远存储在数据库中

start transaction = begin等效

fb4cee749760868e8f474ddd49a95d81.png

start transaction;

update user set balance=900 where name='wsb'; #买支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

update user set balance=1090 where name='ysb'; #卖家拿到90元

commit;#出现异常,回滚到初始状态

start transaction;

update user set balance=900 where name='wsb'; #买支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

uppdate user set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到

rollback; #回滚到原来的状态

commit; #只有提交了,事务操作才完成

3f64b7a9d3a6a620bd0cd18589b291ec.png

d2ec107ebceab89cc4b2dec8108157ef.png

问题:有没有遇到脏读问题,怎么解决,用事务(隔离级别处理),事务是什么?

查看默认事务隔离级别

select @@tx_isolation;

35e501f977f49d677895f0682d19c8b4.png

63228e49fafb9b47ea3a0101640c03f7.png

1e018859ce793177312e43a6d024fe42.png

如何关闭和开启MySQL的自动提交?

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

在MySQL中执行命令时,通常都直接被确定提交了。也就是说用户不用意识此事,所有的命令都会被自动COMMIT。特别是当存储引擎为MyISAM的情况下,本身它是不支持事务处理的,只要执行了命令,所有的命令部会被提交。

这样的默认自动提交的功能就被称为自动提交功能。自动提交功能默认被置为ON的状态。但是,如果存储引擎为InnoDB 时,当执行了START TRANSACTION或BEGIN命令(MySQL事务处理-删除后回滚)后,将不会自动提交了,只有明确执行了COMMIT命令后才会被提交,在这之前可以执行ROLLBACK 命令回滚更新操作。

用户可以将自动提交功能强制置为OFF。这样用户执行SQL语句后将不会被提交了,而执行COMMIT命令才提交,执行ROLLBACK命令回壤。

下面是将自动提交功能置为ON以及置为OFF的具体语法。

将自动提交功能置为ON

SET AUTOCOMMIT=0;

将自动提交功能置为OFF

SET AUTOCOMMIT=1;

我们将演示自动提交功能设置为OFF后,会出现的什么样的变化。置为OFF,我们向表user里插入一条数据后,看看是否能回滚。

将自动提交功能设置为OFF,执行结果如下。

mysql> SET AUTOCOMMIT=0;

Query OK, 0 rows affected (0.00 sec)

View Code

MySQL的事务处理实现流程是什么?

如果存储引擎为InnoDB 时,不需要

将自动提交功能置为ON

SET AUTOCOMMIT=0;

1、关闭自动提交2、开始事务3、执行SQL语句操作4、要么rollback 要么commit

如果存储引擎为InnoDB 时,当执行了START TRANSACTION或BEGIN命令(MySQL事务处理-删除后回滚)后,将不会自动提交了,只有明确执行了COMMIT命令后才会被提交,在这之前可以执行ROLLBACK 命令回滚更新操作。

5、set autocommit=1;把提交变为初试状态

499f91de5c8ac133bb33aa32119a571a.png

7.5 使用DQL命令查询数据

mysql语言的分类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。1. 数据查询语言DQL

数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE

子句组成的查询块:

SELECTFROMWHERE

2.数据操纵语言DML

数据操纵语言DML主要有三种形式:1) 插入:INSERT2) 更新:UPDATE3) 删除:DELETE3. 数据定义语言DDL

数据定义语言DDL用来创建数据库中的各种对象-----表、视图、

索引、同义词、聚簇等如:

CREATE TABLE/VIEW/INDEX/SYN/CLUSTER| | | | |表 视图 索引 同义词 簇

DDL操作是隐性提交的!不能rollback4. 数据控制语言DCL

数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制

数据库操纵事务发生的时间及效果,对数据库实行监视等。如:1) GRANT:授权。2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。

回滚---ROLLBACK

回滚命令使数据库状态回到上次最后提交的状态。其格式为:

SQL>ROLLBACK;3) COMMIT [WORK]:提交。

在数据库的插入、删除和修改操作时,只有当事务在提交到数据

库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看

到所做的事情,别人只有在最后提交完成后才可以看到。

提交数据有三种类型:显式提交、隐式提交及自动提交。下面分

别说明这三种类型。

(1) 显式提交

用COMMIT命令直接完成的提交为显式提交。其格式为:

SQL>COMMIT;

(2) 隐式提交

用SQL命令间接完成的提交为隐式提交。这些命令是:

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,

EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自动提交

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,

系统将自动进行提交,这就是自动提交。其格式为:

SQL>SET AUTOCOMMIT ON;

View Code

练习:创建学生表、教师表、课程表、成绩表

1、创建学生表:

create table student(学号 int primary key not null ,姓名 char null,年龄 int not null,性别 enum('男','女'))

f5df524247223a2e0b22c237f17b8392.png

2、创建教师表:

create table teacher(教师编号 int primary key not null,教师姓名 char)

3、创建课程表:与教师编号一对多关系

f12fb6b088ab3510402960a0712a502e.png

create table class(课程编号 int primary key not null,

课程名 char,教师编号 int,

foreign key(教师编号) references teacher(教师编号) on delete cascade on update cascade);

4、创建成绩表:成绩对应多个学生,成绩对应多个课程

9bdaf4b04ada76eb6fb21a68bc4ae026.png

create table score(学号 int,课程编号 int,成绩 int,foreign key(学号) references student(学号) on delete cascade on update cascade,

foreign key(课程编号) references class(课程编号) on delete cascade on update cascade);

cc3080d917f48b792faf363aae589d0f.png

插入数据:

插入学生数据:

insert into student(学号,姓名,年龄,性别) values(1001,'张三',10,'男'),(1002,'李四',11,'女')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回忆杀:2020年出自MIT的十大顶级热门研究

来源:学术头条 编译:阳光编审:王新凯尽管 2020 年是我们大多数人都希望去忘记的一年,但它仍然具有许多值得庆祝的研究突破。虽然新冠疫情的全球性爆发带来了新的挑战,但也正是因为这些挑战,MIT 的研究团队…

枚举类型使用

一个博客: https://blog.csdn.net/javazejian/article/details/71333103 阿里开发规范: 【参考】枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。 说明: 枚举其实就是特殊的类, 域成员均为常量&#xff…

多字段回溯 mysql_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

前言说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题……在这里插入图片描述第一次遇到它的时候应该是大一下或者大二这个期间,这个时间对啥都懵懵懂懂,啥都想学…

这一年,宇宙“面目”愈发清晰

来源:科技日报 深邃的星空,埋藏着无数奥秘,叩问2020年的宇宙苍穹,阵阵回响唤起惊奇与敬畏无数:人类首次在银河系外发现氧气、绘制迄今最大宇宙三维地图、发现“不可能存在”的中等质量黑洞……宇宙的秘密,正…

mysql connector net 6.9.3_MySQL Connector/Net 6.9.3 发布 MySQL Connector/Net 6.9.3下载

MySQL Connector/ODBC 是 MySQL 数据库的官方 .NET 平台驱动程序。MySQL Connector/Net 6.9.3 发布,此版本是 6.9 系列的第一个 GA 版本。Bugs 修复Adding a new column to an existing model as identity and PK failed when applying the migration. (Bug #192863…

在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标

大数据文摘出品来源:MIT编译:周熙在Warneken和Tomasello关于人类社会智力的经典实验中,一个18月大蹒跚学步的幼儿看着一个男人抱着一堆书走向一个未开封的柜子。当男子到达柜子时,他笨拙地将书在柜门上撞了几下,然后发…

django http404 详解

【引子】 今天在看django的官方文档的时候看到get_object_or_404这个函数感觉比较奇怪。这个主要来自于它的功能,如果要查询的对象 存在那么就返回对象;如果对象不存在那么就要报404 Not Found ;但是404 Not Found并不是它的返回值&#xff0…

这一年,科学高度不断刷新

来源:科技日报●存算一体架构在手写数字集上的识别准确率达到96.19%●截至12月14日21时,“天问一号”探测器已在轨飞行144天,飞行里程约3.6亿公里,距离地球超过1亿公里●嫦娥五号经历了11个阶段、23天的在轨工作,采集了…

python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...

一、"天天向上的力量"问题分析1.1 天天向上的力量基本问题:持续的价值一年365天,每天进步1%,累计进步多少呢?(1.01^{365})一年365天,每天退步1%,累计剩下多少呢?(0.99^{365})1.2 需求…

CNS三大刊2020年年度最佳论文全部出炉!脑科学一共4篇,我国学者入选1篇!

来源: brainnews编辑部、inature编辑部来源:生物谷旗下细胞公众号,药明康德团队旗下学术经纬公众号Cell ,Nature和Science 三大期刊2020年年度最佳论文全部公布,brainnews编辑部摘选其中跟脑科学相关的文章,跟大家一起…

redis创建像mysql表结构_Redis数据结构列表实现

双向链表linkedlistRedis实现的是标准的双向链表。链表节点定义:链表定义:总结链表实现:1.每个节点有前后节点指针,且第一个节点的指针为NULL,最后一个节点的指针为NULL(无环)。2.对双链表进行封装,链表第一个节点和最…

神经符号系统、因果推理、跨学科交互,李飞飞、Judea Pearl等16名学者共同探讨AI未来...

来源:机器之心去年,纽约大学心理学和神经科学教授 Gary Marcus 和深度学习先驱、2018 年图灵奖得主 Yoshua Bengio 就 AI 技术的发展方向展开了一场现场辩论。今年,Gary Marcus 与 Montreal.AI 负责人 Vincent Boucher 举办了第二场辩论。这次…

数字孪生城市应用【案例集】,附下载

来源:中国信通院等数字孪生城市经过三年的概念培育期,目前已经步入落地实施阶段,各地不同程度地推进数字孪生城市规划建设和行业应用创新实践。中国信息通信研究院联合数字孪生城市生态圈合作伙伴,在推出《数字孪生城市白皮书&…

安乐高机器人图纸_乐高机器人拼装图纸 | 手游网游页游攻略大全

发布时间:2015-12-26这是一个非常酷的乐高机器人,可以绘画的机器人.意大利工程师Daniele Benedettelli制造了这个乐高机器人,称其为"LEGONARDO".他的绘画动作是通过编程实现的,他将不会停止,直到你 ...标签:游戏资讯 八卦杂谈发布时间&#xf…

重磅!中国微纳机器人技术取得新突破,实现肿瘤的可视化精准治疗!

来源:机器人大讲堂科技的发展会带动相关领域共同进步,在科技进步越来越快的今天,一项技术的进步往往会同时打开好几个领域的技术难关,产生连锁反应,科技的边界也逐渐模糊,以新材料石墨烯的研究为例&#xf…

什么是本体论?

来源:人机与认知实验室【世界有无本体还是互为本体?这是两个非常有意思的问题,从牛顿绝对主义角度应该有,从爱翁相对主义应该无,从未来的发展看,应该是“变”——也许就是“易”?!主…

亚马逊首席技术官预测2021年将改变世界的八大技术趋势

来源:世界科技研究与发展2020年12月17日,亚马逊全球副总裁、首席技术官维尔纳•沃格尔(Werner Vogels)博士在亚马逊re:Invent全球大会上发表压轴演讲,分享了他对2021年科技趋势的预测。回顾2020年,Werner表…

《城市大脑全球标准研究报告2020》摘要内容

‍‍前言:《城市大脑全球标准研究报告2020》12月23在京正式发布,有近70位专家、领导和媒体记者出席了发布会,会后包括新华社、工人日报、中新社、科技日报、中国科学报、中国社会科学报、中国建设报、经济日报、中国经营报、经济观察报&#…

EasyExcel中处理内容占多个单元格

在一些业务需求中内容需要占用多个单元格的情况,如下图: 或者是这样 这样 总有一些奇怪怪的需求。 不过使用EasyExcel可以轻松处理这些变态的需求。EasyExcel中提供了ContentLoopMerge 注解就是为了处理这种问题的。下面先看看如何使用ContentLoopMe…

2021十大科技趋势来了!阿里巴巴达摩院全新发布

来源: 阿里技术阿里巴巴达摩院发布2021十大科技趋势,这是达摩院成立三年以来第三次发布年度科技趋势。2020年是不平凡的一年,经历疫情的洗礼,许多行业重启向上而生的螺旋,但疫情并未阻挡科技前进的脚步,量子…