传智播客JavaWeb day09-mysql入门、数据库操作、数据库表操作、数据行操作

不知不觉已到了第九天了,今天主要讲了关系数据库的基本概述、安装、数据库、表和数据行的操作

1. 基本概述

  1.1 数据库就是用来存储数据的。早期是存在文件里面的操作起来效率低而且不是很安全。

  1.2 关系型数据库。这个可以简单理解成以表的形式存储的数据库,表与表存在着某些关系,而数据库能帮我们保存这种关系。

  1.3 ANSI和ISO制定了一套SQL标准,所有数据库厂商都得遵循这个标准,但是他们也各自进行了扩展(即他们的SQL方言如:oracle的pl/sql,sql server的T-sql)

2.安装

 安装很简单就不赘述了

3.操作数据库 ps:其实就是讲了数据库的CRUD(格式:要做的操作+操作对象类型+对象名字)

  3.1 创建数据库

    3.1.1 创建一个数据库 mydb4

             create database mydb4;

    3.1.2 创建一个字符集为gbk的数据库mydb5

         create database mydb5 character set gbk;

  3.2 查看数据库 

    3.2.1 查看数据库列表  show databases;

    3.2.2 查看被选中的数据库(正在操作的数据库) select database();

    3.2.3 查看指定数据库的创建语句 show create database mydb5;

  3.3 修改数据库

    将mydb5的字符集修改成utf8

alter database mydb5 character set utf8;

  3.4 删除数据库

    drop database mydb5;

  3.5 补充

    3.5.1 选中数据库 use mydb4;

    3.5.2 数据库中自带的数据库不要删,因为数据库运行的时候依赖这几个数据库。比如:当你新建一数据库的时候,他会将自带的数据库当做模板

4.操作表

  4.1创建表

    练习:在mydb2中创建表employee(id,name,gender,bithday,entry_date,job,salary,resume)

    4.1.1 约束  主键约束:primary key;唯一性:unique;非空:not null

  4.2 修改表

    Alter table 表名 Add/modify/drop/change

    4.2.1 增加一列 alter table 表名 add 列名 类型  alter table employee add image blob;

    4.2.2 修改某一列的类型 alter table 表名 modify 列名 类型  alter table dept modify dept_name varchar(44)

    4.2.3 修改表名  rename table 表名 to 新表名

    4.2.4 修改列名称 alter talbe 表名 change 列名 新列名 类型 alter table dept1 change dept_name name varchar(22);

    4.2.5 修改表的字符集 alter table 表名 character set uft8   alter table dept1 character set gbk;

  4.3 查看表

    4.3.1 查看表结构 Desc+tableName

    4.3.2 查看建表语句  show create table +tableName

  4.4 删除表

   drop table 表名 删除表中的数据,标识不会重新计数

    truncate table employee 摧毁表在重建表,标识也会重新开始计数

  4.5 附属补充

    4.5.1 varchar和char:varchar类型长度可变,char类型长度不可变,但是char类型读取性能高,varchar每次都要判断长度

    4.5.2 大数据类型:blob(大二进制,最大支持4G,读取时用byte数组)、Text(文本类型,读取时用char数组)

    4.5.3 数值类型vsjava类型:  tinyint = byte;smallint  = short; int = int ;bigint = long;

    4.5.4 bit类型(默认是一位可用来保存bool值)

    4.5.5日期类型。date(日期)、time(时间)、datetime(日期时间)、timestamp(时间戳,当行数据发生改变时这个值会自动变可用来记录最后更改时间)

    4.5.6 mysql中sql语句中有字符跟日期是要用单引号(数据库中不认双引号,只认单引号)

    4.5.7 mysql中乱码的问题 数据库服务器默认是用iso8859-1来保存数据的,当有中文从客户端传过来的时候,服务器在iso8859-1这张码表里没有找到对应的编码,所以保存时会出现乱码.  ps:可以通过设置mysql安装目录下的my.ini来更改服务器端默认码表(每个国家都有自己的码表)

    4.5.8 插入数据时auto_increment字段给null

    4.5.9 如果要插入所有字段列的声明可以省写 insert into dept1 values(……)

5.操作数据行

  5.1 模糊查询(% _) select * from dept where dept_name like '%a%' 或者 like 'a_'(a后面跟一个字符)

  5.2 聚合函数(就是数据库自带的一些函数)

    select count(name), math+chinese 总成绩 from exam where math+chinese(这里不可用总成绩来替代因为数据库语句的执行顺序问题) >180

    select  name,math+chinese 总成绩 from exam order by 总成绩(这里可以替代也是执行顺序的问题)

  5.3 只要null参与计算的结果都会为null  ps:利用ifnull(字段,0)排除计算结果为null

  5.4 group by 分组后一组只显示一条了(摞在一起了);没有用聚合的字段必须在group by之后

  5.5 where 和having的区别 where 是分组之前进行过滤,having是分组之后进行过滤;where后不能用聚合函数(执行顺序的问题),having可以

  5.6 sql的书写顺序 select from where group by having order by

  5.7 sql的执行顺序 from where select group by having order by

6. 多表设计  ps:为什么叫关系型数据库,因为表与表之间存在着某种关系,而数据库能帮我们保持这种关系所以就叫关系型数据库(如:外键)

  6.1 外键

    某一个表中一列数据会参照另外一个表中的列(主键)

  6.2 表关系类型

    6.2.1 1对1 任意表中保存一方主键作为外键

    6.2.2 1对多  多方表中保存1方主键作为外键

    6.2.3 多对多  建立中间表保存两方主键

  6.3 多表查询  inner join,left join,right join,full join

  

上一篇:java深拷贝的实现


下一篇:npm link中文文档