初识MySQL
数据的存储方式
存储位置 | 优点 | 缺点 |
---|---|---|
内存 | 速度快 | 不能永久保存,数据是临时状态 |
⽂件 | 数据可以永久保存 | 操作数据不⽅便,查询某个数据 |
数据库 | 1)数据可以永久保存2)查询速度快 3)对数据的管理⽅便 | 占⽤资源,需要购买。 |
什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
控制台连接数据库
登录格式:
mysql -u用户名 -p密码
例:
mysql -uroot -p123456
mysql -hIP地址 -u用户名 -p密码
例:
mysql -h127.0.0.1 -uroot -p123456
mysql --host=IP地址 --user=用户名 --password=密码
例:
mysql --h=127.0.0.1 --u=root --p=123456
quit或exit #退出MySQL
数据库管理系统、数据库和表的关系
数据库管理程序(DBMS)可以管理多个数据库,⼀般开发⼈员会针对每⼀个应⽤创建⼀个数据库。
为保存应⽤中实体的数据,⼀般会在数据库创建多个表,以保存程序中实体 User 的数据。
结论:
1. ⼀个数据库服务器包含多个库
2. ⼀个数据库包含多张表
3. ⼀张表包含多条记录
SQL的概念
什么是SQL
Structured Query Language 结构化查询语⾔
SQL 作⽤
- 是⼀种所有关系型数据库的查询规范,不同的数据库都⽀持。
- 通⽤的数据库操作语⾔,可以⽤在不同的数据库中。
- 不同的数据库 SQL 语句有⼀些区别 – 称为“⽅⾔”。
SQL语句分类
1.DDL( 数据定义语⾔):Data Defined Language,如:建库,建表
2.DML( 数据操纵语⾔):Data Manipulation Language,如:对表中的记录操作增删改
3.DQL(数据查询语⾔):Data Query Language,如:对表中的查询操作
4.DCL(数据控制语⾔):Data Control Language,如:对⽤户权限的设置
MySQL语法
1.大小写不敏感
2.每一句sql最后一定要以 ; 结尾
3.注释
注释的语法 | 说明 |
---|---|
– 注释内容 | 单⾏注释(–后必须加空格) |
/* 注释内容 | */ 多⾏注释 |
# 注释内容 | 这是MySQL特有的注释⽅式 |
操作数据库
-- 查看当前所有数据库
show databases;
-- 创建数据库
create database java2106;
-- 使用数据库 / 切换数据库
use java2106;
-- 删除数据库
drop database java2106;
-- 查看当前数据库的字符集 charset
show variables like '%char%';
操作表结构
前提先使用某个数据库
创建表的格式
CREATE TABLE 表名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
MySQL数据类型
- 字符/字符串:varchar(10)-最大10个字符 char(10)-固定10个字符
- 整数: int(2)[mysql] number(2)[oracle]
- 小数: double(3,1)[mysql]最大值99.9 number(3,1)[oracle]
- 时间: 年月日date 时分秒timestamp 年月日时分秒datetime
具体操作
-- 创建user表包含name,age,gender,score,birthday字段
create table user(
name varchar(20) comment '姓名', -- varchar(20)指的是长度最大20
age int(2),
gender char(1),
score double(3,1) comment '个人综合评分',
birthday date
);
查看表
查看某个数据库中的所有表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
具体操作
-- 查看表结构
desc user;
-- 查看所有的表
show tables;
-- 显示创建user表的sql语句
show create table user;
快速创建⼀个表结构相同的表
语法
CREATE TABLE 新表名 LIKE 旧表名;
具体操作
-- 创建一张和user相同的表
create table user1 like user;
desc user;
删除表
直接删除表
DROP TABLE 表名;
判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;
具体操作
-- 删除表user2
drop table user2;
-- 判断表是否存在并删除表user2
drop table user2 if exsts user2;
与直接删除的区别:如果表不存在,不删除,存在则删除
修改表结构
添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型;
修改列类型 MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型;
修改列名 CHANGE
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
删除列 DROP
ALTER TABLE 表名 DROP 列名;
修改表名
RENAME TABLE 表名 TO 新表名;
修改字符集 character set
ALTER TABLE 表名 character set 字符集;
具体操作
-- 添加新的字段 add
alter table user add no int(2);
-- 修改原先字段的类型 modify
alter table user modify name varchar(10);
-- 删除字段 drop
alter table user drop no;
-- 修改字段名 change
alter table user change gender sex char(1);
DML操作表中的数据
用于对表中记录进行增删改操作
插入记录
INSERT [INTO] 表名 [字段名] VALUES (字段值);
INSERT INTO 表名:表示往哪张表中添加数据
(字段名 1, 字段名 2, ...):要给哪些字段设置值
VALUES (值 1, 值 2, ...):设置具体的值
插⼊全部字段
-- 所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3...) VALUES (值 1, 值 2, 值 3);
-- 不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3...);
插⼊部分数据
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
注:没有添加数据的字段会使⽤ NULL
具体操作
-- valuse值的个数和顺序必须跟前面括号中的字段顺序一致
insert into user1 (name,score,gender) values('张三',78.9,'男');
-- mysql可以一次性添加多个记录
insert into user1 values('lucy',null,'女',78.9,null),
('tom',18,'男',78.9,null),
('rose',19,'女',78.9,null),
('jack',17,'男',78.9,null);
更新表数据
UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
UPDATE: 需要更新的表名
SET: 修改的列值
WHERE: 符合条件的记录才更新
你可以同时更新⼀个或多个字段。
你可以在 WHERE ⼦句中指定任何条件。
删除数据
无条件删除
DELETE FROM 表名;
有条件删除
DELETE FROM 表名 WHERE 条件;
具体操作
– 删除数据
delete from user1; – 删除全部记录
delete from user1 where name = ‘jerry’;
DQL查询表中的数据
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况- 下偏移量为0。
查询所有信息
SELECT * FROM 表名;
select * from emp;-- * 在执行时会解析成字段名,消耗资源 等价于==
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
查询指定列并可以进行计算
-- 查询的字段可以直接计算,字段起别名[as]
select ename,sal * 12 as salary from emp;
select ename,sal * 12 salary from emp;
查询并进行函数操作
-- 查询的字段可以使用函数来操作
-- 函数:数字相关,字符串相关,时间相关
select ename,data_format(hiredate,'%Y年%m月%d日') from emp;
select date_format(now(),'%Y年%m月%d日');
有条件查询
-- 条件查询: 筛选 where
-- 查询薪资范围 > < >= <= != [<>]
select ename,sal from emp
where sal > 2000;
select ename,sal from emp
where sal <> 3000;
and 和or的使用
-- 条件 并且:and 或者:or
select ename,sal from emp where sal > 2000 and sal < 3000;
select ename,sal from emp where sal < 2000 or sal > 3000;
-- sal >= 2000 and sal <= 3000
select ename,sal from emp where sal between 2000 and 3000;
is null 和 is not null
-- null表示无穷大或者无穷小,不能判断范围,也不能计算
-- is null - 是null值 is not null - 不是null值
select ename,sal from emp where mgr is null;
关键字in的使用
-- 在部门20的人
select ename,deptno from emp where deptno = 20;
-- 在部门20或30的人
select ename,deptno from emp where deptno = 20 or deptno = 30;
-- 不在部门20和30的人
select ename,deptno from emp where deptno not in (20,30);
模糊查询like “%”和“_”
-- 首字母是S的人 like - 模糊查询
-- %(任意字符任意长度) _(一个任意字符)
select ename from emp where ename like 'S%';
select ename from emp where ename like '_A%';
select ename from emp where ename like '%A%';
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在 WHERE 子句中使用LIKE子句。
- 你可以使用LIKE子句代替等号 =。
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- 你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件。