数据库(DB)
保存数据
数据库系统(DBS)
实现有组织地、动态地存储大量关联数据、方便多用户访问的计算机硬件、软件和数据资源组成的系统
数据库管理员(DBA)
控制数据库整体结构的一组人员,负责DBS的正常运行,承担创建、监控和维护数据库的责任
数据库管理系统(DBMS)
位于用户和操作系统之间的一层数据管理软件,DBMS用于管理数据库。应用程序向DBMS发送请求,DBMS则向DB发出底层指令。DB向DBMS返回数据(查询结果),DBMS对数据进行处理并返回给应用程序数据(处理结果)
- Oracle
- MySql
- Sql-Server
- DB2
表
表的每一行代表一条记录,每一列都有一个列名,列名时唯一的,行与列的交叉点称为字段
记录
行,数据表中的一行数据
视图
视图是数据库的虚拟表。在视图中存放的是从数据库表中查询 的记录,使用视图主要是为了方便信息查询,同时也能缩短查询数据的时间
存储过程
https://www.cnblogs.com/mark-chan/p/5384139.html
存储过程是由SQL 语句和控制流语句组成的代码块。存储过程在数据库内,可由应用程序通过存储过程的名称调用执行。
存储过程在开发软件时,可以把大量的数据操作放在服务器端的存储过程中,而只返回需要的数据,这样就减少了数据的传输量,速度也可以大大得提高
触发器
触发器是特殊的存储过程,也是由SQL语句和程序控制语句组成。但是,触发器在数据库中不需调用而是自动执行的。例如,在触发器中可以定义在修改某张表记录后执行触发器中的内容
约束
约束是在数据库中保证数据库里表中数据完整性的手段。在Oracle中使用的约束有主键约束、外键约束、唯一约束、检查约束和非空约束5个,其中主键约束和唯一约束都被认为是唯一约束,而外键约束被认为是参照约束
- 主键(Primary Key)约束
主键约束在每个数据表中只能有一个,但是一个主键约束可以由多个列组成,通常把由多个列组成的主键又叫做复合主键或组合主键。主键约束可以保证主键列的数据没有重复值且值不为空,也可以说是唯一的标识表中的一条记录 - 外键(Foreign Key)约束
外键约束之所以被认为是参照约束,是因为它主要用作把一个表中的数据和另一个表中的数据进行关联,表和表之间的关联是为了保证数据库中数据的完整性,使用外键保证数据的完整性,也叫参照完整性。 - 唯一(Unique)约束
唯一约束和主键约束一样都是设置表中的列不能重复的约束,区别就是一个表中只能有一个主键约束,而却可以有多个唯一约束。通常情况下设置唯一约束的目的就是使非主键列没有重复值。唯一约束和主键约束的另一个区别是如果数据表中的某一列中有空值,那么就不能把这个列设置为主键列,但可以设置为唯一约束 - 检查(check)约束
检查约束是用来指定表中列的值的取值范围的。例如:在员工信息表中的员工年龄的列,如果要使员工的年龄列的值为18~50,就可以使用检查约束进行设置,当输入的值不在有效范围内时,就会出现错误。这样就保证了数据库中数据的有效性 - 非空(not null)约束
非空约束是用来约束表中的列不允许为空的。例如,在员工信息表中员工身份证号码列,要求员工必须输入时,可以使用非空约束来保证该列不能为空
索引
select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快
数据库范式
https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html
事务(Transaction)
在多用户在线共享系统中,许多事务可能同时对同一数据进行操作,称为并发操作。并发可能导致的问题有:丢失更新问题、读胀数据问题、错误求和问题、和不可重复读问题等等。
ACID
- 原子性(Atomicity):一个事务对数据库的所有操作,是一个不可分割的工作单元。这些操作要么全部执行,要么什么也不做
- 一致性(Consistency):一个事务独立执行的结果,应保持数据库的一致性,即数据不会因事务的执行而遭到破坏
- 隔离性(Isolation):在多个事务并发执行时,系统应保证与这些事务先后独立执行的结果一样
- 持久性(Durability):一个事务一旦完成全部操作后,他对数据库的所有更新应永久地反映在数据库中
并发控制
当数据库中有多个事务并发执行时,为了保持事务的隔离性,事务必须对并发事务之间的相互作用加以控制
并发控制负责协调并发事务的执行,保证数据库的完整性,同时避免用户得到不正确的数据
SQL
结构化查询语言
- 数据定义语言(DDL):CREATE(创建)、ALTER(修改)命令、DROP(删除)命令等
- CREATE DATABASE:创建一个新的数据库
- ALTER DATABASE:修改一个数据库。
- CREATE TABLE :创建一张新的表。
- ALTER TABLE :修改一张表。
- DROP TABLE :删除一张表。
- CREATE INDEX :创建一个索引。
- DROP INDEX :删除一个索引
- 数据操纵语言(DML):INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)命令、SELECT … FOR UPDATE(查询)等
- SELECT:从数据库中取出数据。
- UPDATE:更新数据库的数据。
- DELETE:从数据库中删除数据。
- INSERT INTO:向数据库插入新数据
- 数据查询语言(DQL)
包括基本查询语句、Order By子句、Group By子句等 - 事务控制语言(TCL)
包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令 - 数据控制语言(DCL)
GRANT(授权)命令、REVOKE(撤销)命令
sql语法:
-
select 列 from 表 where rownum
- insert into 表 列 values
- update 表 set 列 where
- delete from 表
- select distinct 列 from 表
- select 列 from 表 order by 列1 desc,列2 asc
- and和or
- 前5条:
- mysql:limit 5
- Oracle: rownum<=5
- like '%ab%'
- not like '%df%'
- select 列 from 表 where 列 in (值1,值2,...)
- select 列 from 表 where 列 not between 值1 and 值2
- select 列 as 列别名 from 表 as 表别名
- inner join = join 内连接,匹配时才返回行
- left join 返回左表的所有行 即使在右表中没有匹配
- right join
- full join 两边表都会返回各自所有的行
-
union合并两个或多个select语句的结果集(不会有重复)
- union all合并两个或多个select结果集(重复的也会列出)
- select into 新表 from 旧表 常用于表的备份复件
- create 数据库名
- create 表名 (列1 类型,列2 类型、、、)
- 约束constraint
- unique和primary key
每个表可以有多个unique约束,但每个表只能有一个primary key 约束 -
foreign key 外键约束
- check 只允许特定的值
- default 向列中插入默认值
- index 索引
create index 索引名 on 表 (列) - drop删除数据库、表、以及索引
- alter
- auto increment自增
- view视图
- is null和is not null
SQL函数 - avg() 求某一列的平均值
- count() 指定列的数目
- first() 返回指定列的第一条记录的值
- last()
- max()
- min()
- sum() 返回数值列的总额
- group by 结合合计函数,根据一个或多个列对结果集进行分组
- having 因为where无法跟合计函数一起使用,having可以
- ucase() 字段转换成大写
- lcase()
- mid(列,起始位置,length) 文本字段中提取字符
- len()返回文本字段的长度
- round(列,位数) 将数值字段舍入为指定的小数位数
- now() 返回当前的日期和时间
- format(字段,需要的格式) 对指定的字段的显示进行格式化
SQL语句:
- 创建用户
create user hncu identified by '1234' - 创建数据库并指定编码
create database if not exists db_name default charset 'utf8'; - 删除数据库
drop database db3; - 连接列和字符串
- Oracle用||
- Mysql用concat()和concat_ws()函数,后一个可以加上字符串
select concat(user_id,createtime) from orders;
select concat_ws(':',user_id,createtime) from orders;
- where子句:过滤数据
- Order by子句:排序
- 单行函数:只对一行进行变换,每行返回一个结果
lower()、upper()、sustr()字符串截取、trim()去掉某个字符串、 - 多行函数:对多行进行变换

