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: '\xD5\xC5\xC8\xFD' 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选择列的后面