数据库
数据库简介
- 之前通过io流操作文件的方式对数据进行增删改差的弊端
- 代码量大 导致开发效率低 有现成的肯定用现成的数据库软件
- 执行效率低
- 一般只能保存字符串数据
- 什么是DB DataBase数据库,指保存数据的文件集合
- 什么是DBMS DataBaseManagementSystem 管理数据库文件的软件系统 ,常见的DBMS有:Oracle、MySQL、SQLServer、DB2等
数据库分类
-
关系型数据库: 经过数学理论验证可以保存现实生活中的任何关系,关系型数据库以表为单位保存数据
-
非关系型数据库: 一般以键值对的形式保存数据,可应用在数据缓存 ,Redis数据库就是非关系型数据库用于数据缓存,保存数据的方式就是键值对。
常见的关系型数据库
- MySQL: 开源数据库,08年被Sun收购,09年Sun被Oracle收购,现在属于Oracle公司, 被Oracle收购后性能大幅提升,面临闭源的风险,原MySQL程序员离开Oracle创建了MariaDB(创始人女儿名字叫maria) ,市场占有率排名第一
- Oracle: 创始人拉里.艾莉森 32岁创办Oracle,性能最高价格最贵,市场占有率排名第二 闭源数据库
- SQLServer: 微软公司产品 闭源产品 市场占有率排名第三 应用在微软整套解决方案中(包括:操作系统、webServer、开发语言、数据库软件等)
- DB2:IBM公司产品、 闭源产品, 应用在IBM整套解决方案中,安全性高一般应用在银行等需要安全性较高的环境中
- Sqlite: 轻量级数据库,应用在嵌入式设备或移动设备上
开源和闭源
- 开源: 开放源代码,开源产品一般靠卖服务赚钱,开源产品有大牛程序员无偿维护和升级
- 闭源:不公开源代码,闭源产品靠卖产品+卖服务来钱快,闭源产品可能会存在被攻击的风险
SQL
- Structured Query Language: 结构化查询语言
- 学习SQL语句主要学习的就是如何让数据库软件对数据进行增删改查操作
如何连接数据库
- 格式: mysql -uroot -p 敲回车
- 退出格式: exit
SQL语句格式
- 以;结尾(英文分号)
- 关键字之间有空格 一般一个空格 但是写多个也可以
- SQL语句中可以有1或多个换行
- 关键字不区分大小写
数据库相关SQL
- 查询所有数据库
- 格式: show databases;
- 创建数据库
- 格式: create database 数据库名称; create database db1;
- 查看数据库详情
- 格式: show create database 数据库名称; show create database db1;
- 创建数据库指定字符集
- 格式: create database 数据库名称 character set utf8/gbk; create database db2 character set gbk; show create database db2;
- 删除数据库
- 格式: drop database 数据库名称; drop database db2;
- 使用数据库
- 格式: use 数据库名称; use db1;
- 练习:创建mydb1和mydb2 其中mydb2字符集是gbk 使用mydb2 最后删除mydb1和mydb2 create database mydb1; create database mydb2 character set gbk; use mydb2; drop database mydb1; drop database mydb2;
表相关SQL
- 执行表相关SQL时切记一定是已经使用了数据库 不然会报错
- 创建表
- 格式:create table 表名(字段名1 字段1类型,字段名2 字段2类型…); create table person(name varchar(50),age int);
- 练习:
- 创建员工表emp 有姓名name 性别gender 年龄age 工资sal 这几个字段 create table emp(name varchar(10),gender varchar(2),age int,sal int);
- 创建学生表student 有学号id 姓名name 语文chinese 数学math 英语english 这几个字段 create table student(id int,name varchar(10),chinese int,math int,english int);
- 创建商品表item 有商品标题title 商品单价price 库存num 字段 create table item(title varchar(20),price int,num int);
- 查看所有表
- 格式: show tables;
- 查看表详情
- 格式: show create table 表名; show create table person;
- 表引擎
- innodb(默认):支持数据库的高级操作(外键,事务等)
- myisam:不支持数据的高级操作,只支持基本的数据增删改查操作
- 创建表时指定引擎和字符集
- 格式: create table 表名(字段名1 字段1类型,字段名2 字段2类型…) engine=innodb/myisam (default?) charset=utf8/gbk; create table t1(name varchar(10),age int)engine=myisam charset=gbk; show create table t1;
- 查看表字段
- 格式: desc 表名; desc person;
- 删除表
- 格式: drop table 表名; drop table emp; drop table person;
修改表相关操作
- 修改表名
- 格式: rename table 原名 to 新名; create table t_emp(name varchar(10)); rename table t_emp to emp; show tables;
- 修改表引擎和字符集
- 格式: alter table 表名 engine=innodb/myisam charset=utf8/gbk; alter table emp engine=myisam charset=gbk;
- 给表添加字段
- 最后添加:alter table 表名 add 字段名 字段类型;
- 最前面添加:alter table 表名 add 字段名 字段类型 first;
- xxx的后面:alter table 表名 add 字段名 字段类型 after xxx; alter table emp add sal int;//最后添加 desc emp; alter table emp add id int first;//最前面 desc emp; alter table emp add gender varchar(2) after name;//名字后面 desc emp;
- 删除表字段
- 格式: alter table 表名 drop 字段名; alter table emp drop gender;
- 修改字段名和类型
- 格式: alter table 表名 change 原名 新名 新类型; alter table emp change sal salary int;
- 修改字段类型和位置
- 格式: alter table 表名 modify 字段名 新类型 first / after xxx; alter table emp modify salary int first; //最前面 alter table emp modify salary int after id;//id的后面
create table t1(name varchar(10),age int) engine=innodb/myisam charset=utf8/gbk; show tables; show create table t1; desc t1; drop table t1; rename table t1 to t2; alter table t1 add 字段名 字段类型 first、after xxx; alter table t1 drop 字段名; alter table t1 change 原名 新名 新类型 alter table t1 modify 字段名 新类型 first/after xxx; alter table t1 engine=innodb/myisam charset=utf8/gbk;
- 练习:
- 创建数据库db3 并使用 create database db3; use db3;
- 在db3里面创建hero表 字段有id、姓名name、类型type(字符串类型) ,引擎为myisam 字符集为gbk create table hero(id int,name varchar(10),type varchar(5)) engine=myisam charset=gbk;
- 修改表引擎为innodb、字符集为utf8 alter table hero engine=innodb charset=utf8;
- 给表添加一个money字段 添加在name字段的后面 alter table hero add money int after name;
- 修改表名为heros rename table hero to heros;
- 修改name字段到最后面 alter table heros modify name varchar(10) after type;
- 添加字段性别gender在id的后面 alter table heros add gender varchar(2) after id;
- 修改type字段名为hero_type alter table heros change type hero_type varchar(5);
- 删除money字段 alter table heros drop money;
- 删除hero表 drop table heros;
- 删除db3数据库 drop database db3;
数据相关SQL
create database db4 character set utf8;
use db4;
create table emp(name varchar(10),age int,sal int) engine=innodb charset=utf8;
-
添加数据
-
全表插入格式: insert into 表名 values(值1,值2); values里面的值的数量和顺序 一定要和表字段一致 insert into emp values(‘Tom’,18,5000);
-
指定字段插入格式: insert into 表名 (字段名1,字段名2) values(值1,值2); values里面的值得数量和顺序 和values前面指定的要一致 insert into emp (name,age) values(‘Jerry’,20);
-
批量插入 insert into emp values(‘刘备’,30,15000),(‘关羽’,25,10000),(‘张飞’,15,100); insert into emp (name) values(‘悟空’),(‘八戒’),(‘沙僧’);
-
SQL语句中出现中文报错 该错误 由于终端的编码字符集和数据库服务器解码的字符集不一致导致 通过以下命令统一字符集 set names gbk;
-
查询数据
-
格式: select 字段信息 from 表名 where 条件; select name from emp; //查询所有员工的姓名 select name,age from emp where age>20;//查询大于20岁的员工姓名和年龄 select * from emp;//查询emp表中的所有数据
-
修改数据
-
格式: update 表名 set 字段名=值 where 条件; update emp set age=50 where name=‘Tom’;
-
删除数据
-
格式: delete from 表名 where 条件; delete from emp where age<20;