1 #单行注释 2 3 /* 4 多行注释 5 */ 6 7 #显示mysql中的所有数据库 8 show databases; 9 10 11 use db1;#切换要操作的数据库 12 use guchaolong; 13 14 15 show tables;#显示当前操作的数据库中的所有表 16 show table status from guchaolong;#显示guchaolong数据库中表的信息 17 show table status from guchaolong like 'u%';#以u开头的表的信息 18 19 20 21 show columns from usert;#显示usert表中所有列,包括类型,是否为空,等信息 22 23 show index from usert;#显示usert表的索引信息 24 25 desc usert;#查看usert表完整的表结构 26 desc persons; 27 28 29 #创建数据库 30 create database db1; 31 32 #创建表 33 CREATE TABLE usert ( 34 id INT PRIMARY KEY NOT NULL, 35 name VARCHAR(255), 36 password VARCHAR(255) 37 ); 38 39 CREATE TABLE Persons ( 40 Id_P INT, 41 LastName VARCHAR(255), 42 FirstName VARCHAR(255), 43 Address VARCHAR(255), 44 City VARCHAR(255) 45 ); 46 #增 47 insert into usert (id,name,password) values (1,"root","root"); 48 insert into usert (id,name,password) values (2,"root2","roo3t"); 49 insert into usert (id,name,password) values (3,"roo3t","root3"); 50 51 INSERT INTO Persons VALUES (1,'san', 'zhang', 'Xuanwumen 7', 'guangzhou'); 52 INSERT INTO Persons VALUES (2,'si', 'li', 'xuanwumen 9', 'beijing'); 53 INSERT INTO Persons VALUES (3,'Gates', 'Bill', 'Xuanwumen 10', 'Beijing'); 54 INSERT INTO Persons VALUES (4,'wu', 'wang', 'Xuanwumen 13', 'Beijing'); 55 56 #删 57 delete from usert where id=3; 58 59 #改 60 update usert set password = "root2" where id=2; 61 62 #查 63 select * from usert; 64 select City from persons; 65 66 67 #distinct去重 68 select distinct city from persons; 69 select distinct city,lastname from persons; 70 71 #where选择标准 72 select LastName from persons where id_p=1; 73 74 75 #TOP 76 select * from persons2; 77 select * from persons limit 3;#前三条 78 79 80 #select into 81 CREATE TABLE Persons4 ( 82 Id_P INT not null unique, 83 LastName VARCHAR(255) primary key, 84 FirstName VARCHAR(255), 85 Address VARCHAR(255), 86 City VARCHAR(255) 87 ); 88 desc persons4; 89 select *into persons2 from persons ; 90 91 92 93 CREATE TABLE Persons 94 ( 95 Id_P int NOT NULL primary key, 96 LastName varchar(255) , 97 FirstName varchar(255), 98 Address varchar(255), 99 City varchar(255) 100 ); 101 102 alter table person3 add constraint primary key(id_p); 103 104 use mybatis_study; 105 show tables; 106 desc user; 107 select * from user; 108 select * from orders; 109 select number+1 from orders; 110 111 select concat(user_id,createtime) from orders; 112 select concat_ws(':',user_id,createtime) from orders; 113 114 115 USE GUCHAOLONG; 116 SELECT * FROM PERSONS group by city; 117 SELECT lower(FIRSTNAME) FROM PERSONS; 118 SELECT upper(LASTNAME) FROM PERSONS; 119 select * from persons where UPPER(lastname)='SAN'; 120 121 SELECT lOWER('FDG') FROM DUAL;#fdg 122 SELECT substr('DFSG',1,3);#DFS 123 select substring('hello',1,3);#hel 124 SELECT trim('h'from 'hello');#ello 125 126 select count(*) from persons; 127 create table team( 128 name varchar(3)); 129 insert into team set name='a'; 130 131 insert into team set name='b'; 132 insert into team set name='c'; 133 insert into team set name='d'; 134 select * from team; 135 136 select a.name,b.name from team a,team b where a.name<b.name; 137 select now(); 138 create database if not exists db3 default charset 'utf8'; 139 140 drop database db3; 141 142 create database sqlstudy; 143 use sqlstudy; 144 show tables; 145 146 CREATE TABLE Person ( 147 id INT AUTO_INCREMENT primary key, 148 lastname VARCHAR(20), 149 firstname VARCHAR(20), 150 address VARCHAR(20), 151 city VARCHAR(20) 152 ); 153 insert into Person (lastname,firstname,address,city)values('sf','dg','dgg','gdga'); 154 SELECT * from Person; 155 select distinct firstname from Person; 156 157 create table emp 158 ( 159 id int, 160 name varchar(40), 161 sex varchar(4), 162 birthday date, 163 entry_date date, 164 job varchar(40), 165 salary decimal(8,2), 166 resume text 167 ); 168 show tables;#查看所有表 169 desc emp;#表结构 170 show create table emp;#创建细节 171 alter table emp add image blob;#添加列 172 rename table emp to employee; 173 desc employee; 174 rename table employee to emp; 175 alter table emp modify job varchar(60); 176 alter table emp character set utf8; 177 alter table emp drop sex; 178 alter table emp drop image; 179 180 insert into emp(id,name,birthday,entry_date,job,salary,resume) values(1,'liayun','1992-10-06','2015-09-12','Java程序员',7500,'我是一名合格的程序员'); 181 182 183 insert into emp values(2,'yezi','1993-10-06','2015-09-12','Java程序员',7500,'我是一名合格的程序员'); 184 insert into emp values('3','liyunling','1990-10-06','2015-09-12','Java程序员','7500','我是一名合格的程序员'); 185 select * from emp; 186 187 /*Table structure for table `items` */ 188 189 CREATE TABLE `items` ( 190 `id` int(11) NOT NULL AUTO_INCREMENT, 191 `name` varchar(32) NOT NULL COMMENT '商品名称', 192 `price` float(10,1) NOT NULL COMMENT '商品定价', 193 `detail` text COMMENT '商品描述', 194 `pic` varchar(64) DEFAULT NULL COMMENT '商品图片', 195 `createtime` datetime NOT NULL COMMENT '生产日期', 196 PRIMARY KEY (`id`) 197 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 198 199 /*Table structure for table `orderdetail` */ 200 201 CREATE TABLE `orderdetail` ( 202 `id` int(11) NOT NULL AUTO_INCREMENT, 203 `orders_id` int(11) NOT NULL COMMENT '订单id', 204 `items_id` int(11) NOT NULL COMMENT '商品id', 205 `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量', 206 PRIMARY KEY (`id`), 207 KEY `FK_orderdetail_1` (`orders_id`), 208 KEY `FK_orderdetail_2` (`items_id`), 209 CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 210 CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 211 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 212 213 /*Table structure for table `orders` */ 214 215 CREATE TABLE `orders` ( 216 `id` int(11) NOT NULL AUTO_INCREMENT, 217 `user_id` int(11) NOT NULL COMMENT '下单用户id', 218 `number` varchar(32) NOT NULL COMMENT '订单号', 219 `createtime` datetime NOT NULL COMMENT '创建订单时间', 220 `note` varchar(100) DEFAULT NULL COMMENT '备注', 221 PRIMARY KEY (`id`), 222 KEY `FK_orders_1` (`user_id`), 223 CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 224 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; 225 226 /*Table structure for table `user` */ 227 228 CREATE TABLE `user` ( 229 `id` int(11) NOT NULL AUTO_INCREMENT, 230 `username` varchar(32) NOT NULL COMMENT '用户名称', 231 `birthday` date DEFAULT NULL COMMENT '生日', 232 `sex` char(1) DEFAULT NULL COMMENT '性别', 233 `address` varchar(256) DEFAULT NULL COMMENT '地址', 234 PRIMARY KEY (`id`) 235 ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; 236 237 /*Data for the table `items` */ 238 239 insert into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!',NULL,'2015-02-03 13:22:53'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!',NULL,'2015-02-06 13:23:02'); 240 drop table items; 241 /*Data for the table `orderdetail` */ 242 243 insert into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3); 244 245 /*Data for the table `orders` */ 246 247 insert into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2015-02-04 13:22:35',NULL),(4,1,'1000011','2015-02-03 13:22:41',NULL),(5,10,'1000012','2015-02-12 16:13:23',NULL); 248 249 /*Data for the table `user` */ 250 251 insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'张三','2014-07-10','1','北京市'),(16,'张小明',NULL,'1','河南郑州'),(22,'陈小明',NULL,'1','河南郑州'),(24,'张三丰',NULL,'1','河南郑州'),(25,'陈小明',NULL,'1','河南郑州'),(26,'王五',NULL,NULL,NULL);