MySql数据库

什么是数据库

存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进 行增加,修改,删除及查询操作。

常见的数据库

  1. MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
  2. Oracle:收费的大 型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
  3. DB2 :IBM公司的数据库产品,收费的。常应 用在银行系统中. SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
  4. SyBase:已经淡出 历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
  5. SQLite: 嵌入式的小型数据库,应用在手机端。

SQL语句分类

  1. DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等
  2. DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:insert, delete, update等
  3. DQL(Data Query Language) 数据查询语言 (掌握) DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以 我们的程序员把查询语句的语句称作为DQL语言
  4. DCL(Data Control Language)数据控制语言(了解) 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等
  5. TCL(Transaction Control Language) 事务控制语言 用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等

常用SQL语句

1.查询所有数据库的名称:show databases;
2.查询数据库的字符集:show create database 数据库名称;
3.创建一个新的数据库:create database 数据库名称;
4.删除数据库:drop database 数据库名称;
5.查询当前正在使用的数据库:select databases();
6.使用指定名称的数据库:use 数据库名称;
7.查询正在使用的数据库中的所有表名称:show tables;
8.查询表结构:desc 表名称;
9.创建一个表:create table 表名称 (字段名称....)values(数据类型....);
10.删除一个表:drop table 表名称;
11.复制一个表:create table 表名称 like 原表名;
12.修改表名:alter table 表名称 rename to 新表名;
13.修改表的字符集:alter table 表名称 character set 字符集名称
14.添加新的列:alter table 表名称 add 列名  数据类型;
15.修改列名称:alter table 表名称 change 列名称 新列名称  新数据类型;
16.删除列名:alter table 表名称 drop 列名称;
17.添加数据:insert into 表名称(列名称...)values(...);
18.删除数据:delete from 表名称 where 条件语句;
19.修改数据:update 表名称 set 列名称=... where 条件语句;
20.显示表中的全部数据:select * from 表名称;
21.去除重复的结果集:select distinct 列名称 from 表名称;
22.分组查询:select from 表名称 group by 分组字段;
23.分页查询:select * from 表名称 limit 

创建一个数据库表格

CREATE TABLE students(
	id int,
    name varchar(100),#姓名,可变长度
    age int,#年龄
    gender char(1),#性别。
    address varchar(200),#地址
    math int,#数学成绩
    english int #英语成绩
);
INSERT INTO students (id,name,age,gender,address,math,english) VALUES (1,'令狐冲',28,'男','黑木崖',98,91);
INSERT INTO students (id,name,age,gender,address,math,english) VALUES (2,'杨过',28,'男','黑木崖',18,93);
INSERT INTO students (id,name,age,gender,address,math,english) VALUES (3,'小龙女',18,'女','黑木崖',28,80);
INSERT INTO students (id,name,age,gender,address,math,english) VALUES (4,'黄老邪',48,'男','黑木崖',88,70);
INSERT INTO students (id,name,age,gender,address,math,english) VALUES (5,'郭靖',20,'男','黑木崖',78,30);

在这里插入图片描述

查询math分数大于80分的学生:
select * from students where math>80;

查询english分数小于或等于80分的学生 :
select * from students where english <= 80;

查询age等于20岁的学生:
select * from students where age = 20;

查询age不等于20岁的学生:
select * from students where age != 20;

查询age大于35且性别为男的学生(两个条件同时满足):
select * from students where age > 35 and gender='男';

查询age大于35或性别为男的学生(两个条件其中一个满足):
select * from students where age > 35 or gender = '男';

查询id是135的学生 :
select * from students where id in (1,3,5);

查询id不是135的学生:in运算符
select * from students where id not in(1,3,5);

查询english成绩大于等于75,且小于等于90的学生:
select * from students where english between 75 and 90;

查询姓杨的学生:
select * from students where name like '杨%';

查询姓名中包含'女'字的学生:
select * from students where name like '%女%';

查询姓“黄”,且姓名有三个字的学生:
select * from students where name like '黄_ _';

查询所有数据,使用年龄降序排序:
select * from students order by age desc;

查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序:
select * from students order by age desc,math desc;

查询学生总数:
select count(*) from students;

查询年龄大于40的总数:
select count(*) from students where age>40;

查询数学成绩总分:
select sum(math) from students ;

查询数学成绩平均分:
select avg(math) from students;

查询数学成绩最高分:
select max(math) from students;

查询数学成绩最低分:
select min(math) from students;

按性别分组:
select gender,count(*) from students group by gender;

查询年龄大于25岁的人,按性别分组,统计每组的人数:
select gender,count(*) from students where age > 25 group by gender;

查询年龄大于17岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据:
select gender,count(*) from students where age > 17 group by gender having count(*)>2;

查询前3条记录:
select * from students limit 0,3;

数据库完整性约束

#创建表的时候直接设置主键id
#方式一:
create table students(
         id int primary key; # 把id定为主键
         name varchar(100)
);

#方式二:
create table students(
		id int;
		name varchar(100);
		primary key(id)
);

#设置主键自动增长(mysql独有的)
careate table students(
	id int PRIMARY KEY auto_increment,#自动增长的主键
    name varchar(100)
);

多表查询:

隐式内连接查询(不使用连接关键字):
select * from dept,emp where dept.id=emp.dept_id;
显示内连接查询(使用连接关键字):
SELECT d.name,e.name,e.gender,e.salary FROM dept d JOIN emp e ON d.id=e.dept_id;
左外连接查询:
SELECT * FROM dept d LEFT JOIN emp e ON d.`id`=e.`dept_id`;
右外连接查询:
SELECT * FROM dept d RIGHT JOIN emp e ON d.`id`=e.`dept_id`;

事务的基本四个特性:

A:原子性:指处于同一个事务中的操作是不可分割的单位。要么全都成功,要么全都失败。(比喻手法)

C:一致性:指事务应该由一个一致性状态变为另外一个一致性状态。比如:aaa和bbb账户总额2000,执行转账操作,无论成功还是失败,aaa和bbb账户总和还是2000。

I:隔离性:指多线程环境下。一个事务不能被另外一个事务所打扰。(被打扰就不对,好比上厕所)

D:持久性:数据应该被持久化。即使DBMS坏掉了,数据应该还是完整的。
不考虑隔离级别会出现什么问题?

脏读:指一个事务读到了另外一个事务中未提交的数据。

不可重复度:指一个事务读到了另外一个事务提交的更新的数据,造成的是前后读到的内容不一致。

虚读(幻读):指一个事务读到了另外一个事物提交的插入(INSERT)的数据,造成前后读到的记录条数不一致。

事务的隔离级别

1 READ UNCOMMITTED:脏读、不可重复读、虚读都有可能发生。

2 READ COMMITTED:防止脏读,不可重复读、虚读都有可能发生。

4 REPEATABLE READ:防止脏读、不可重复读,虚读有可能发生。

8 SERIALIZABLE:防止脏读、不可重复读、虚读的发生。

小结:级别越高,数据越安全,但是效率最低(单线程)。

​ 级别越低,数据越不安全,效率越高。

MySQL默认级别是REPEATABLE READ,Oracle默认级别READ COMMITTED。数据库产品不一定支持所有级别(最高和最低级别根本不支持)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值