###数据库
####数据库简介
- 通过IO流自己对数据进行操作需要写大量的代码,而且不能保证程序的执行效率,IT行业中凡是很常用实现又很麻烦的业务,通常会有完整的解决方案,数据库软件就是对数据增删改查的解决方案,程序员只需要学习如何使用数据库软件即可。
- 什么是DBMS: DataBase数据库Management管理System系统(数据库管理软件),常见的DBMS: MySQL、Oracle、DB2、SQLserver等
####DBMS介绍:
- MySQL: Oracle公司产品, 08年被SUN公司收购,09年Sun公司被Oracle收购,担心MySQL被闭源,原MYSQL创始人们离开Oracle创建了MariaDB,市场占有率排名第一。
- Oracle: Oracle公司产品,市场占有率排名第二,性能最高,价格最贵,老板拉力.艾莉森。
- SQLServer: 微软公司产品,市场占有率排名第三,主要应用在微软的整套解决方案中
整套解决方案: 开发语言+操作系统+web服务软件+数据库软件 - DB2: IBM公司产品,一般应用在IBM整套解决方案中
- SQLite: 轻量级数据库。安装包只有几十k,应用在移动设备和嵌入式设备中
- 开源和闭源区别:
- 开源: 开放源代码,免费,盈利方式:靠提供服务赚钱,有技术大牛无偿维护升级。
- 闭源:不公开源代码,收费,盈利方式:靠卖产品和卖服务赚钱,有技术大牛攻击,不过公司有钱可以养一帮人维护。
###SQL
- Structured Query Language:结构化 查询 语言 ,用于程序员和数据库之间的交流,学习数据库主要学习的就是这门语言
####如何连接MySQL数据库软件
- window:
- linux:在空白区域右键-》终端-》mysql -uroot -p 回车-》输入密码(没有密码直接敲回车)敲回车
- 退出指令: exit
####数据库相关SQL - 查询所有数据库
- 格式:show databases;
- 创建数据库并指定字符集
- 格式: create database 数据库名 character set utf8/gbk;
create database db1 character set utf8;
show databases;
create database db2 character set gbk;
- 查看数据库详情
- 格式: show create database 数据库名;
show create database db1;
- 删除数据库
- 格式: drop database 数据库名;
drop database db1;
- 使用数据库
- 格式: use 数据库名;
use db1;(前提db1已经存在) - 练习:
- 分别创建mydb1和mydb2数据库 第一个是gbk第二个是utf8
- 创建完后查询两个是不是都存在
- 查询两个字符集是否正确
- 先使用mydb1再使用mydb2
- 删除两个数据库
####表相关SQL
- 表相关的各种操作必须已经使用了数据库
create database db1 character set utf8;
use db1;
- 创建表
- 格式: create table 表名(字段名 类型,字段名 类型);
create table person(name varchar(10),age int); - 练习: 创建学生表student 字段有: 学号id 姓名name 语文chinese 数学math 英语english
create table student
(id int,name varchar(10),chinese int,math int,english int);
- 查询所有表
- 格式: show tables;
- 查看表详情
- 格式: show create table 表名;
show create table student;
- 创建表指定字符集
- 格式: create table 表名(字段名 类型,字段名 类型) charset=utf8/gbk;
create table t1(name varchar(10),age int)charset=gbk;
show create table t1;
- 查看表字段
- 格式: desc 表名;
desc student;
- 删除表
- 格式: drop table 表名
drop table t1;
- 添加表字段
- 最后添加格式: alter table 表名 add 字段名 类型;
alter table person add sal int; - 最前面添加格式:alter table 表名 add 字段名 类型 first;
alter table person add id int first; - xxx的后面添加格式:alter table 表名 add 字段名 类型 after xxx;
alter table person add gender varchar(10) after name;
- 删除表字段
- 格式: alter table 表名 drop 字段名;
alter table person drop gender;
- 修改表字段名和类型
- 格式: alter table 表名 change 原名 新名 新类型;
alter table person change sal gender varchar(10);
####数据库和表相关练习:
- 创建数据库mydb1 字符集为utf8 并使用该数据库
create database mydb1 character set utf8;
use mydb1; - 在mydb1中创建员工表emp 字段有name 字符集为utf8
create table emp (name varchar(10)) charset=utf8; - 添加表字段age在最后面
alter table emp add age int; - 添加id字段在最前面
alter table emp add id int first; - 添加sal字段在name的后面
alter table emp add sal int after name; - 修改字段sal为salary
alter table emp change sal salary int; - 删除age字段 alter table emp drop age;
- 删除emp表 drop table emp;
- 删除数据库 drop database mydb1;
####数据相关SQL
create database newdb1 character set utf8;
use newdb1;
create table emp(id int,name varchar(10),age int); - 插入数据
- 全表插入格式: insert into 表名 values(值1,值2,值3);
insert into emp values(1,‘Tom’,18); - 指定字段格式:insert into 表名(字段名1,字段名2)values(值1,值2);
insert into emp(name,age) values(‘Jerry’,15); - 批量插入数据格式:
insert into emp values(4,‘悟空’,500),(5,‘八戒’,300),(6,‘沙僧’,200);
insert into emp(name,age) values(‘刘备’,25),(‘关羽’,23),(‘张飞’,18); - 中文问题:
insert into emp values(3,‘刘德华’,25);
如果有同学执行以上SQL语句报错的话执行以下SQL语句即可
set names gbk;
- 查询数据
- 格式: select 字段信息 from 表名 where 条件;
- 举例:
- 查询所有的员工姓名 select name from emp;
- 查询所有员工的所有信息 select * from emp;
- 查询年龄小于100岁的员工姓名和年龄
select name,age from emp where age<100; - 查询悟空的信息
select * from emp where name=‘悟空’;
- 修改数据
- 格式: update 表名 set 字段名=值,字段名=值 where 条件;
- 举例:
- 修改悟空名字为孙悟空
update emp set name=‘孙悟空’ where name=‘悟空’; - 修改刘备年龄为50岁
update emp set age=50 where name=‘刘备’; - 修改30岁以下的员工年龄为10岁
update emp set age=10 where age<30;
- 修改悟空名字为孙悟空
- 删除数据
- 格式: delete from 表名 where 条件;
- 举例:
- 删除Tom
delete from emp where name=‘Tom’; - 删除年龄10岁的员工
delete from emp where age=10; - 删除所有数据
delete from emp;
####练习:
- 删除Tom
- 创建hero表 id 名字name 类型type 价格money
create table hero(id int,name varchar(10),type varchar(10),money int); - 保存以下数据
insert into hero values
(1, ‘诸葛亮’, ‘法师’, 18888), (2, ‘周瑜’, ‘法师’, 13888),
(3, ‘孙悟空’, ‘打野’, 18888), (4, ‘小乔’, ‘法师’, 13888),
(5, ‘黄忠’, ‘射手’, 8888), (6, ‘刘备’, ‘战士’, 6888); - 修改所有18888为28888
update hero set money=28888 where money=18888; - 修改所有法师为战士
update hero set type=‘战士’ where type=‘法师’; - 删除价格为6888的英雄 delete from hero where money=6888;
- 修改小乔为猪八戒
update hero set name=‘猪八戒’ where name=‘小乔’; - 删除价格低于15000的英雄 delete from hero where money<15000;
- 添加性别gender字段在name的后面
alter table hero add gender varchar(10) after name; - 修改所有英雄的性别为男 udpate hero set gender=‘男’;
- 删除所有数据 delete from hero;
- 删除表 drop hero;
####数据类型
- 整数: int(m) 和 bigint(等效java中的long) ,m代表显示长度 需要结合zerofill关键字使用
create table t_int(id int,age int(10) zerofill);
insert into t_int values(1,20);
select * from t_int; - 浮点数: double(m,d) m代表总长度 d代表小数长度 m=5 d=3 23.456,超高精度浮点数decimal(m,d) 只有涉及到超高精度运算时使用
- 字符串:
- char(m): 固定长度 m=5 “abc” 所占长度为5,执行效率略高 ,最大长度255
- varchar(m):可变长度m=5 “abc” 所占长度为3,节省空间,最大长度65535 超过255建议使用text
- text(m):可变长度 最大长度65535
- 日期:
-
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('2019-9-5',null,null,null); insert into t_date values(null,'17:37:28','2019-9-5 17:37:28',null);
###课程回顾:
- 数据库相关SQL
- show databases;
- create database db1 character set utf8/gbk;
- show create database db1;
- drop database db1;
- use db1;
- 表相关SQL
- create table t1(id int,name varchar(10)) charset=utf8/gbk;
- show tables;
- show create table t1;
- desc t1;
- drop table t1;
- alter table t1 add age int first/ after xxx;
- alter table t1 drop age;
- alter table t1 change 原名 新名 新类型;
- 数据相关SQL
- insert into t1(字段名1,字段名2) values(‘值1’,‘值2’),(‘值1’,‘值2’);
- select 字段信息 from t1 where 条件;
- update t1 set xxx=xxx where 条件;
- delete from t1 where 条件;
- 数据类型
- 整数: int和bigint
- 浮点数: double(m,d) m总长度 d小数长度 超高精度decimal(m,d)
- 字符串: char 固定长度 最大255 varchar 可变长度最大65535 超高255建议使用text text 可变长度最大65535
- 日期: date time datetime 最大9999-12-31 默认null timestamp最大2038-1-19 默认值当前系统时间
html
css
JavaScript
jQuery
Bootstrap
MySQL