[Day28]数据库(数据库、表及表数据、SQL语句)

1.数据库

  1.1 数据库概念

  (1)什么是数据库

    数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

  (2)什么是数据库管理系统

    数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

  (3)常见的数据库管理系统

    MYSQL     :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。

    Oracle      :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。

    DB2         :IBM公司的数据库产品,收费的。常应用在银行系统中.

    SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。

    SyBase     :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。

    SQLite      : 嵌入式的小型数据库,应用在手机端。

    Java相关的数据库:MYSQL,Oracle.

  (4)数据库与数据库管理系统的关系

    

  1.2 数据库表-数据库以表为组织单位存储数据

    类----------表

    类中属性----------表中字段即成员变量

    对象----------记录即对象

  1.3 表数据

    根据表字段所规定的数据类型,我们可以向其中填入一条条的数据,而表中的每条数据类似类的实例对象。表中的一行一行的信息我们称之为记录

2. SQL语句

  2.1 SQL语句-结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统

  (1)SQL分类

    数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

    数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等

    数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。

    数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

  (2) SQL通用语法

    SQL语句可以单行或多行书写,以分号结尾

    可使用空格和缩进来增强语句的可读性

    MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:SELECT * FROM user。

    同样可以使用/**/的方式完成注释

    MySQL中的我们常使用的数据类型如下

      

  2.2 数据库操作:database

  (1)创建数据库

    格式:     

create database 数据库名;
create database 数据库名 character set 字符集; 

     

  (2) 查看数据库

    查看数据库MySQL服务器中的所有的数据库:

show databases;

    查看某个数据库的定义的信息:

show create database 数据库名; 

  (3)删除数据库

drop database 数据库名称;

  (4)其他的数据库操作命令

    切换数据库:

use 数据库名;

  (5)查看正在使用的数据库:

select database();

  2.3 表结构相关语句

  (1) 创建表

    格式:

create table 表名(
   字段名 类型(长度) 约束,
   字段名 类型(长度) 约束
);

  (2)主键约束-主键是用于标识当前记录的字段。它的特点是非空,唯一。在开发中一般情况下主键是不具备任何含义,只是用于标识当前记录。

    格式:

    1.在创建表时创建主键,在字段后面加上  primary key.
    create table tablename(    
      id int primary key,
      .......
      )
    
    2. 在创建表时创建主键,在表创建的最后来指定主键    
    create table tablename(                        
      id int,
      .......,
      primary key(id)
    )

    3.删除主键:alter table 表名 drop primary key;
    alter table sort drop primary key;
    4.主键自动增长:一般主键是自增长的字段,不需要指定。
实现添加自增长语句,主键字段后加auto_increment(只适用MySQL)

  (3)查看表

--查看数据库中的所有表:
show tables;
--查看表结构:
desc 表名;

  (4)删除表

drop table 表名;

  (5)修改表结构格式

alter table 表名 add 列名 类型(长度) 约束;    
作用:修改表添加列. 


alter table 表名 modify 列名 类型(长度) 约束; 
作用:修改表修改列的类型长度及约束.


alter table 表名 change 旧列名 新列名 类型(长度) 约束; 
作用:修改表修改列名.

alter table 表名 drop 列名;    
作用:修改表删除列.

rename table 表名 to 新表名; 
作用:修改表名

alter table 表名 character set 字符集;
作用:修改表的字符集

  (6)插入表记录

insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列

     注意:

        插入的数据应与字段的数据类型相同

        数据的大小应该在列的长度范围内

        在values中列出的数据位置必须与被加入列的排列位置相对应。

        除了数值类型外,其它的字段类型的值必须使用引号引起。

        如果要插入空值,可以不写字段,或者插入 null。               

        对于自动增长的列在操作时,直接插入null值即可。

  (7)更新表记录-用于修改指定条件的数据,将满足条件的记录指定列修改为指定值

update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;

    注意:

        列名的类型与修改的值要一致.

        修改值得时候不能超过最大长度

        值如果是字符串或者日期需要加

  (8)删除记录

delete from 表名 [where 条件];
truncate table 表名;

    区别:

      delete 一条一条删除,不清空auto_increment记录数。

      truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。

  2.4 DOS操作数据乱码解决

   现象:我们在dos命令行操作中文时,会报错

insert into user(username,password) values(‘张三’,’123’);        
ERROR 1366 (HY000): Incorrect string value: 'xD5xC5xC8xFD' for column 'username' at row 1

   原因:因为mysql的客户端编码的问题我们的是utf8,而系统的cmd窗口编码是gbk

   推荐解决方案:命令行下

set names gbk;

   以上操作,只针对当前窗口有效果,如果关闭了服务器便失效

  2.5 SQL查询语句

  (1)查询的语法

查询指定字段信息
select 字段1,字段2,...from 表名;

查询表中所有字段(不推荐使用)
select * from 表名; 
    
distinct用于去除重复记录
select distinct 字段 from 表名;            
别名查询,使用的as关键字,as可以省略的.
别名可以给表中的字段,表设置别名。 当查询语句复杂时,使用别名可以极大的简便操作。
表别名格式: 
select * from 表名 as 别名;select * from 表名 别名;
列别名格式:
select 字段名 as 别名 from 表名;select 字段名 别名 from 表名;

我们在sql语句的操作中,可以直接对列进行运算

  (2)条件查询

    where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。

select 字段  from 表名  where 条件;    

比较运算符

>  <  <=   >=   =  <>

大于、小于、大于(小于)等于、不等于

BETWEEN  ...AND...

显示在某一区间的值(含头含尾)

IN(set)

显示在in列表中的值,例:in(100,200)

LIKE 通配符

模糊查询,Like语句中有两个通配符:

% 用来匹配多个字符;例first_name like ‘a%’;

_ 用来匹配一个字符。例first_name like ‘a_’;

IS NULL

判断是否为空

is null; 判断为空

is not null; 判断不为空

逻辑运算符

and

多个条件同时成立

or

多个条件任一成立

not

不成立,例:where not(salary>100);

   2.6 排序查询-查询,对结果集进行排序

order by 列名[desc][asc]
    desc 降序排列
    asc 升序排列,可以不写,中括号表示可选择项

   2.7 聚合函数

-- 求和
SELECT SUM(列名)FROM 表名;
SELECT SUM(列名)FROM 表名 WHERE 条件;

-- max 函数,对某列数据,获取最大值
SELECT MAX (列名) FROM 表名;

-- min 函数,对某列数据,获取最小值
SELECT MIN(列名) FROM 表名;

-- avg 函数,计算一个列所有数据的平均数
SELECT AVG(列名) FROM 表名;

  2.8 分组查询

group by 被分组的列名
SELECT SUM(列名),其他列名 FROM 表名 GROUP BY 被分组的列名;

    注意:

      必须跟随聚合函数
         select 查询的时候,被分组的列,要出现在Select选择列的后面  

原文地址:https://www.cnblogs.com/ERFishing/p/10802721.html