JavaWeb基础篇(七)--MySQL基础(一)

一、SQL语句分类

1.DDL:数据库或表的结构操作

2.DML:对表的记录进行更新(增,删,改)

3.DQL:对表的记录的查询

4.DCL:对用户的创建及授权

二、DDL(数据库或表的结构操作)

1.数据库操作

(1)创建数据库

.创建数据库的语法

  * 基本的语法:create database 数据库名称;

  * 正宗的语法:create database 数据库名称 character set 编码 collate 校对规则;

.校对规则(了解):决定当前数据库的属性。 
   * utf8默认校对规则是utf8_general_ci 

创建一个名称为mydb1的数据库。  
  * create database mydb1;
创建一个使用utf8字符集的mydb2数据库。  
  * create database mydb2 character set 'utf8';
创建一个使用utf8字符集,并带校对规则的mydb3数据库。  
  * create database mydb3 character set 'utf8' collate 'utf8_bin';

(2)查看数据库

. show databases;             -- 查看所有的数据库
. use 数据库名称;             -- 使用数据库
. show create database 数据库名称;  -- 查询数据库的创建的信息
. select database();         -- 查询当前正在使用的数据库

(3)删除数据库

. drop database 数据库名称;     -- 删除数据库

(4)修改数据库

. alter database 数据库名称 character set 'utf8' collate '校对规则';

2.数据类型

这里有一篇很详细的介绍了数据库类型的博文:https://www.cnblogs.com/whgk/p/6142780.html

(1)字符串型

VARCHAR   :长度是可变的    例子:name varchar(8) ,存入数据hello,存入进去之后,name字段长度自动变成了5。
CHAR     :长度是不可变的。  例子:name char(8) 存入数据hello,用空格来补全剩余的位置。 

注意: 
  - 常用VARCHAR。 
  - CHAR 是固定长度的,所以处理速度比VARCHAR快的多,但是浪费空间。所以设计数据表的时候注意选择。

(2)大数据型

BLOB     :字节(电影 mp3) 
TEXT     :字符(文本的内容) 

注意:
  - 并不常用该数据类型。 
  - 针对此类问题建议去了解  “数据库+文件系统” 这个概念。

(3)数值型

整数类型:    TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
浮点数类型:    FLOAT、DOUBLE
定点小数:    DECIMAL 

注意: - 这部分详细了解的话参考博客. https://www.cnblogs.com/whgk/p/6142780.html

(4)逻辑型

BIT    在Java中是true或者false,在数据库bit类型(1或者0)

(5)日期型

YEAR      :只包含年份 (YYYY)
DATE      :只包含日期(YYYY-MM-DD) 
TIME     :只包含时间(HH:MM:SS)
DATETIME   :包含日期和时间(YYYY-MM-DD HH:MM:SS)。如果插入数据的时候,字符值为空,字段的值就是空了。
TIMESTAMP   :包含日期和时间(YYYY-MM-DD HH:MM:SS)。如果插入数据的时候,设置字段的值为空,默认获取当前的系统的时候,把时间保存到字段中。

3.表结构操作(CURD)

(1)创建表

.语法:   
  create table 表名称(   
   字段1 类型(长度) 约束,    
   字段2 类型(长度) 约束,   
   字段3 类型(长度) 约束   
  );

.AUTO_INCREMENT:设置自增,但是只适用于INT字段。MYSQL表中只能有一个AUTO_INCREMENT字段,而且这个字段必须被定义为键。 

.DEFAULT:为字段设定一个默认值。当插入记录时,没有传该字段的的值,MySQL会自动设置该字段默认值。
   * name varchar(25) not null default 'QQ' 

.注意:  
  * 创建表的时候,后面用小括号,后面分号。 
  * 编写字段,字段与字段之间使用逗号,最后一个子段不能使用逗号。  
  * 如果声明字符串数据的类型,长度是必须指定的。  
  * 如果不指定数据的长度,有默认值的。int类型的默认长度是11 

(2)删除和查看表

.删除表语法:drop table 表名; 

.查看标签   
 * desc 表名;                 -- 查询表的信息  
 * show tables;               -- 查看当前数据库中所有的标签  
 * show create table 表名;    -- 查看表的创建的信息

(3)修改表

.语法  
 * alter table 表名 add 新列名 类型(长度) 约束;         -- 添加列  
 * alter table 表名 drop 列名;                 -- 删除列  
 * alter table 表名 modify 列名 类型(长度) 约束;        -- 修改列的类型或者约束   
 * alter table 表名 drop index 列名;              -- 删除unique约束。 
 * alter table 表名 add constraint 列名  约束;         -- 给属性添加元素
 * alter table 表名 change 旧列名 新列名 类型(长度) 约束;     -- 修改列名   
 * rename table 表名 to 新表名;                 -- 修改表的名称  
 * alter table 表名 character set utf8;             -- 修改表的字符集

4.约束

(1)约束是表中数据的限制条件,是为了保证表中记录的完整和有效。

(2)约束的种类

. not null              -- 非空约束      name varchar(10) not null    
. unique               -- 唯一性约束     email varchar(64) unique    
. primary key               -- 主键约束     id int(4) primary key 
  * 自增长 auto_increment        -- 可以帮助维护主键信息    
