数据库(DB:DataBase):存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的 大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
数据库表:数据库中以表为组织单位存储数据。
常见数据库管理系统(日常开发主要使用MySql与Oracle):
MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite : 嵌入式的小型数据库,应用在手机端。
启动MySql服务(前提是已安装MySql):net start MySql(安装时指定的服务名)
登陆MySql数据库:
a、mysql –u 用户名–p密码(注意-p与密码之间不能有空格)
b、mysql --host=ip地址 --user=用户名 --password=密码
临时切换数据库编码:
set names gbk;
SQL:结构化查询语言(Structured Query Language),是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
SQL分类:
数据定义语言:简称DDL(Data Definition Language),用来定义数据库中的对象:数据库,表,列等。关键字:create,alter,drop, show等
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
SQL通用语法:
sql语句中的关键字建议全部使用大写;
可以使用/**/的方式进行注释,在Sqlyog中可以使用#或者-- 来注释单行
MySql中常用的数据类型包括:int,double,varchar,date
创建数据库:
CREATE DATABSE 数据库名;
CREATA DATABASE 数据库名 CHARACTER SET 字符集;(GBK,UTF-8(SQL中使用UTF8)等)
查看数据库:
查看所有数据库:SHOW DATABASES;
查看某个数据库的定义信息:SHOW CREATA DATABASE 数据库名;
查看正在使用的数据库:SELECT DATABASE();
删除数据库:
DROP DATABASE 数据库名;
切换数据库
USE 数据库名;
创建表:
create table 表名(
字段名 类型(长度) [约束],
字段名 类型(长度) [约束],
...
);
两个约束:
primary key 主键,值唯一,并且不能为空
auto_increment 自动增长
查看表:
查看数据库中的所有表:show tables;
查看某个表的结构:desc sort;
删除表:
DROP TABLE 表名;
修改表:
修改表名:RENAME TABLE 表名 TO 新表名;
添加列:ALTER TABLE 表名 ADD 列名 类型(长度) [约束];
删除列:ALTER TABLE 表名 DROP 列名;
修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) 约束;
修改列的长度类型约束:ALTER TABLE 表名 MODIFY 列名 类型(长度) 约束;
修改表的字符集:ALTER TABLE 表名 CHARACTER SER 字符集;
增:
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
insert into 表 values (值1,值2,值3..);
值与字段必须对应,个数相同,类型相同
值的数据大小必须在字段的长度范围内
除了数值类型外,其它的字段类型的值必须使用引号引起。
如果要插入空值,可以不写字段,或者插入 null。
删:
delete from 表名 ;(会删除表中的所有数据,但不会清空自增长字段的起始值)
delete from 表名 [where 条件];
truncate table 表名;(会删除表中的所有数据,且清空自增长字段的起始值,相当于直接Drop table,再create)
改:
update 表名 set 字段名=值,字段名=值,...;
update 表名 set 字段名=值,字段名=值,... where 条件;
列名的类型与修改的值要一致.
修改值得时候不能超过最大长度.
除了数值类型外,其它的字段类型的值必须使用引号引起
查:
语法:略;
MySql中的查询条件运算符列表如下:
比较运算符 |
> < <= >= = <> != |
大于、小于、大于(小于)等于、不等于 |
|
BETWEEN ...AND... |
显示在某一区间的值(含头含尾)(也可以是日期) |
|
IN(set) |
显示在in列表中的值,例:in(100,200) |
|
LIKE ‘张%’ |
模糊查询,Like语句中, %代表零个或多个任意字符, _代表一个字符, 例如:first_name like ‘_a%’; |
|
IS NULL /IS NOT NULL |
判断为空/不为空 where name IS NULL 和name = ‘’ |
逻辑运算符 |
and |
多个条件同时成立 |
|
or |
多个条件任一成立 |
|
not |
不成立,例:where not(salary>100); |
1、常见查询方式
排序查询:
通过ORDER BY 关键字可以对查询结果进行排序,格式如下:
SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC;
ASC 升序 (默认)
DESC 降序
聚合查询:
使用聚合查询可以对查询出来的结果集数据进行纵向的计算,得出需要的结果,常见聚合函数如下:
COUNT():统计指定列不为NULL值的记录数
SUM():计算指定列的数值和,如果指定列数据类型不为数值类型,那么结果为0
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
MIN():计算指定列最小值,如果指定列是字符串类型,那么使用字符串排序运算
AVG():计算指定列的平均值,如果指定列不是数值类型,那么结果为0
分组查询:
使用GROUP BY关键字对查询的结果集进行分组,格式如下:
SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 分组条件;
此处的HAVING作用与WHERE类似,区别在于,HAVING是对分组后的结果集进行过滤,WHERE是在分组之前对数据进行过滤。HAVING之后可以使用统计(聚合)函数进行数据过滤,WHERE后面不可以。且当GROUP BY后需要继续进行分组的话,不可用WHERE,只可以用HAVING。
分页查询:
SELECT 字段1,字段2... FROM 表明 LIMIT M,N;
M:表示从第几条索引开始,计算方式为(当前页-1)*每页条数
N:整数,表示查询多少条数据
2、SQL约束
数据库表中的数据完整性约束包括:
实体完整性:对数据行的约束,如:主键约束,唯一约束
域完整性:对数据列的约束,如默认约束,非空约束
引用完整性:外键约束(多表的关系)
主键约束:
使用PRIMARY KEY 标记表中需要被声明为主键的字段,一张表中的主键只能是唯一值,主键不能为NULL,每张表有且只能有一个主键。PRIMARY KEY的声明方式有三种:
方式一:创建表时直接在字段后面声明;
方式二:创建表时,在约束域的声明中,指定主键,格式:[constraint 名称] primary key (字段列表)
方式三:创建表后,修改表添加主键,格式:ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
删除主键约束:ALTER TABLE 表名 DROP PRIMARY KEY;
自动增长:
使用auto_increment关键字可以将表中的某个字段声明为自动增长,自动增长的列类型必须为整型,自动增长列必须为键,自动增长列的默认值为1,如果希望更改,可以使用ALTER TABLE Persons AUTO_INCREMENT=新的起始值;
非空约束:
NOT NULL关键字,可以在创建时声明,或通过 ALTER TABLE 表名 MODIFY 列名 列值类型 NOT NULL;更改。
唯一约束:
UNIQUE关键字,声明方式三种,类似主键,不再赘述。
删除唯一约束语法:ALTER TABLE 表名 DDIFY 字段名 字段值类型 DEFAULT '北京';修改
默认约束:
DEFAULT关键字,可在建表时声明,或通过MODIFY关键字进行更改