1.1 MySQL概述
1.1.1 什么是MySQL数据库
1.1.2 关系型数据库关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。
1.1.3 ER模型图E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;
用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)
1.1.4常见的关系型数据库MySQL
Oracle
SQLServer
DB2
SyBase
1.1.5 MySQL数据库存储数据方式
1.2 SQL的概述
1.2.1 什么是SQL(Structured Query Language)
1.2.2 SQL的分类
1.2.2.1 DDL(数据定义语言 Date Definition Language)
--创建新数据库/表(码字方便,SQL无此种语法)create database / table
--更该数据库/表alter database / table
--删除表drop table
1.2.2.2 DCL(数据控制语言 Date Control Language)
grant --权限分配revoke --撤销权限
1.2.2.3 DML(数据操纵语言 Date Manipulation Language)
update -- 更新数据库表中的数据
delete -- 从数据库表中删除数据
insert into -- 向数据库表中插入数据
1.2.2.4 DQL(数据查询语言 Date Query Language)
select -- 从数据库表中获取数据
1.3 SQL的使用
1.3.1对数据库进行操作
1.3.1.1创建数据库
--语法:create database 数据库名称 [character set 字符集 collate 字符集校对规则 ]--例如:--ex1:创建数据库名称为db1的数据库create database db1;
--ex2:创建数据库名称为db2,字符集为utf8的数据库create database db2 character set utf8;
----ex3:创建数据库名称为db3,字符集为utf8,字符集校对规则为utf8_bin的数据库create database db3 character set utf8 collate utf8_bin;
1.3.1.2 查看数据库 :
--查看数据服务器中所有的数据库show databases;
--查看某个数据库的定义信息show create database db2;
1.3.1.3 修改数据库:
/*语法:alter database 数据库名称 character set 字符集 collate 字符集校对规则类似于创建数据库,只是将关键字替换为 alter*/
alter database db1 character set gbk;
1.3.1.4 删除数据库:
/*语法: drop database 数据库名称*/
drop database db1;
1.3.1.5 其他数据库的操作:
--切换数据库use 数据库名称
--查看正在使用的数据库select database();
1.3.2 SQL对数据库表进行操作
1.3.2.1创建表语法:
create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束。。。。);
字段类型:一个实体对应一个表,一个实体的属性对应一个字段
1.3.2.2数据类型:Text 类型:
(注:char保存固定长度的字符串,例如定义char(8),存入hello,那么数据库将会用三个空格将其补全;varchar 保存长度可变的字符串,例如定义varchar(8),存入hello,那么存入数据库的就是hello)Number类型:date数据类型:
(注:datatime()是既有时间又有日期的日期类型,如果没有像数据库中存值,数据库就会使用null存入到数据库中;timestamp()也是既有时间又有日期的日期类型,如果没有日期存入到数据库中,数据库会使用系统的当前时间存入到数据中)
1.3.2.3约束:
作用:保证数据的完整性
单表约束分类:主键约束:primary key(主键约束默认就是 唯一 、非空的)
--在创建表时创建主键create table Persons{
ID_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
primary key(ID_P)
}
--如果需要给primary key 命名及为多个列定义primary key时,用下面的语法create table Persons{
ID_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
constraint uc_PersonID primary key(ID_P,LastName)
}
--如果表已经存在,给列创建主键约束时,请使用下面的语法alter table Persons add primary key (ID_P);
--如果表已经存在,需要给primary key 命名及为多个列定义primary key时,用下面的语法alter table Persons constraint pk_PersonID primary key(ID_P,LastName);
--撤销主键约束alter table Persons drop primary key;唯一约束:unique
/*unique 约束唯一标识数据库中表的每条记录unique 和primary key 都可以为列或者列集合提供唯一性约束primary key 拥有自定义的唯一性约束每个表可以拥有很多个unique约束,但是primary key 只能有一个*/
--在创建表时创建约束create table Persons(
ID_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
unique(ID_P)
);
--其余情况与primary key 相同,只需将关键字替换为unique即可非空约束:not null
CREATE TABLE Persons
(
Id_P int NOT NULL,--此处的not null 即为非空约束,这意味着如果不向字段添加值,就会报错LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)默认约束:default
/*default 约束用于向列中插入默认值如果没有规定其他值,那么会将默认值添加到所有的新纪录*/
create table Persons{
ID_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255) default 'Sandnes'
}
--另外可用使用getdate()这样的函数,和default约束用于插入系统值create table Orders(
Id_O int not null,
OrderNo int not null,
Id_P int,
OrderDate date default getdate()
);限制约束:check
-- check用于限制列中值的范围create table Persons{
ID_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255) ,
check (ID_P > 0)
}
1.3.2.4 SQL查看表查看某个数据库下的所有表
show tables;查看某个表的结构信息
desc 表名
1.3.2.5 SQL删除表
drop table 表名
1.3.2.6 SQL修改表修改表:添加列
-- 语法:alter table 表名 add 列名 类型(长度) 约束;alter table user add image varchar(20) not null;修改表:修改列类型,长度和约束
-- 语法: alter table 表名 modify 列名 类型(长度) 约束;alter table user modify image varchar(50);修改表:删除列
-- 语法:alter table 表名 drop 列名;alter table user drop age;修改表:修改列名称
-- 语法:alter table 表名 change 旧列名 新列明 类型(长度) 约束alter table user change image pic varchar(50) not null;修改表:修改表名
-- 语法:rename table 表名 to 新的表名;rename table table user to person;修改表:修改表的字符集
--语法:alter table 表名 character set 字符集;alter table user character set utf8;
1.3.3 SQL对数据库表的记录进行操作
1.3.3.1 SQL添加表的记录语法:
向表中插入某些列:insert into 表名(列名1,列名2,列名3....) values(值1,值2,值3...)
向表中插入所有列:insert into 表名 values(值1,值2,值3)
注意事项:值的类型与数据库中表列的类型一致
值的顺序与数据库中表列的顺序一致
值的最大长度不能超过列设置时的长度
值的类型是字符串或者是日期类型的时候,使用单引号括起来添加记录
--添加某几列insert into user (id,username,password) values (null,'xiaoli','1234');
-- 添加所有列insert into user values (null,'aaa','213',21,'1994-2-9');修改记录
语法:update 表名 set 列名 = 值,列名2 = 值 [where 条件]
注意事项:值的类型与列的类型一致
值的最大长度不能超过列设置的最大长度
字符串类型即日期类型加单引号括起来
-- 修改某一列的所有值update user set password = 'abc';
-- 按条件修改数据update user set password = 'bbb' where id = 2;
-- 按条件修改多个列update user set password = '2145',name = 'helloworld' where username = 'jackmouse';删除记录
语法:delete from 表名 [ where 条件];
注意事项:删除表的记录,指的是删除表中的一条记录
删除如果没有条件,默认删除的是表中的所有记录
-- 删除某一条记录delete from user where id =1;
--删除表中的所有记录delete from user;
/*注:delete from user 属于DML语言,一条记录一条记录的删除,事物可以作用在DML语句上,truncate table user 属于DDL语言,将表删除,然后重新创建一个结构一样的表,事物不能控制DDL语言*/
1.3.3.2 SQL查看表的记录(重点掌握,下次单独写)
书写顺序:
S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);
解析顺序:
f... w...g ...h...s...o
from:要查询,先得找到数据的位置------即表的位置
where:没有任何聚合操作,对一行行的数据进行筛选,后面不能直接接聚合函数
group by:按后面接的条件进行分组
having:分组后,会有多个组存在,再按having后面接的条件筛选
select:按上面的条件查询到要的列的数据
order by :根据查询到的列的数据,进行升序或者降序排列