数据库操作语言
标记: 命令不区分大小写 但不能用中文空格 标点等
分类
数据查询语言 dql
数据定义语言 ddl
数据操作语言 dml
数据库理论知识
关系型数据库
MySQL 默认端口3306
db2
oracle 默认端口
面向对象数据库是由面向对象编程语言催生的新型数据库,关系数据库是理论最成熟,应用最广泛的数据库,最基本的数据存储单元就是数据表,数据表是存储数据的逻辑单元,可以把数据表想象成由行和列组成的表格,其中每一行也被称为一条记录,每一列也被称为一个字段
数据库(Database,简称DB):按照数据结构来组织,存储和管理数据的仓库
按照数据结构来组织,存储和管理数据的仓库
数据库管理系统(Database Management System,简称DBMS):是所有数据的知识库,它负责管理数据的存储、安全、一致性、并发、恢复和访问等操作,有一个数据字典(有时称系统表)用于存储它所拥有的每个事务的相关信息,例如名字、结构、位置类型,这种数据也称为元数据
发展历史:网状型-->层次型-->关系型-->面向对象型
数据(Data):对客观事物的符号表示,是数据库中存储基本对象
种类:文字、图形、图像、声音
对数据库的操作
显示 show databases;
set names gbk --建表前设置编码
create database 名字 ----创建数据库
drop database 名字-------删除数据库
use 数据库名字------进入数据库
对表的操作
表的创建
create table 名字(列名 类型(长度), .......) ------创建一个表
CREATE TABLE 表名 (列名 列的类型,列名 列的类型 , 列名 列的类型,.............. ); 例如: CREATE TABLE XS(XH VARCHAR(10) , XM CHAR(8),JS INT , LL INTEGER, WH INT);
列的约束
总体结构 create table 表名(列名 列类型 约束,列名 列的类型 约束,.......);----------------创建表的时候进行约束
标记: 多个约束可以同时存在一个列上
ALTER TABLE FILE ADD CONSTRAINT FOREIGN KEY(FILEID) REFERENCES FOLDER(FID) ON DELETE CASCADE;
外键约束
FOREIGN KEY (本表的外键列名) REFERENCES 其他表名(其他表的主键列名)-----------减少冗余信息
标记: 写在所有属性之后 用逗号分开
CREATE TABLE XS1
(
学号 varchar(6) NULL,
姓名 varchar(8) NOT NULL,
出生日期 datetime NULL,
PRIMARY KEY (姓名),,
FOREIGN KEY (本表的外键列名)
REFERENCES 其他表名(其他表的主键列名)
ON DELETE RESTRICT/CASCADE
ON UPDATE RESTRICT/CASCADE
);
on delete cascade /on update cascade
标记: 删除 /修改 级联 即 如果外键关联的数据发生改变 也自动改变
on delete restrict /on update restrict
标记: 删除 修改 约束 不能修改外键关联的主键
check 指定值约束 mysql暂不支持
自增列 auto_increment 建表时一般加在主键列列上 (只有唯一才能自增长)
唯一约束
unique
主键不需要加入唯一约束
CREATE TABLE XS1
(
学号 varchar(6) NULL,
姓名 varchar(8) NOT NULL,
出生日期 datetime NULL,
PRIMARY KEY(学号),
UNIQUE(姓名)
);
非空约束
标记: 任何一列都可以
not null----
create table student(no int primary key, name varchar(10) not null unique,sex char(2));
主键约束
标记: 一个表上一般只有一个 也可以有复合主键
primary key -----
create table student(no int primary key, name varchar(10) not null,sex char(2));
create table student(no int primary key, name varchar(10) not null,sex char(2) NULL);
列的类型
char---字符 一个汉字占两个字节
date ---日期 格式为:2016-1-4
datatime 时间日期的结合
blob 二进制数据
int ---数字 可以规定长度
time ---时间 格式为 12:02:45
varchar ----字符串 占用 长度+1个字节
对表的操作
show tables -----显示所有的表
更改名字
alter table 表名 rename 新表名------更改表的名字
rename table 表名 to 新表名
drop table 名字 ------删除表
desc 表名-----显示表结构
表结构的修改 对列的操作
删除列
alter table 表名 drop 列类型-----删除列
ALTER TABLE XS DROP PRIMARY KEY; 删除表中的主键
增加列
alter table 表名 add 列名 列类型 after 列名3-----增加一列 在列3后边
alter table 表名 add 列名 列类型 -------增加新的一列,在最后的一列
alter table 表名 add 列名 first ---增加一列在第一列
修改列
alter table 表名 modify 列名称 列类型--------修改列的数据类型
标记: 只能修改列类型
alter table 表名 change 列名 新列名 列类型
标记: 同时修改列名和列类型
alter table xs1 change xh xh1 varchar(12) primary key; 修改列的名称和类型
更改表的名字
alter table 表名称 modify 列名称 列类型------更改类的数据类型
alter table 表名 change 原列名 新列名 新列类型--------更改类的数据类型
where 的用法
between 值1 and 值2-----在值1和值2之间
regexp 正则表达式匹配
and -并 or-或 is null 为空 is not null 不为空 = 等于 <> 不等于 != 不等于 < 小于 > 大于
对数据的操作
增加数据
insert into 表名 set 列名=数据,列名=数据...----------插入部分数据
insert into 表名(列名1,列名2...)values (数据1,数据2...) ---------插入部分数据 (表名后边括号里列出的数据)
insert into 表名(按列的顺序和类型插入数据)------插入数据(必须全部插入)
日期
now / sysdate当前日期-----返回当前日期和时间
curtime ---返回当前时间
curdate /current date 当前日期
删除数据
标记: 删除的是列表中的行
delete from 表名---------删除表中所有数据
truncate table 表明 -------删除表中所有数据 并重置主键
delete from 表名 where 列名=列值--------删除符合条件的数据
例如:DELETE FROM LOGIN WHERE NAME='WANGWU'
DELETE FROM LOGIN WHERE NAME='ZHANGSAN' OR PASS='123';
DELETE FROM LOGIN WHERE NAME='ZHANGSAN' AND PASS='123'; //带条件的行删除
修改数据
update 表名 set 列名=列值 where 指定条件-----更新符合指定条件的数据 如果没有条件则更改所有的值
UPDATE T3 SET NAME='ZHANGSAN'; 所有的name列都变成zhangsan
UPDATE T3 SET NAME='LISI' WHERE ID =2;
查看数据
select * from 表名 where 条件-----按条件查找
select * from 表名------查看表的所有信息
按条件查找数据和操作
DISTINCT --------去除重复的数据
SELECT DISTINCT 列名 FROM BOOKS;
in 确定一个集合(即只能是集合中的内容)
WHERE ( BETWEEN AND ,AND OR IS NULL IS NOT NULL NOT , > < = != ........... IN 确定集合 )
IN 确定一个集合 NOT IN
select name from book where id in (125,127,129,131);
SELECT 查询的列 FROM 表名 WHERE 条件-----在查找的结果中只显示指定列
SELECT NAME,PRICE FROM BOOKS ;
as 起别名
SELECT 列名 AS 别名 FROM BOOKS;
在having 后边可以用
like 模糊查询 _ 单个字符 % 0个或多个字符
having ----相当于where 只能用在分组后面来作为判断
order by 列名 desc/asc ----按“列名”进行 降序/升序 排列
SELECT * FROM BOOKS ORDER BY pubdate desc
SELECT * FROM BOOKS ORDER BY price desc , num asc;
标记: 先按第一列排 当第一列相同是按第二列排 以此类推
子查询 ------即把查询结果作为另一个查询的参数 查找嵌套
标记: 如果返回是一个表 则需要在表后边起一个别名 (子查询结果) a a 即为别名
聚合函数
标记: 结果可以单独作为一个参数
max ---最大值
min-----最小值
avg-----平均值
count ----行数
sum-----求和
关联查询
内连接
只显示表的交集 即只显示两个表里都有的信息
select * from 表1 inner join 表2 on 表名.列名=表名.列名
最后的必须是表与表相同的列
右连接
显示位于连接语句的左边的表的所有信息 加上右边表的交集信息 没有的显示为null
select * from 表1 left join 表2 on 表名.列名=表名.列名
最后的必须是表与表相同的列
左连接
显示位于连接语句的右边的表的所有信息 加上左边表的交集信息 没有的显示为null
select * from 表1 right join 表2 on 表1名.列名=表2名.列名
分组
limit 5/ limit 5,6 ----分页 第一个数字 开始的序号 第二条数据 偏移量
表名 group by 列名------按列名分组
SELECT NOTE, AVG(PRICE) FROM BOOKS GROUP BY NOTE;
注意,分组语句 GROUP BY 后面的列可以在SELECT 后出现,
其他列出现没有意义。聚合函数经常结合GROUP BY一起使用
select 查找的语句顺序 [可省略]