- 学习数据库主要学习的就是如何对数据进行增删改查操作
- 增:插入数据
- 删:删除数据
- 改:修改数据
- 查:查询数据
- 为什么使用数据库软件?
- 之前在学习webServer时通过IO技术已经操作过数据,其实相当于自己写了数据库软件,但是功能非常少,执行效率也是非常低, 将来工作中不管开发什么项目都需要对数据进行增删改查操作,这种使用频率很高而且开发过程复杂的工作肯定会有一个通用的解决方案.数据库软件就是一个别人写好的通用解决方案,以后对数据进行增删改查全部使用的是数据库软件
- 学习数据库,我们只需要学习SQL语言, 学习如何通过该语言和数据库软件进行交互即可.
- 常见的数据库软件(DBMS:DataBase Management System):
- MySQL: Oracle公司产品, MySQL在08年被Sun公司收购,Sun公司09年被Oracle收购. 开源软件,市占率排名第一 , MySQL创始人从Oracle离职,创办MariaDB(实际上就是MySQL)
- Oracle: Oracle公司产品,闭源软件, 性能最高,加个最贵,市场占有率排名第二
- SQLServer: 微软公司产品, 市占率第三. 主要应用在微软的整套解决方案中
网站整套解决方案包括: 开发语言(java/.net/php)+ 操作系统(windows/linux/mac os)+ web服务软件(Tomcat…)+数据库软件(mysql/orcale/sqlserver) - DB2: IBM公司产品, 主要应用在IBM整套解决方案中
安全性和功能性成反比 - SQLite: 轻量级数据库软件,功能比较少,安装包非常小只有几十k
- 开源和闭源
- 开源: 开放源代码, 盈利方式: 主要靠卖服务, 可能会有技术大拿对开源产品进行维护升级.
- 闭源: 不开放源代码,盈利方式:主要靠卖产品+卖服务, 闭源产品可能会有技术大拿对产品进行攻击.
SQL语言
- Structured Query Language:结构化查询语言, 负责程序员和数据库软件之间的交流
- 如何退出链接? 关闭窗口或执行 exit; 回车
SQL分类
- DDL : 数据定义语言, 负责数据库和表相关的操作
- DML: 数据操作语言, 负责数据增删改查
- DQL: 数据查询语言, 只包括查询
- TCL: 事务控制语言,处理事务相关
- DCL: 数据控制语言, 负责控制用户权限相关
DDL数据定义语言
- 使用数据库保存数据需要先建库再建表, 在表里面对数据进行操作
- 开发的每一个工程都对应MySQL里面一个单独的数据库, MySQL里面可以创建n个数据库
- 一个数据库里面有n张表, 一个网站是由一个数据库里面的多张表来实现
- 在表里面有n条数据
创建数据库
创建数据库: create database 数据库名;
- create database student;
查询所有数据库:
- show databases;
使用数据库
- 作用: 对表或者数据进行操作时必须先指定你要操作的是哪个数据库里面的
- use 数据库名;
删除指定的数据库: drop database 数据库名;
- drop database student;
在创建库时指定编码: create database 库名 character set 编码名;
- create database student character set utf8;
查看数据库
-
查看所有数据库的列表
show databases;
-
显示数据结构
show create database 数据库名;
— 显示choose数据库的信息
show create database choose;
-
选择当前数据库
use 数据库名;
— 设置choose为当前数据库
use choose;
-
删除数据库
drop database 数据库名;
—删除choose数据库
drop database choose;
表相关SQL
-
执行表相关的SQL 必须先使用了某个数据库才可以
create database db5;
use db5;
-
创建表
- 格式: create table 表名(字段1名 类型,字段2名 类型);
- 指定字符集创建格式: create table 表名(字段1名 类型,字段2名 类型) charset=utf8/gbk;
- 举例:
- create table person(name varchar(10),age int);
- create table hero(name varchar(10),gender varchar(5),money int)charset=gbk;
-
查询所有表
- 格式: show tables;
-
查询表详情
- 格式: show create table 表名;
- show create table hero;
-
查询表字段
- 格式: desc 表名
- desc hero;
-
删除表
- 格式: drop table 表名;
- drop table hero;
-
修改表名
- 格式: rename table 原名 to 新名;
- rename table person to per;
-
添加表字段
- 最后面添加格式: alter table 表名 add 字段名 类型;
- alter table per add salary int;
- 最前面添加格式: alter table 表名 add 字段名 类型 first;
- alter table per add id int first;
- 在某个字段的后面添加格式:alter table 表名 add 字段名 类型 after 字段名;
- alter table per add gender varchar(5) after name;
-
删除表字段
-
格式: alter table 表名 drop 字段名;
alter table per drop gender;
-
-
修改表字段
-
格式: alter table 表名 change 原名 新名 新类型;
alter table per change salary sal int;
-
DML数据操作语言(增删改查)
-
操作数据必须先使用了某个数据库 并且准备好了数据对应的表格
create database mydb2 character set utf8;
use mydb2;
create table person(name varchar(10),age int)charset=utf8;
-
插入数据
-
全表插入格式: insert into 表名 values(值1,值2);
- 值的数量和顺序必须和表字段数量和顺序一致
insert into person values(‘Tom’,18);
-
指定字段插入格式: insert into 表名(字段1名,字段2名) values(值1,值2);
-
值的数量和顺序必须和指定的字段一致
insert into person (name) values(‘Jerry’);
-
-
批量插入格式: insert into 表名 values(值1,值2),(值1,值2);
insert into person values(‘Lucy’,20),(‘Lily’,21);
insert into person(name) values(‘AAA’),(‘BBB’);
-
插入中文问题
insert into person values(‘刘德华’,20);
-
-
查询数据
-
格式: select 字段信息 from 表名 where 条件;
select * from person; *代表查询所有字段 没有条件代表查询的是所有数据
select name from person; 查询person表中所有数据的name
select name,age from person where age>20; 查询年龄大于20岁的姓名和年龄
-
-
修改数据
-
格式: update 表名 set 字段1名=值,字段2名=值 where 条件
update person set age=80 where name=‘Lucy’;
update person set name=‘汤姆’ where age=18;
update person set age=10 where age is null; null不能用= 要用 is
-
-
删除数据
-
格式: delete from 表名 where 条件;
delete from person where name=‘AAA’;
delete from person where age<20;
delete from person; 删除全部
-
数据类型
-
整数类型: int(m) m代表显示长度 需要结合zerofill使用 , bigint(m) 大整型 等效java中的long
create table t1(age int(10) zerofill);
insert into t1 values(186);
select * from t1;
-
浮点数: double(m,d) m代表总长度 d代表小数长度 28.234 m=5 d=3 , 超高精度浮点数decimal(m,d) 只有涉及到超高精度运算时使用
-
字符串:
- char(m): 固定长度字符串 m=10 存"abc" 占10 , 执行效率略高于可变长度 最大长度255
- varchar(m): 可变长度 m=10 存"abc" 占3 , 好处:节省空间 最大长度65535但是建议保存字符长度为255以下的内容
- text(m): 可变长度, 最大长度65535, 建议保存长度大于255的字符串
-
日期
-
date: 只能保存年月日
-
time:只能保存时分秒
-
datetime: 年月日时分秒 默认值为null 最大9999-12-31
-
timestamp时间戳: 年月日时分秒 默认值为当前系统时间 , 最大2038-1-19
create table t_date (t1 date, t2 time, t3 datetime, t4 timestamp);
insert into t_date values(‘2020-7-14’,null,null,null);
insert into t_date values(null,‘17:44:20’,‘2010-10-10 10:10:10’,null);
-