学习数据库的第一天
程序员文章站
2024-01-16 10:52:55
...
数据库
- 之前学习的通过IO流操作文件的形式对数据进行增删改查 存在很多弊端
- 效率低
- 一般只能保存小量数据
- 只能保存文本数据
- 什么是DBMS: DataBaseManagementSystem,数据库管理系统(数据库管理软件),作用就是负责对数据进行增删改查的软件,常见的DBMS: MySQL、Oracle、DB2、SQLServer、SQLite等
- 数据库分类:
-
关系型数据库: 以表为单位保存数据,经过数学理论验证可以保存现实生活中存在的任何关系
-
非关系型数据库: 以键值对形式保存数据,一般用于解决特殊场景,如数据缓存。
- 开源和闭源
- 开源:公开源代码, 免费 , 盈利方式:靠卖服务 , 开源有大拿无偿维护升级。
- 闭源:不公开源代码,收费, 盈利方式:靠卖产品+卖服务 ,闭源有大拿攻击 但是公司会花钱养一群人维护升级。
- 主流数据库软件介绍
- MySQL: Oracle公司产品, 08年被Sun公司收购,09Sun被Oracle 拉里.埃里森
MariaDB 市场占有率第一 - Oracle: Oracle公司产品 市场占有率第二 ,性能最高 价格最贵的数据库
- SQLServer: 微软公司产品 排第三 , 主要应用在微软整套解决方案中
- DB2: IBM公司产品 主要应用在IBM整套解决方案中
- sqlite: 轻量级数据库,只具备基础的增删改查操作
SQL
- Structured Query Language:结构化查询语言,用户程序员和数据库软件进行交流的语言
###如何连接数据
mysql -uroot -p
数据库相关
- 查看所有数据库
- 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;
- 删除数据库
- 格式: drop database 数据库名;
drop database db2;
- 使用数据库
- 格式: use 数据库名;
use db1;
表相关
- 前提一定使用了数据库,才能执行表相关的SQL
- 创建表
- 格式:create table 表名(字段1名 字段1类型,字段2名 字段2类型,…);
create table person(name varchar(5),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 tables;
- 查看表详情
- 格式: show create table 表名;
show create table person; - 引擎:
- innodb:默认,支持事物、外键等高级操作
- myisam: 只支持基础的增删改查操作,不支持事物、外键等高级操作
回顾
- 数据库相关
- show databases;
- create database db1;
- show create database db1;
- drop database db1;
- use db1;
- 表相关
- create table t1(name varchar(10),age int);
- show tables;
- show create table t1;
- 练习:
- 创建2个数据库分别是mydb1 和 mydb2(字符集为gbk)
create database mydb1;
create database mydb2 character set gbk; - 在mydb1里面添加员工表emp 里面有姓名 年龄 工资sal
use mydb1;
create table emp(name varchar(10),age int,sal int); - 在mydb2里面添加英雄表hero 字段有姓名 年龄 英雄类型type
use mydb2;
create table hero(name varchar(10),age int,type varchar(10)); - 删除两个数据库
drop database mydb1;
drop database mydb2;
表相关 续
- 查询表字段信息
- 格式: desc 表名;
desc person;
- 删除表
- 格式: drop table 表名;
drop table person;
- 创建表指定引擎和字符集
- 格式: create table 表名(字段1名 字段1类型,字段2名 字段2类型,…) engine=innodb/myisam charset=gbk/utf8;
create table person(name varchar(10),age int)engine=myisam charset=gbk;
- 修改表名
- 格式: rename table 原名 to 新名;
rename table person to t_person;
- 修改表引擎和字符集
- 格式: alter table 表名 engine=myisam/innodb charset=utf8/gbk;
alter table t_person engine=innodb charset=gbk;
- 添加表字段
- 格式: alter table 表名 add 字段名 字段类型; //最后
- 格式: alter table 表名 add 字段名 字段类型 first;//最前面
- 格式: alter table 表名 add 字段名 字段类型 after xxx;在xxx后面
alter table t_person add sal int;
alter table t_person add id int first;
alter table t_person add gender varchar(5) after name;
- 删除表字段
- 格式: alter table 表名 drop 字段名;
alter table t_person drop gender;
- 修改表名和字段类型
- 格式: alter table 表名 change 原名 新名 新类型;
alter table t_person change sal salary int;
- 修改字段类型和位置
-
格式: alter table 表名 modify 字段名 新类型 first/ after xxx;
alter table t_person modify name varchar(5) after age; -
练习:
- 创建数据库mydb3 指定字符utf8 并使用
create database mydb3 character set utf8;
use mydb3; - 创建temp表 只有id字段 指定引擎为myisam 字符集为gbk
create table temp(id int) engine=myisam charset=gbk; - 修改表名为t_emp ;
rename table temp to t_emp; - 修改引擎为innodb 修改字符集为utf8
alter table t_emp engine=innodb charset=utf8; - 在最后面添加name字段
alter table t_emp add name varchar(10); - 在name前面添加age字段
alter table t_emp add age int after id; - 在age后面添加工资sal字段
alter table t_emp add sal int after age; - 修改sal字段名称为salary
alter table t_emp change sal salary int; - 修改age字段到最后面
alter table t_emp modify age int after name; - 删除salary字段
alter table t_emp drop salary; - 删除表
drop table t_emp; - 删除数据库
drop database mydb3;
数据相关
create database db1 character set utf8;
use db1;
create table person(id int,name varchar(10),age int);
- 添加数据
- 全表插入格式: insert into 表名 values (值1,值2,值3); 要求值得数量和顺序必须和表字段的数量、顺序一致
insert into person values(1,‘Tom’,18); - 指定字段插入格式: insert into 表名 (字段1名,字段2名) values (值1,值2); 要求值得数量和顺序和前面指定的一致
insert into person (id,name) values(2,‘Jerry’); - 批量插入数据
insert into person values(3,‘aaa’,10),(4,‘bbb’,11);
insert into person (id,name) values(5,‘ccc’),(6,‘ddd’);
- 查询数据
- 格式: select 字段信息 from 表名 where 条件;
select name from person;
select name,age from person where id<3;
- 修改数据
- 格式: update 表名 set 字段名=值 where 条件;
update person set age=50 where id=2;
- 删除数据
- 格式: delete from 表名 where 条件;
delete from person where name=‘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(5) after name; - 修改所有英雄的性别为男
update hero set gender=‘男’; - 删除所有数据
delete from hero; - 删除表
drop table hero;
乱码问题
insert into person values (10,‘刘德华’,17);
- 如果执行包含中文SQL 报错时 执行以下指令解决
set names gbk; - 如果执行插入中文没有报错 但是查询出现乱码,此时把数据库删除 重新创建确保数据库字符集为utf8 表的字符集为utf8再次测试,如果还是解决不了问题,重新安装数据库或联系项目经理帮忙解决
学习回顾
- 数据库相关
- show databases;
- create database db1 character set utf8/gbk;
- show create database db1;
- drop database db1;
- use db1;
- 表相关
- create table t1(name varchar(10),age int)engine=myisam/innodb charset=utf8/gbk;
- show tables;
- show create table t1;
- desc t1;
- drop table t1;
- rename table t1 to t2;
- alter table t1 engine=mysiam/innodb charset=utf8/gbk;
- alter table t1 add 字段名 类型 first/after xxx;
- alter table t1 drop 字段名;
- alter table t1 change 原名 新名 新类型;
- alter table t1 modify 字段名 新类型 first/after xxx;
- 数据相关
- insert into t1 (name,age) values(‘小明’,28),(‘小花’,38);
- select name,age from t1 where id<10;
- update t1 set age=50 where id=5;
- delete from t1 where age<30;
上一篇: python知识之字典和集合
下一篇: 获取对象信息(廖雪峰)