欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习数据库的第一天

程序员文章站 2024-01-16 10:52:55
...

数据库

  • 之前学习的通过IO流操作文件的形式对数据进行增删改查 存在很多弊端
    1. 效率低
    2. 一般只能保存小量数据
    3. 只能保存文本数据
  • 什么是DBMS: DataBaseManagementSystem,数据库管理系统(数据库管理软件),作用就是负责对数据进行增删改查的软件,常见的DBMS: MySQL、Oracle、DB2、SQLServer、SQLite等
  • 数据库分类:
  1. 关系型数据库: 以表为单位保存数据,经过数学理论验证可以保存现实生活中存在的任何关系

  2. 非关系型数据库: 以键值对形式保存数据,一般用于解决特殊场景,如数据缓存。

  • 开源和闭源
  1. 开源:公开源代码, 免费 , 盈利方式:靠卖服务 , 开源有大拿无偿维护升级。
  2. 闭源:不公开源代码,收费, 盈利方式:靠卖产品+卖服务 ,闭源有大拿攻击 但是公司会花钱养一群人维护升级。
  • 主流数据库软件介绍
  1. MySQL: Oracle公司产品, 08年被Sun公司收购,09Sun被Oracle 拉里.埃里森
    MariaDB 市场占有率第一
  2. Oracle: Oracle公司产品 市场占有率第二 ,性能最高 价格最贵的数据库
  3. SQLServer: 微软公司产品 排第三 , 主要应用在微软整套解决方案中
  4. DB2: IBM公司产品 主要应用在IBM整套解决方案中
  5. sqlite: 轻量级数据库,只具备基础的增删改查操作

SQL

  • Structured Query Language:结构化查询语言,用户程序员和数据库软件进行交流的语言
    ###如何连接数据

mysql -uroot -p

数据库相关

  1. 查看所有数据库
  • show databases;
  1. 创建数据库
  • 格式: create database 数据库名;
    create database db1;
  1. 查看数据库详情
  • 格式: show create database 数据库名;
    show create database db1;
  1. 创建数据库 指定字符集
  • 格式: create database 数据库名 character set utf8/gbk;
    create database db2 character set gbk;
  1. 删除数据库
  • 格式: drop database 数据库名;
    drop database db2;
  1. 使用数据库
  • 格式: use 数据库名;
    use db1;

表相关

  • 前提一定使用了数据库,才能执行表相关的SQL
  1. 创建表
  • 格式: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);
  1. 查看所有表
  • 格式: show tables;
    show tables;
  1. 查看表详情
  • 格式: show create table 表名;
    show create table person;
  • 引擎:
    1. innodb:默认,支持事物、外键等高级操作
    2. myisam: 只支持基础的增删改查操作,不支持事物、外键等高级操作

回顾

  • 数据库相关
  1. show databases;
  2. create database db1;
  3. show create database db1;
  4. drop database db1;
  5. use db1;
  • 表相关
  1. create table t1(name varchar(10),age int);
  2. show tables;
  3. show create table t1;
  • 练习:
  1. 创建2个数据库分别是mydb1 和 mydb2(字符集为gbk)
    create database mydb1;
    create database mydb2 character set gbk;
  2. 在mydb1里面添加员工表emp 里面有姓名 年龄 工资sal
    use mydb1;
    create table emp(name varchar(10),age int,sal int);
  3. 在mydb2里面添加英雄表hero 字段有姓名 年龄 英雄类型type
    use mydb2;
    create table hero(name varchar(10),age int,type varchar(10));
  4. 删除两个数据库
    drop database mydb1;
    drop database mydb2;

