MySQL数据库

1.SQL简介

  • Structured Query Language的缩写(结构化查询语言)
  • 作用:定义、操作、管理关系型数据库的句法。
  • 组成:

    • DQL:数据查询语言(Data Query Language)
    • DML:数据操作语言(Data Manipulation Language)
    • DDL:数据定义语言(Data Definition Language)
    • DCL:数据控制语言(Data Control Language)
    • TPL:事务处理语言
    • CCL:指针控制语言

2.常用数据库

Oracle(全球市场占额1/3,功能强大!),DB2,Informix,Sybase,SQL Server(微软),ProstgreSQL面向对象数据库,MySQL(底层用java编写,小巧玲珑),Access(Office系列的,基本无人用),SQLite(安卓手机用,非常小,仅几KB)等

MySQL

  • dos命令行进入MySQL:mysql -u root -p root

几个区别

  • 数据库管理系统:是一个软件,里面有很多数据库(平时说MySQL其实指的就是这个)
  • 数据库:是一个文件,里面存放了很多数据
  • 一个表相当于一个对象,表的一行称为一条记录,一条记录对应一个java对象的数据

DDL数据定义语言


对于数据库的操作

重要

  • create database mydb;

    创建数据库

  • show create database mydb;

    查看创建数据库的语句

  • use mydb;

    改变当前数据库

  • drop database mydb;

    删除数据库

  • show databases;

    查看所有的数据库

  • alter database mydb1 character set utf8;

    修改数据库mydb1的字符集为utf8


非重要

  • create database mydb1 character set gbk;

    创建数据库mydb1,字符集用gbk

  • show collation;

    查看数据库中所有的校对规则

  • show collation like ‘%gb%’;

    查看部分校验规则,%相当于*号

  • create collation mydb2 character set gbk collate gbk_bin;

    创建数据库mydb2,字符集用gbk,校验规则用gbk_bin



对于表的操作

  • create table t(
    id int ,
    name varchar(20)
    );

    创建表t

  • show create table t;

    查看创建表的源码

  • create table t1(
    id int ,
    name varchar(20)
    )character set gbk;

    创建表t1,并使用字符集gbk

  • create table t3(
    id int,
    name varchar(20),
    optime timestamp
    );

    创建一个表t3,timestamp是时间类型,系统会自动插入

  • select * from t3;

    查询t3中的数据,* 表示所有字段

  • insert into t3(id,name) values(1,’张三’);

    向t3插入一条数据

  • insert t3(id,name) values(2,”李四”);

  • insert t3 values(3,’王五’,’2016-1-1’);

    省略字段,意味着所有的字段都必须给定值(自增除外)

  • set character_set_client=gbk;

    设置客户端的字符集为gbk

  • set character_set_results=gbk;

    设置结果集的字符集为gbk


更新语句

  • update t3 set name=’王五’ where id=3;

    将表t3的第三条记录姓名改为“刘五”

  • update t3 set name=’孙一’;

    将所有记录的名字都改为“孙一”

  • update t3 set id=5,name=’郑二’ where id=2;

    修改多个字段


删除语句

  • delete from t3 where id = 4;
  • delete from t3;

    删除所有记录

  • truncate table t3;

    删除所有记录


更改表的结构

  • alter table t3 add address varchar(100);

    给表t3增加一个字段address

  • alter table t3 drop column address;

    删除字段address(整列)

  • desc t3;

    查看表的结构

  • alter table t3 change date date date;

    修改t3中date列的类型为date类型(第一个date是列名,第二个是新的列名,第三个是类型)。

  • alter table t3 modify address char(100) after name;

    修改t3中address列至于name列之后。

DQL(数据查询语言)(简单的)

DQL:Data Query Language
作用:查询数据
常用关键字:SELECT


创建一个学生表

create table stu
(
    id int,
    name varchar(30),
    sex char(2),
    age int,
    address varchar(50)
);

insert into stu values(1,'张无忌','男',20,'北京');
insert into stu values(2,'小龙女','女',18,'古墓');
insert into stu values(3,'黄蓉','女',15,'桃花岛');
insert into stu values(4,'韦小宝','男',24,'扬州');
insert into stu values(5,'乔峰','男',34,'雁门关');
insert into stu values(6,'张果老','男',34,'雁门关');
insert into stu values(7,'老张','男',38,'黑木崖');
insert into stu values(8,'黄药师','男',34,'桃花岛');
insert into stu values(9,'张','女',34,'桃花岛');
insert into stu values(10,'张','男',34,'桃花岛');

查看所有的数据

select * from stu;

查看小龙女的信息

select * from stu where id = 2;
select * from stu where name='小龙女';

查看年龄在20~30之间的人

select * from stu where age >= 20 and age <= 30;

//包括20和30
//select * from stu where age between 20 and 30;

查看所有人的姓名

select name from stu;

查看所有人的姓名,年龄,性别

select name,age,sex from stu;

模糊查询

select * from 表名 where 字段名 like 字段表达式

%表示任意字符数

_表示任意的一个字符


查询所有以“张”开头的人

select * from stu where name like '张%';

查询姓名中含有“张”这个字的人

select * from stu where name like '%张%';

查询姓名中含有“张”这个字并且姓名的长度是3个字的人