. foreign key               -- 外键约束     

(3)关于约束的详细介绍请看博客:https://blog.csdn.net/w_linux/article/details/79655073

 https://blog.csdn.net/apt1203jn/article/details/80314605#commentBox

三、DML(对表的记录进行更新(增,删,改))

1.MySQL插入插入中文数据乱码

.先把MySQL服务停止。

.找到MySQL安装文件的my.ini的配置文件

    [client]
    port=3306
    [mysql]
    default-character-set=gbk

.重启MySQL服务

2.插入数据

 * insert into 表名 (字段1,字段2,字段3) values (值1,值2,值3);
 * insert into 表名 values (值1,值2,值3);

.注意事项

  * 插入的数据与字段类型必须是相同的。
  * 数据的大小范围在字段范围内
  * 值与字段一一对应
  * 字符串或者日期类型数据需要使用单引号

3.修改数据

.语法:update 表名 set 字段1=值,字段2=值 where 条件;        where username = 'zcm';

.如果没有where条件语句,默认更新所有的数据。

.如果有where条件,默认更新符合条件的记录。

4.删除数据

.语法:delete from 表名 where 条件;

.如果没有where条件,默认删除所有的数据。

.truncate 表名:删除表中所有的数据。

  delete from 表名: 也可以删除所有数据。

    * 区别: truncate先把你整个表删除掉,默默创建一个空的表(和原来的表结构是一样的)。

    * delete from 表名 一行一行的删除。(使用它)

    * 事物的概念:事物提交和事物回滚。

四、DQL(查询数据)

1.查询数据

 .语法

  * select * from 表名;           -- 查询所有列的记录

  * select 字段1,字段2,字段3 from 表名;   -- 查询字段123的记录

  * DISTINCT -- 去除重复的数据

    select distinct english from stu;

2.查询语句中使用运算和别名

. 在所有学生分数上加10分特长分。   
   * select name,(math+10) m,(english+10) e,(chinese+10) c from stu;
. 统计每个学生的总分。    
   * select name,(math+english+chinese) 总分 from stu;
. 使用别名表示学生分数   
   * select name,(math+english+chinese) 别名 from stu;

 

3.使用where 条件过滤

.查询姓名为聪聪的学生成绩

 * select name,math,chinese from stu where name = '聪聪';

.查询英语成绩大于90分的同学

 * select name,english from stu where english > 20;

.查询总分大于200分的所有同学

 * select name,math+english+chinese from stu where (math+english+chinese) > 200;

4.where 子句中处出现的运算

. >   <   <=   >=   =    <>        大于、小于、大于(小于)等于、不等于

. in 表示范围。
    * select * from stu where math = 18;           查询出一条数据
    * select * from stu where math in (78,18,99);      

. like  模糊查询 -- 符合模糊的条件

    * select * from stu where name like '张_';       姓张的名称(只有两个)的记录
    * select * from stu where name like '张%';       姓张的名称(张飞 张翼德)的记录。
    * select * from stu where name like '%张';       末尾是张(聪聪张   XSDF张)
    * select * from stu where name like '%张%';      只要名称中包含张。

.is null   判断某一个字段记录是否为空

.and与  or或者  not非

  * select * from stu where math > 80 or chinese > 80;

5.order by 对查询的结果进行排序

.排序的语法

  * select * from 表名 where 条件 order by 列名 升序/降序;

.升序和降序

  * order by 列名 asc;(升序,默认值)
  * order by 列名 desc;(降序)

.order by 子句必须出现在select语句的末尾。

6. 聚集函数

.聚集函数:总计某一列数据总和。一列的个数。一列的平均数。一列中最大值和最小值。

.聚集函数来操作列的。
 
.聚集函数

 * count       -- 计数
 * sum        -- 求和
     * ifnull  判断是否为空:语法:ifnul(xxx,0)    如果xxx为null,替换成0
 * avg       -- 平均值
 * max       -- 最大值
 * min       -- 最小值

.eg:

  * 统计一个班级数学总成绩

   select sum(math) from stu;

  * 统计一个班级语文、英语、数学各科的总成绩

   select sum(math),sum(english),sum(chinese) from stu;

  * 统计一个班级语文、英语、数学的成绩总和

   select sum(ifnull(math,0)+english+chinese) from stu;
   select sum(math) + sum(english) + sum(chinese) from stu;

  * 求班级英语最高分和最低分

   select max(english) from stu;

   select min(english) from stu;

7.分组(**)

.使用group by 字段 进行分组的。

   select product,sum(price),count(*) from orders group by product; 
   select product from orders group by product having sum(price) > 100;

.注意:

 Having和where均可实现过滤,但在having可以使用聚集函数,where不能使用聚集函数,having通常跟在group by后,它作用于分组

8.总结

select ... from ... where ... group by ... having ... order by ...

* 固定的顺序:如果没有上述的条件,把关键字去掉就ok。

后续知识点请访问:JavaWeb基础篇(七)--MySQL基础(二)

猜你喜欢

转载自blog.csdn.net/weixin_43815050/article/details/87274533