表相关 续

  1. 查询表字段信息
  • 格式: desc 表名;
    desc person;
  1. 删除表
  • 格式: drop table 表名;
    drop table person;
  1. 创建表指定引擎和字符集
  • 格式: create table 表名(字段1名 字段1类型,字段2名 字段2类型,…) engine=innodb/myisam charset=gbk/utf8;
    create table person(name varchar(10),age int)engine=myisam charset=gbk;
  1. 修改表名
  • 格式: rename table 原名 to 新名;
    rename table person to t_person;
  1. 修改表引擎和字符集
  • 格式: alter table 表名 engine=myisam/innodb charset=utf8/gbk;
    alter table t_person engine=innodb charset=gbk;
  1. 添加表字段
  • 格式: 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;
  1. 删除表字段
  • 格式: alter table 表名 drop 字段名;
    alter table t_person drop gender;
  1. 修改表名和字段类型
  • 格式: alter table 表名 change 原名 新名 新类型;
    alter table t_person change sal salary int;
  1. 修改字段类型和位置
  • 格式: alter table 表名 modify 字段名 新类型 first/ after xxx;
    alter table t_person modify name varchar(5) after age;

  • 练习:

  1. 创建数据库mydb3 指定字符utf8 并使用
    create database mydb3 character set utf8;
    use mydb3;
  2. 创建temp表 只有id字段 指定引擎为myisam 字符集为gbk
    create table temp(id int) engine=myisam charset=gbk;
  3. 修改表名为t_emp ;
    rename table temp to t_emp;
  4. 修改引擎为innodb 修改字符集为utf8
    alter table t_emp engine=innodb charset=utf8;
  5. 在最后面添加name字段
    alter table t_emp add name varchar(10);
  6. 在name前面添加age字段
    alter table t_emp add age int after id;
  7. 在age后面添加工资sal字段
    alter table t_emp add sal int after age;
  8. 修改sal字段名称为salary
    alter table t_emp change sal salary int;
  9. 修改age字段到最后面
    alter table t_emp modify age int after name;
  10. 删除salary字段
    alter table t_emp drop salary;
  11. 删除表
    drop table t_emp;
  12. 删除数据库
    drop database mydb3;

数据相关

create database db1 character set utf8;
use db1;
create table person(id int,name varchar(10),age int);
  1. 添加数据
  • 全表插入格式: 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’);
  1. 查询数据
  • 格式: select 字段信息 from 表名 where 条件;
    select name from person;
    select name,age from person where id<3;
  1. 修改数据
  • 格式: update 表名 set 字段名=值 where 条件;
    update person set age=50 where id=2;
  1. 删除数据
  • 格式: delete from 表名 where 条件;
    delete from person where name=‘Tom’;

数据相关练习:

  1. 创建hero表 id 名字name 类型type 价格money
    create table hero(id int,name varchar(10),type varchar(10),money int);
  2. 保存以下数据
    insert into hero values(
    1,‘诸葛亮’,‘法师’,18888), (2,‘周瑜’,‘法师’,13888),
    (3,‘孙悟空’,‘打野’,18888), (4,‘小乔’,‘法师’,13888),
    (5,‘黄忠’,‘射手’,8888), (6,‘刘备’,‘展示’,6888);
  3. 修改所有18888为28888
    update hero set money=28888 where money=18888;
  4. 修改所有法师为战士
    update hero set type=‘战士’ where type=‘法师’;
  5. 删除价格为6888的英雄
    delete from hero where money=6888;
  6. 修改小乔为猪八戒
    update hero set name=‘猪八戒’ where name=‘小乔’;
  7. 删除价格低于15000的英雄
    delete from hero where money<15000;
  8. 添加性别gender字段在name的后面
    alter table hero add gender varchar(5) after name;
  9. 修改所有英雄的性别为男
    update hero set gender=‘男’;
  10. 删除所有数据
    delete from hero;
  11. 删除表
    drop table hero;

乱码问题

insert into person values (10,‘刘德华’,17);

  • 如果执行包含中文SQL 报错时 执行以下指令解决
    set names gbk;
  • 如果执行插入中文没有报错 但是查询出现乱码,此时把数据库删除 重新创建确保数据库字符集为utf8 表的字符集为utf8再次测试,如果还是解决不了问题,重新安装数据库或联系项目经理帮忙解决

学习回顾

  1. 数据库相关
  • show databases;
  • create database db1 character set utf8/gbk;
  • show create database db1;
  • drop database db1;
  • use db1;
  1. 表相关
  • 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;
  1. 数据相关
  • 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;