select * from stu where name like '张__' or name like '_张_' or name like '__张'; 

过滤重复的数据

查询表中总共有几种性别

select distinct sex from stu;

查询姓名和年龄整体都不同的记录

select distinct name,set from stu;

字段可以有表达式

创建新表分数表

create table score
(
    id int,
    sid int,
    china int,
    english int,
    history int
);

insert into score values(1,1,68,55,81);
insert into score values(2,3,86,23,34);
insert into score values(3,4,34,87,76);
insert into score values(4,6,98,99,93);
insert into score values(5,7,24,39,66);

把每人的china加上10分

select id,china+10,english,history from score; 

给字段起别名

as 可以省略

select id as 编号,china as 语文,english as 英语,history 历史 from score;

查看所有人考试的总分

select id,china + english + history 总分 from score;

查看所有总分大于200的人

select * from score where china+english+history > 200;

查询家在桃花岛或者黑木崖的人

select * from stu where address in('桃花岛','黑木崖');

查询没有参加考试的人

select id,name from stu where id not in(select sid from score);

查询没有地址的人

select * from stu where address is null;

查询地址不是空的人

select * from stu where address is not null;

排序(order by)

对考试的人的语文升序排序

select * from score order by china asc;

对考试的人的历史降序排序

select * from score order by history desc;

根据多个字段进行排序(语文升序,对语文成绩一样的人再进行历史降序)

select * from score order by china asc,history desc;

根据考试总分降序排序

select * from score order by china + english + history desc;

数据完整性

为了保证插入到数据中的数据是正确的,防止用户可能存在的输入错误

  • 实体完整性

    • 主键:唯一的去区分每一条记录的一列或者多列的值。
    • 特点:唯一,非空。
  • 域完整性

    指数据库表的列(即字段)必须符合某种特定的数据类型或约束。

  • 参照完整性

    保证一个表的外键和另一个表的主键对应

创建一个表

create table stu
(
    id int primary key,     #主键约束(唯一,非空)
    name varchar(30) unique,    #唯一约束(可以为空,但是只能有一个)
    sex char(2) not null,   #非空约束
    age int check(age > 0 and age < 100),   #检查约束(MySQL不支持)
    address varchar(50) default '北京'        #默认约束
)

再创建一个表和上表建立联系

create table score
(
    id int primary key,
    sid int,
    china int,
    english int,
    history int,
    constraint sid_FK foreign key(sid) references stu(id)
)

在表外创建引用约束

alter table score add constraint stu_score_FK foreign key (sid) references stu(id);

删除约束

alter table score drop foreign key stu_score_FK;

id自动增长(系统帮你创建)

create table t
(
    id int primary key auto_increment,
    name varchar(20)
);

insert into t(name) values('张三');

注意:

  1. 添加记录时必须先添加主表中的记录,再添加子表中的数据
  2. 不能更改主表中具有外键约束的记录的主键
  3. 删除记录时不允许删除具有外键关系的主表中的记录(删除的顺序应当是先删除子表中的记录,然后删除主表中的记录)

DQL数据查询语言(复杂的)

  • 连接查询
    • 交叉连接(cross join):不带on子句,返回连接表中所有数据行的笛卡尔积
    • 内连接(inner join):返回连接表中符合连接条件及查询条件的数据行
    • 外连接:分为左外连接(left out join)、右外连接(right outer join)。外连接不仅返回连接表中符合连接条件及查询条件的数据行,也返回左表(左外连接时)或右表(右外连接时)中仅符合查询条件但不符合连接条件的数据行
  • 子查询
  • 联合查询
  • 报表查询

查询每个人的考试成绩

#交叉查询
select * from stu s cross join score c on s.id=c.sid;

查询参加考试的人的成绩

#内连查询
select name,china,english,history,china+english+history 总分 from stu s inner join score c on s.id = c.sid;

查询所有人的成绩

#左外连
select name,china,english,history,china+english+history 总分 from stu s left join score c on s.id = c.sid;

#右外连
select name,china,english,history,china+english+history 总分 from stu s right join score c on s.id = c.sid;

查询没有参加考试的人

#子查询
select * from stu where id not in(select sid from score);

查询参加考试的人的成绩

select name,china,english,history,china+english+history 总分 from stu s,score c where s.id=c.sid;

统计函数

  • 聚合函数

    sum max min avg count

  • 分组函数

    根据多个字段进行分组

    select count(*) 数量,sex,name from stu group by sex,name;
    

    分组条件

    select count(*),sex from stu where age >= 16 group by sex having count(*)>1;
    

MySQL事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

  • 原子性: 指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。
  • 一致性:有非法数据(外键约束之类),事务撤回。指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。
  • 隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
  • 持久性:指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

数据的备份与恢复

  • 数据库备份

    #在退出数据库以后在dos命令行执行
    mysqldump -u root -proot 数据库名>test.sql
    
  • 数据库恢复

    1. 创建数据库并选择该数据库
    2. SOURCE数据库文件(加路径的数据库文件)

    或者

    #在退出数据库以后在dos命令行执行
    mysql -u root -proot 数据库名>test.sql
    

转载于:https://www.cnblogs.com/dengkaiting/p/11069388.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值