数据库的一些概念题:

DB DBMS 和DBS三者之间的关系

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

DB:是指datebase(数据库)

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

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

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

常见存储引擎的类型

需改表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 旧字段名 新字段名 新数据类型 [完整性约束条件…];

外键的设置

在员工表里面先设置 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') #在指定范围内,多选多

-> );

表的约束

#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 # 更新同步,

);

表与表之间的关系

分析步骤:

#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

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

多表查询:

SELECT DISTINCT FROM

JOIN ONWHEREGROUP BYHAVINGORDER BYLIMIT

内连接:只取两张表的共同部分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 使用事务保证数据完整性

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

注意:

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

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

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

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

使用场景:

银行的交易系统

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

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

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

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

start transaction = begin等效

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; #只有提交了,事务操作才完成

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

查看默认事务隔离级别

select @@tx_isolation;

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

在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;把提交变为初试状态

7.5 使用DQL命令查询数据

mysql语言的分类

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('男','女'))

2、创建教师表:

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

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

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

课程名 char,教师编号 int,

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

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

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);

插入数据:

插入学生数据:

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

mysql数据库基础 博客园_MySQL数据库基础相关推荐

  1. mysql sql 优化 博客园_Mysql的SQL优化指北

    概述 在一次和技术大佬的聊天中被问到,平时我是怎么做Mysql的优化的?在这个问题上我只回答出了几点,感觉回答的不够完美,所以我打算整理一次SQL的优化问题. 要知道怎么优化首先要知道一条SQL是怎么 ...

  2. mysql总结 博客园_mysql总结

    1数据库概念(了解) 1.1什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: l 可存储大量数据: l 方便检索: l 保持数据的一致性.完整性: l 安全,可共享: l 通 ...

  3. mysql优化 博客园_MySQL优化

    MySQL优化步骤 首先学会如何定位到SQL语句 1.1查看SQL语句的执行次数 在MySQL中可以通过命令查看服务器该表状态信息 show status like 'Com_______'; 如果想 ...

  4. mysql总结 博客园_mysql 总结

    mysqlzong操作 mysql 连接 mysql -uroot -proot 查看所有数据库: show databases; 创建数据库:create database 数据库名: 使用(调用数 ...

  5. mysql 主从复制 博客园_mysql主从复制

    主从复制配置 ####################主服务器配置(192.168.56.149)########################### 1.修改主数据库mysql配置,找到主数据库的 ...

  6. java mysql 删除 博客园_mysql的增删改查

    增: 新增记录(部分字段):insert into table (字段1,字段2--) values(value1,value2,--) 新增记录(全部字段):insert into table  v ...

  7. 不需要mysql的php博客_不用数据库,做留言板(PHP)

    总共分三个部分:gorilla_main.php,gorilla.php,gorilla2.php gorilla_main.php 无标题文档 gorilla.php 无标题文档 $talk_bac ...

  8. java 入门 博客园_java入门基础

    什么是java? java是一门编程语言  编程语言有很多种 你比如 C语言 等等 为什么学习java呢! 因为你要和计算机交互  当然了你用汉语跟她说她听不懂 所以你要学习编程语言 那么额咱们的ja ...

  9. Mycat 月分片方法 - pursuer.chen - 博客园

    Mycat 月分片方法 - pursuer.chen - 博客园 从数据库生成ER图的工具:ERAlchemy - OPEN 开发经验库

最新文章

  1. oracle@命令_Oracle 常用运维命令整理
  2. VGG - Very Deep Convolutional Networks for Large-Scale Image Recognition
  3. 对DbRuleAuthorizationProvider的修改
  4. 指明方向与趋势!2019开发者技能报告出炉!!!
  5. php找不到dns地址,dns异常是什么意思
  6. python3 “from PIL import...“报错
  7. BZOJ5212 ZJOI2018历史(LCT)
  8. using a dict on a Series for aggregation is deprecated and will be removed in a future version
  9. [SpringSecurity]框架概述
  10. python def函数_Python教程之Lambda表达式知识概述
  11. linux终端打开浏览器_终端可以放电影,一行代码就能实现
  12. Python练习题——快乐数字
  13. 企业管理的六大关系和八大系统
  14. 计算机师范专业行业分析,前景最好的4个师范专业,有行业“香馍馍”之称,别不信...
  15. android横屏竖屏设置
  16. TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
  17. python统计小说人物出现次数_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。...
  18. 区块链技术与其在旅游行业的应用
  19. 华为云大数据BI 解决方案的超高性价比
  20. 从零到一 | 14本书人工智能入门必备书单(附PDF链接)

热门文章

  1. android studio windows,AndroidStudio的使用(Windows)
  2. selenium定位输入框_[Selenium 粗浅笔记] 用Selenium填写表单
  3. android在特定时间,如何在Android Oreo的特定时间在Android上发出通知?
  4. python 保存文件 吃内存_孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化...
  5. java用栈处理四则运算_Java 用栈处理四则运算
  6. mysql错误日志为aborting_MySQL 错误日志(Error Log)
  7. 详解NLP技术中的:预训练模型、图神经网络、模型压缩、知识图谱
  8. Spring Cloud Hystrix的请求合并
  9. 阿里P8架构师谈:流量高峰时期的性能瓶颈有哪些、以及如何来解决
  10. 论文浅尝 | 融入知识的弱监督预训练语言模型