首先介绍几个数据库吧
Access //微软
是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它同时访问客户端不能多于4个。Access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器假死,或者消耗掉服务器的内存导致服务器崩溃。多用于VB ASP
SQL Server //微软
是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Microsoft Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL 语言,两者基本上都可以通用的。Microsoft SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制,重量级的(迁移性很差)不跨平台
MySql
是个开源的数据库,可运行在多种平台,如windows,unix/linux; 他的体积很小,是专为WEB 数据库设计的,特点是响应速度特别快,主要面向中小企业,对于海量数据库很强大,可以作为大型数据库系统使用,最主要是其标准版是免费的。
Oracle
各方面都比较成熟,但对硬件要求高,用于数据完整性、安全性要求较高的场合,能在所有主流平台上运行,完全支持所有的工业标准,采用完全开放策略。可以使客户选择最适合的解决方案,对开发商全力支持。平行服务器通过使一组结点共享同一簇中的工作来扩展服务器的能力,提供高可用性和高伸缩性的簇的解决方案,获得最高认证级别的iso标准认证,多层次网络计算,支持多种工业标准,可以用odbc,jdbc,oci等网络客户连接,较复杂,同时提供gui和命令行,在windows和unix下操作相同,如果windows不能满足需要,用户可以把数据库移到unix中。其操作和设置比较复杂,适用于有一定操作经验的用户
DB2 //IBM
说简单点:DB2就是IBM开发的一种大型关系型数据库平台。它支持多用户或应用程序在同一条SQL 语句中查询不同database中的数据。
MangoDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MangoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
今天主要介绍MySQL
MySQL数据类型:
-----数值型
SMALLINT: 2个字节
INT: 4个字节
INTEGER:INT的同义词
BIGINT : 8个字节
FLOAT : 4个字节
DOUBLE : 8个字节
-----字符串类型
CHAR:固定长度字符串 sex char(1) //1个字符
VARCHAR:可变长度字符串 name varchar(20) //20指的是字符虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超过VARCHAR处理速度的50%
-----日期/时间类型
DATE: YYYY-MM-DD
DATETIME:YYYY-MM-DD HH:MM:SS
TIMESTAMP:YYYY-MM-DD HH:MM:SS
TIME:HH:MM:SS
YEAR:YYYY
TIMESTAMP:时间戳 当update修改时,会自动更新
-----其他
BLOB和TEXT
用于存储大的数据
1. BLOB 类型区分大小写
TEXT 不区分大小写
2. BLOB被视为二进制字符串(例如 图片等);
Text被视为非二进制字符串
3. BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件。
4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于4个BLOB类型,并且有同样的最大长度和存储需求。
4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
数据库比较简单,直接上例子了:
--创建表 create table student( id int(2) primary key auto_increment,//主键默认不为空not null auto_increment 自增 stuName varchar(20) not null, //可以加约束条件 school varchar(30) comment '这是学校字段', score float(5,2), //最长是5位,但是小数点后必须2位 birthday date, sex char(1) default '男', )comment='这是一个学生表'
主键也可以单独设置 primary key(id),主键也可以是复合主键 primary key(id,stuName)对于自增主键,字段类型一定是数值类型,并且一定是从曾经用过的最大的基础上加一,就算是数据删掉了,也会在最大上加一 ,但是这个值我们是可以手动修改的
介绍几个日常用的多的吧:
(一)给表增加一列:
alter table student add aa int(3)
(二)修改表中的列名:
alter table student change aa AAA int(3)
(三)修改某个列的约束条件:
alter table student modify sex char(1) not null;
(四)修改表明:
alter table student rename as t_student
(五)删除某一列:
alter table student drop AAA;
(六)修改字段注释,类型,大小:
alter table student modify school char(50) comment '修改之后的学校'
(七)修改字段的默认值:
alter table student alter sex set default ''
(八)多条插入:列名可以省略,但值要和数据库中的列名顺序匹配
insert into t_student(stuName) values ('a'),('b'),('c')
(九)备份:
INSERT into student_backup(stuName,score) select stuName,score from t_student
介绍一下事务
事务:指的是要做的事情,在计算机术语中指的是一个执行单元事务具有几个特点:1.原子性,2.一致性,3.隔离性,4.持久性。
START TRANSACTION; insert into student_backup(stuName) values('111'); update t_student set score=100 where id=1; COMMIT;
注意:执行的时候一定要加分号。
常用快捷键:记不下来没关系,纯属装B用的
1.ctrl+q 打开查询窗口
2.ctrl+/ 注释sql语句
3.ctrl+shift +/ 解除注释
4.ctrl+r 运行查询窗口的sql语句
5.ctrl+shift+r 只运行选中的sql语句
6.F6 打开一个MySQL命令行窗口
7.ctrl+l 删除一行
8.ctrl+w 关闭一个查询窗口
关于关系和非关系数据库大概的优缺点
(一)非关系型数据库的优势:
1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系, 而且不需要经过SQL层的解析,所以性能非常高。
2. 可扩展性高,因为数据基于键值对,数据之间没有耦合性。
(二) 关系型数据库的优势:
1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2. 事务支持的比非关系型更好,可以实现对安全性能很高的数据的访问。
来个例子:执行提供的sql文件 employees.sql
#--1.查询员工表所有数据
select * from employees
#--2.打印公司里所有的manager_id
select manager_id from employees
#--3.查询80号部门的所有员工
select * from employees where department_id=80
#--4.查询50号部门每人增长1000元工资之后的人员姓名及工资(2个问题)
update employees set salary=salary+1000 where DEPARTMENT_ID=50;select SALARY,FIRST_NAME from employees where DEPARTMENT_ID=50;
#--5.查询80号部门工资大于7000的员工的全名与工资
select first_name,last_name,salary from employees where salary>7000 and department_id=80
#--6.查询80号部门工资大于8000并且提成高于0.3的员工姓名,工资以及提成
(拿到的工资-底薪)/拿到的工资
#--7.查询职位(job_id)为'AD_PRES'的员工的工资
select salary from employees where job_id like 'AD_PRES'
#--8.查询佣金(commission_pct)为0或为null的员工信息
select * from employees where commission_pct=0.1 or commission_pct is NULL
#--9.查询入职日期在1997-5-1到1997-12-31之间的所有员工信息
select * from employees where hire_date BETWEEN '1997-5-1' and '1997-12-31'
#--10.修改EMAIL为IMIKKILI 的工资增加为1000元
update employees set salary=salary+1000 where EMAIL like 'IMIKKILI'
#--11.修改部门编号为80的并且工资大于5000的员工手机号为123456789
update employees set phone_number=123456789 where DEPARTMENT_ID=80 and SALARY>5000
#--12.添加一条自己名字的简称的信息到部门为50的部门下
insert into employees(employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id) values(2000,'Cao','anin','GGJIJ','13206529854','1998-2-10','yh-uu',5032,NULL,108,50)
#--13.删除1998到1999年并且工资小于4000的员工
delete from employees where (hire_date BETWEEN '1998-0-0' and '2000-0-0') and salary<4000
#--14.查询工作为SA_REP并且工资大于7000的员工,显示LAST_NAME为'名字',EMAIL为'邮箱',SALARY为'工资'
select last_name as '名字',email as '邮箱',salary as '工资' from employees where salary>7000