1、基本概念mysql
一、数据sql
(1)数据的定义:对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。数据库
(2)数据的种类:文字、图形、图像、声音编程
(3)数据的特色:数据与其语义是不可分的浏览器
二、数据库安全
数据库(DataBase简称DB)是按照数据结构来组织、存储和管理数据的仓库。服务器
三、数据库管理系统(好比:MySql)数据结构
(1)数据库管理系统(Database Management System 简称DBMS)是一种操纵和管理数据库的大型软件,是用于创建、使用和维护数据库。多线程
(2)关系型数据库管理系统称为RDBMS,R指Relation。并发
(3)DBMS的做用:它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
四、数据库系统
数据库系统(Database System,简称DBS),是由数据库及其管理软件组成的系统。
五、数据库管理员
数据库管理员(Database Administrator,简称DBA),负责全面管理和控制数据库系统。
六、DBA、DBMS、DB和DBS之间的关系
七、数据库的优势
(1)数据按必定的数据模型组织、描述和储存
(2)可为各类用户共享
(3)冗余度较小,节省存储空间
(4)易扩展,编写有关数据库应用程序
2、数据库管理系统(DBMS)
一、DBMS的主要功能
(1)数据定义功能:提供数据定义语言(DDL)
用于定义数据库的全部特性和属性,尤为是行布局、列定义、键列(有时是选键方法)、文件位置和存储策略,包括命令:
DROP(删除数据库)
删除数据库:drop database if exists 数据库名
CREATE(建立数据库)
建立表:create table if not exists 表名(列名 列名约束)
ALTER(修改数据库)
添加列名:alter table 表名 add 列名 约束条件
修改列名:alter table 表名 change 老列名 新列名 数据类型
修改列字段数据类型:alter table 表名 modity 列名 数据类型
删除列名:alter table 表名 drop 列名
修改表名:alter table 表名 rename 新表名
GRANT(赋予权限)
REVOKE(从当前用户或组中取消权限)、TRUNCATE(只删除表中的全部数据,不删除表的结构)
注意:truncate table命令将快速删除数据表中的全部记录,但保留数据表结构。这种快速删除与delete from数据表的输出所有数据表记录不同,delete命令删除的数据将存储在系统回滚段中,须要的时候,数据能够回滚恢复,而truncate命令删除的数据是不可恢复的。
(2)数据操纵功能:提供数据操纵语言(DML)
操纵数据实现对数据库的基本操做:
SELECT(查询)
select from 表名 where 条件(条件1 and 条件2)
INSERT(插入)
insert into 表名(列1,列2) values(' ',' '),(' ',' '),(' ',' ')
DELETE(删除)
delete from 表名 where 条件
UPDATE(修改)
update 表名 set 列名=' ',列名=' ' where 条件
(3)数据库的运行管理
a、保证数据的安全性、完整性
b、多用户对数据的并发使用
c、发生故障后的系统恢复
(4)数据库的创建和维护功能(实用程序)
a、数据库数据批量装载
b、数据库转储
c、介质故障的修复
d、数据库的重组织
e、性能监视
二、DBMS的分类(大公司首选oracle-----数据库中的贵族)
小型数据库:Access、foxbase、sqlite
中型数据库:mysql、sql server、infomix
大型数据库:Sybase、Oracle、db2
注意:Mysql、SQL server、Oracle、DB2三者的特色
Oracle:
(1)最稳定、功能最强大、性能最好、容量无限、最昂贵、重量级,分布式数据库 系统,适用于大型的项目
(2)"关系----对象"型数据库
MySQL:
(1)轻量级、易安装、易管理、速度比较快,使用起来方便,适用于中小型企业
(2)开源、免费、与PHP组成经典的LAMP组合
SQL Server:
(1)针对不一样用户群体的五个特殊的版本
(2)易用性好
DB2:
(1)应用于大型应用系统,具备较好的可伸缩性
三、B/S和C/S
B/S浏览器服务器Browser Server
客户不须要安装程序,只须要有浏览器引擎便可:淘宝
C/S客户端服务器Client Server
客户须要安装程序,好比:QQ
3、MySQL的概念、特性以及不足
一、概念
(1)什么是MySQL
MySQL本来是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被Sun公司收购。2009年,甲骨文公司Oracle收购Sun公司,MySQL成为Oracle旗下产品。
MySQL在过去因为性能高、成本低、可靠性好,已经成为最流行的开源数据库,所以被普遍地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多规模网站和应用,好比Google和Facebook等网站。
(2)什么是SQL
SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而创建的操做命令集,是一种功能齐全的数据库语言。在使用它时,只须要发出“作什么”的命令,“怎么作”是不用使用者考虑的。
二、MySQL的特征:
(1)性能快捷、优化SQL语言
(2)容易使用
(3)多线程和可靠性
(4)多用户支持
(5)可移植性和开发源代码
(6)遵循国际标准和国际化支持
(7)为多种编程语言提供API
三、MySQL5新特性
(1)子查询
(2)视图
(3)存储过程
(4)触发器
(5)事务处理
(6)热备份
(7)二进制Bit类型
等等......
四、MySQL的不足
(1)不能直接处理XML数据
(2)一些功能上支持得不够完善和成熟
(3)不能提供任何OLAP(实时分析系统)功能
4、MySQL的使用
一、用命令行来执行数据库(DDL数据库定义语言)
(1)输入登陆密码(链接的密码)
(2)显示MySQL中全部的数据库
show databases;
(3)退出MySQL
使用quit、exit、\q退出MySQL
(4)建立数据库(create database 数据库名)
create datebase school
建立数据库时,判断是否具备同名数据库再建立
create datebase if not exists school
建立数据库后,为数据库设置字符编码
alter database school character set utf8
(5)删除数据库(drop database 数据库名)
drop database school
(6)使用某个数据库(user 数据库名)
注意:进入到该数据库,例如你新建表的时候要先写这句话,这样保证了个人表建立在该数据库下,反之会默认放置在默认的数据库中
use school
(7)建立表(create table 表名 (列名1 数据类型,.......))
create table if not exists user(id int not null primary key,username varchar(40),password varchar(50),power int not null)
建立表时,是id自动递增用auto_increment
create table if not exists user(id int not null auto_increment primary key,username varchar(40),password varchar(50),power int not null)
注意:关于数据类型:char和varchar
char(20):分配20个空间,当只使用5个空间时,没用的空间会被空格填补
varchar(20):分配20个空间,当只使用5个空间时,那么空间会占用6个,其中一个保存数据长度。
所以,建议使用varchar
(8)显示选择的数据库中全部的表
show tables
(9)查看表里面的详细信息(desc 表名)
desc user
(10)删除表(drop table 表名)
drop table user
(11)删除一个表的主键(alter table 表名 drop primary key)
alter table user drop primary key
(12)往表中添加一列(alter table 表名 add 要添加的列名 数据类型)
alter table user add address varchar(50)
(13)往id列后面添加一列
alter table user add phone varchar(50) after id
(14)增长一列,使其位于第一列
alter table user add id1 int not null first
(15)删除某一列(alter table 表名 drop 列名)
alter table user drop id1
(16)修改表字段
a、使用change能够修改字段名称和该字段的数据类型(alter table 表名 change 字段名 新字段名 新数据类型)
alter table user change id userid varchar(30)
b、使用Modify只能修改数据类型(alter table 表名 modify 字段名 新数据类型)
alter table user modify password varchar(30)
二、Navicat进行增删改查(DML数据操纵语言)
Navicat代码注释的三种:
--注释的代码(注意空格)
#注释的代码
/*注释的代码*/
(1)建立一张表
CREATE TABLE student( stuId VARCHAR(20) NOT NULL PRIMARY KEY, stuName VARCHAR(40) NOT NULL, stuMsg VARCHAR(80) NOT NULL )
(2)往表中添加记录
insert into 表名(字段1,字段2,......) values(值1,值2,......)
INSERT INTO student(stuId,stuName,stuSex,stuPassword) VALUES('1','杨惠霞','女','123456'), ('2','朱元梅','女','985082'), ('3','杨修志','男','435291'), ('4','祝横岗','男','648310')
(3)查找表中名字为祝横岗,密码为648310的记录,并列条件使用and
SELECT * FROM student WHERE stuName='祝横岗' AND stuPassword='648310'
(4)修改表中的记录(update 表名 set 列名=‘xxx’ where ......)
将id为4的字段stuName的值改为“关雎宫”
UPDATE student SET stuName='关雎宫' WHERE stuId='4'
(5)删除表中的记录(delete from 表名 where ......)
删除编号为3的数据
DELETE FROM student WHERE stuId='3'
5、MySQL数据类型
一、数据类型种类
(1)数值型
a、整型
能够由十进制和十六进制表示,整数由数字序列组成,如:100,0xA
b、浮点型
浮点数由一个数字加一个小数点再加上一个数字组成,如:10.5
(2)字符串
由单引号或者双引号括起来的字符或者数字,如:'abc10',"abc"
字符串中要用转义字符才能表示的特殊符号
串转义序列 | |||
序列 | 说明 | 序列 | 说明 |
\0 | NUL(ASCII 0) | \n | 新行 |
\' | 单引号 | \r | 回车 |
\"" | 双引号 | \t | 制表符 |
\b | 退格 | \\ | 反斜杠 |
(3)日期和时间值
存储如"2005-1-1"或"12:00:00"这样数值的值,MySQL中日期是按"年-月-日"的顺序
(4)NULL值
是一种无类型的值,表示“空,什么也没有”
二、数值列类型
(1)全部数值列类型的类型名以及其说明和所占的字节数见下表:
类型名 | 说明 | 类型名 | 说明 |
TINYINT | 很是小的整数 | BIGINT | 大整数 |
SMALLINT | 较小整数 | FLOAT | 单精度浮点数 |
MEDIUMINT | 中等大小的整数 | DOUBLE | 双精度浮点数 |
INT | 标准整数 | DECIMAL | 一个串的浮点数(多用于银行的数值) |
类型说明 | 存储需求 |
TINYINT[(M)] | 1字节 |
SMALLINT[(M)] | 2字节 |
MEDIUMINT[(M)] | 3字节 |
INT[(M)] | 4字节 |
BIGINT[(M)] | 8字节 |
FLOAT[(M,D)],FLOAT(4) | 4字节 |
DOUBLE[(M,D)],FLOAT(8) | 8字节 |
DECIMAL(M,D) | M字节 |
M是从1到255的值,它表示列中值的字符数
类型说明 | 取值范围(MySQL<3.23) | 取值范围(MySQL>=3.23) |
DECIMAL(4,1) | -9.9到99.9 | -999.9到9999.9 |
DECIMAL(5,1) | -99.9到999.9 | -9999.9到99999.9 |
DECIMAL(6,1) | -999.9到99999.9 | -99999.9到999999.9 |
DECIMAL(6,2) | -99.99到999.99 | -9999.99到99999.99 |
DECIMAL(6,3) | -9.999到99.999 | -999.999到9999.999 |
对于每种浮点型,可指定一个最大的显示尺寸M和小数位D,M和D对于DECIMAL是必须的
(2)数值列的完整性约束
a、auto_increment
自动标识列,一个表中最多能有一个此属性的列。对于想使用此属性的列应该定义为not null,并定义为primary key或定义为unique键。
create table student(id int auto_increment not null primary key)
b、unsigned
无符号,此属性禁用负值,将数值的范围从0开始。
create table student(num tinyint,num2 tinyint unsigned)
c、null和not null
默认为null,即插入值时没有在此字段插入值时自动填null,若是指定了not null,则必须在插入值时在此字段添入值,不容许插入null值。
d、default
能够经过此属性来指定一个缺省值,即若是没有在此列添加值,那么默认添加default后指定值。
e、zerofill
前导零填充数值类型值以达到列的显示宽度。
三、字符串列类型
全部字符串列类型及其说明和所占字节数见下表:
类型名 | 说明 |
CHAR | 定长字符串 |
VARCHAR | 可变长字符串 |
TINYBLOB | 很是小的BLOB(二进制大对象) |
BLOB | 小BLOB |
MEDIUMBLOB | 中等的BLOB |
LONGBLOB | 大BLOB |
TINYTEXT | 很是小的文本串 |
TEXT | 小文本串 |
MEDIUMTEXT | 中等文本串 |
LONGTEXT | 大文本串 |
ENUM | 枚举:列可赋予某个枚举成员 |
SET | 集合:列可赋予多个集合成员 |
(1)CHAR和VARCHAR类型
CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于Mysql处理存储的方式:
CHAR把这个大小视为值的准确大小(若是值的长度不够长,则用空格填补比较短的值)。
VARCHAR类型把它视为最大值而且只使用了存储字符串实际上须要的字节数(增长一个额外的字节记录长度)。于是较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。
(2)BLOB和TEXT类型
BLOB是二进制大对象,若是想存储二进制数,BLOB将是最佳选择,而TEXT与之相同,只是BLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。
(3)ENUM和SET类型
它们是特殊的串类型,其列值必须从固定的串集中选择,两者差异为前者必须是只能选择其中的一个值,然后者能够多选。(不推荐使用)
枚举的例子:
alter table test2 add sex enum('男','女'); insert into test2 values(2,70,'男');
四、日期和时间列类型
全部时间和日期列类型的类型名及其说明和所占的字节数见下表:
类型名 | 说明 |
DATE | ‘YYYY-MM-DD’格式表示的日期值 |
TIME | 'hh:mm:ss'格式表示的时间值 |
DATETIME | 'YYYY-MM-DD hh:mm:ss'格式 |
TIMESTAMP | 'YYYYMMDDhhmmss'格式表示的时间戳值 |
YEAR | 'YYYY'格式的年份值 |
注意:(1)每一个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加
(2)表示日期时必须先按:年,月,日的顺序给出
(3)DATE,TIME,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为"YYYY-MM-DD","hh:mm:ss"和"YYYY-MM-DD hh:mm:ss",对于DATETIME类型,日期和时间部分都须要。
(4)TIMESTAMP
时间戳列类型以YYYYMMDDhhmmss的格式来表示值,主要用于记录更改或建立某个记录。
五、常见数据类型
分类 | 备注和说明 | 数据类型 | 说明 |
二进制数据类型 | 存储非字符和文本的数据 | BLOB | 可用来存储图像 |
文本数据类型 | 字符数据包括任意字母、符号或者数字字符的组合 | char | 固定长度的非Unicode字符数据 |
varchar | 可变长度非Unicode数据 | ||
text | 存储长文本信息 | ||
日期和时间 | 日期和时间在单引号内输入 | time | 时间 |
date | 日期 | ||
datetime | 日期和时间 | ||
货币数据类型 | 用于财务数据 | decimal | 定点数 |
Bit数据类型 | 表示是/否的数据 | bit | 存储布尔数据类型 |
数值型数据 | 该数据仅包含数字,包括整数、负数以及浮点数 | int smallint |
整数 |
float double |
浮点数 |
六、常见的完整性约束
类型 | 说明 |
PRIMARY KEY | 主码约束主键) |
UNIQUE | 惟一性约束 |
NOT NULL | 非空值约束 |
AUTO_INCREMENT | 用于整数列默认自增1 |
UNSIGNED | 无符号整数 |
DEAULT default_value | 默认值约束 |
DEAULT cur_timestamp | 建立新记录时默认保存当前时间(仅适用timestamp数据列) |
ON UPDATE cur_timestamp | 修改记录时默认保存当前时间(仅适用timestamp数据列) |
CHARACTER SET name | 指定字符集(仅使用字符串) |
七、数据表的类型(在表上右键,点击对象信息,能够看到表的类型)
在建立一个新的MySQL数据表时,能够为它设置一个类型,其中最重要的3中类型是:
(1)MyISAM:成熟、稳定和易于管理
(2)InnoDB:加入事物、数据行级锁定机制、外键约束条件、崩溃恢复等新功能(经常使用)
(3)HEAP:只存在于内存中,可作临时表
create table tmp(...)ENGINE=MyISAM
八、主键和外键
(1)索引:优化查询速度
(2)数据表之间的关联/引用关系是依赖具体的主键(primary key)和外键(foreign key)创建起来的。
(3)主键:帮助MySQL以最快的速度把一条特色的数据记录的位置肯定下来
注意:主键必须是惟一的
主键应该是紧凑的,所以整数类型比较适合
(4)外键:引用另一个数据表的某条记录
注意:外键列类型尽量与主键列类型保持一致
外键列应该加上NOT NULL
例子:
主键:
CREATE TABLE student( sid INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(20) NOT NULL )
外键:(自动检查外键是否匹配,仅适用InnoDB)
CREATE TABLE score( cid INT NOT NULL auto_increment PRIMARY KEY, score INT, sid INT, FOREIGN KEY(sid)REFERENCES student(sid) );
建立完表以后再建立外键的方法:
格式:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键) REFERENCES 另外一个表名(参考主键);
ALTER TABLE score ADD CONSTRAINT sid FOREIGN KEY(sid) REFERENCES student(sid);
删除外键:
格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键名字(注意:这里是外键的名字,而不是外键列名)
ALTER TABLE score DROP FOREIGN KEY sid
九、主表和从表
(1)当主表中没有对应的记录时,不能将记录添加到字表