Mysql
1、数据库概述
- 数据库的概念
数据库,简而言之就是存储数据的仓库,可以按照一定的数据结构存储管理大量的数据及数据与数据之间的关系,它本质上是一种信息管理系统。数据库根据存储采用的数据结构的不同可以分为许多种,其中常见的有层次式数据库、网络式数据库、关系型数据库。其中关系型数据库占据着市场的主流。 - 关系型数据库
关系型数据库是建立在关系模型基础上的数据库。这种定义听起来十分抽象,这里我们不深入讨论什么叫做“关系模型”–大学计算机专业专门有一门课叫“离散数学”专门讨论过关系模型,只是简单的表述为利用表来存储数据,用表和表之间的关系保存数据之间的关系的数据库称为关系型数据库,这个定义不太严谨,但是更好理解。 - 常见的关系型数据库
商业数据库:
Oracle – 甲骨文公司开发,市场占有率第一
SQLServer – 微软公司开发,.Net技术中常用
DB2 – IBM公司开发
Sybase – Sybase公司开发
开源数据库:
MySql – 瑞典MySql AB研发,非常受欢迎,已经被Oracle收购
SQLite – 小型轻量级开源关系型数据库,常用作嵌入式设备数据库
2、Mysql常见概念
1、数据库服务器
指的就是一个数据库管理程序,这个程序可以管理多个数据库。
具体来看就是在系统中运行的mysql的服务。
该服务器根据配置监听当前机器的指定端口(默认3306)等待客户端的连接访问。
2、数据库客户端
用来连接数据库服务器进行数据库操作的程序称之为数据库客户端程序,简称数据库客户端。
mysql自带了客户端程序,即bin/mysql.exe,可以通过该程序连接数据库服务器。
3、数据库
所谓的数据库就是在数据库服务器中创建的以一系列的表的形式存储数据的仓库。
一个数据库服务器中可以创建多个数据库。
多个数据库之间是互相隔离的。
通常一个项目对应一个数据库。
每个项目各自创建和使用各自的数据库,从而可以实现多个项目在一个数据库服务器中互不干扰的工作。
4、表
数据库中以表来存储数据。
一个数据库中可以创建多个表。
通常一个javabean类对应一个表。
5、表记录
表中一条数据就是一个表记录。
一个表中可以存储多条表记录。
通常一个javabean对象对应一个表记录。
3、SQL语言
1、概念
SQL–Structured Query Language, 结构化查询语言,是关系型数据库通用的操作语言。
是一种非过程性语言。
由美国国家标准局(ANSI)与国际标准化组织(ISO)制定SQL标准。各大数据库厂商都对其做了实现。所以我们只要学会了SQL语言,就可以操作各大关系型数据库了。
*为加强SQL的语言能力,各厂商增强了过程性语言的特征,增加了一些非标准的SQL,这样的SQL称为该数据库的“方言”。
SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能
3.1、数据库的操作
创建一个名为mydb的数据库
CREATE DATABASE mydb;
展示数据库
SHOW CREATE DATABASE mydb;
删除数据库
DROP DATABASE mydb;
查询数据库表中所有数据库
SHOW DATABASES;
将数据库字符集改为gbk
ALTER DATABASE mydb CHARACTER SET gbk;
切换数据库
USE mydb;
查看当前使用的数据库
SELECT DATABASE();
3.2、数据库表的操作
创建表
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
gender VARCHAR(10),
birthday DATE
);
查看数据库中所有的表
SHOW TABLES;
查看表的基本信息
SHOW CREATE TABLE student;
查看表的字段信息
DESC student;
3.3、修改表数据
修改表名称
ALTER TABLE student RENAME TO stu;
修改字段名
ALTER TABLE stu CHANGE NAME sname VARCHAR(10);
修改字段类型
ALTER TABLE stu MODIFY sname INT;
添加字段
ALTER TABLE stu ADD address VARCHAR(50);
desc stu;
删除字段
ALTER TABLE stu DROP address;
删除表
DROP TABLE stu;
3.4、数据表的约束
主键约束
CREATE TABLE student(
id INT PRIMARY KEY,
NAME VARCHAR(20)
);
或者
create table student01(
id int
name varchar(20),
primary key(id)
);
非空约束
CREATE TABLE student02(
id INT,
NAME VARCHAR(20) NOT NULL
);
默认值约束
CREATE TABLE student03(
id INT,
NAME VARCHAR(20),
gender VARCHAR(10) DEFAULT 'male'
);
唯一性约束
CREATE TABLE student04(
id INT,
NAME VARCHAR(20) UNIQUE
);
外键约束
CREATE TABLE student05(
id INT PRIMARY KEY,
NAME VARCHAR(20)
);
CREATE TABLE class(
classid INT PRIMARY KEY,
studentid INT
);
ALTER TABLE class ADD CONSTRAINT waijian FOREIGN KEY(studentid) REFERENCES student05(id);
删除外键
ALTER TABLE class DROP FOREIGN KEY waijian;
3.5、数据表插入
创建表
CREATE TABLE student(
id INT,
NAME VARCHAR(30),
age INT,
gender VARCHAR(30)
);
INSERT INTO student (id,NAME,age,gender) VALUES(1,'aaa',16,'male');
3.6、更新表
UPDATE student SET age = 20,gender = 'female' WHERE NAME='aaa';
更i新表中全部数据
UPDATE student SET age=18;
3.7、删除表
DELETE FROM student WHERE id=2;
3.8、查询
CREATE TABLE student(
sid CHAR(6),
sname VARCHAR(50),
age INT,
gender VARCHAR(50) DEFAULT 'male'
);
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');
查询所有字段
SELECT * FROM student;
查询指定字段
SELECT sid,sname FROM student;
常数的查询
select sid,sname,'2021-03-02' from student;
查询中过滤重复数据
select distinct gender from student;
算数符
select sname,age+10 from student;
4、函数
4.1、聚合函数
select count(*) from student;
select max(age) from student;
select sname,min(age) from student;
select sum(age) from student;
select avg(age) from student;
4.2、条件查询
select * from student where age>=17;
select * from student where sid in ('S_1002','S_1003');
select * from student where age between 15 and 18;
select * from student where sname is not null;
select * from student where age>15 and gender='male';
select * from student where age>15 or gender='male';
使用like
select * from student where sname like 'wang';
%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串
select * from student where sname like 'li%';
下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符。例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。
select * from student where sname like 'zx__';
当执行查询数据时可能会返回很多条记录,而用户需要的数据可能只是其中的一条或者几条
select * from student order by age asc limit 3;
4.3、分组查询
-- 创建员工表
CREATE TABLE employee (
id int,
name varchar(50),
salary int,
departmentnumber int
);
-- 向员工表中插入数据
INSERT INTO employee values(1,'tome',2000,1001);
INSERT INTO employee values(2,'lucy',9000,1002);
INSERT INTO employee values(3,'joke',5000,1003);
INSERT INTO employee values(4,'wang',3000,1004);
INSERT INTO employee values(5,'chen',3000,1001);
INSERT INTO employee values(6,'yukt',7000,1002);
INSERT INTO employee values(7,'rett',6000,1003);
INSERT INTO employee values(8,'mujk',4000,1004);
INSERT INTO employee values(9,'poik',3000,1001);
select count(*), departmentnumber from employee group by departmentnumber;
配合having使用
select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;
4.4、order by排序
在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。
select * from student order by age asc;
4.5、别名设置
select * from student as stu;