数据
数据(Data)的定义:
- 对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成一个记录来描述。。
数据的种类
- 文字、图形、图象、声音
数据的特点
- 数据与其语义是不可分的
数据库
数据库的定义
- 按照数据结构来组织、存储和管理数据的仓库”
J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务
数据库的优点
- 数据按一定的数据模型组织、描述和储存
- 可为各种用户共享
- 冗余度较小,节省存储空间
- 易扩展,编写有关数据库应用程序
数据库管理系统(底层以excel表格化存储) System)
- 是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。
关系型数据库管理系统称为RDBMS,R指Relation
数据定义功能
- 提供数据定义语言(DDL)
- 定义数据库中的数据对象
数据操纵功能
- 提供数据操纵语言(DML)
- 操纵数据实现对数据库的基本操作
(查询、插入、删除和修改)
DBMS的作用
- 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
时下流行的DBMS
- Oracle
- 应用广泛、功能强大,分布式数据库系统
- “关系-对象”型数据库
- MySQL
- 快捷、可靠
- 开源、免费、与PHP组成经典的LAMP组合
- SQL Server
- 针对不同用户群体的五个特殊的版本
- 易用性好
- DB2
- 应用于大型应用系统,具有较好的可伸缩性
什么是MySQL
- MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型 网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
mysql特征
- 性能快捷、优化SQL语言
- 容易使用
- 多线程和可靠性
- 多用户支持
- 可移植性和开放源代码
- 遵循国际标准和国际化支持
- 为多种编程语言提供API
mysql的不足
- 不能直接处理XML数据
- 一些功能上支持的不够完善和成熟
- 不能提供任何OLAP(实时分析系统)功能
mysql命令
mysql -u root -p8023
mysql -h host_name -u user_name –ppassword
- h:当连接MySQL服务器不在同台主机时,填写主机名或IP地址
- u:登录MySQL的用户名
- p:登录MySQL的密码
- 注意:密码如果写在命令行的时候一定不能有空格。如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBC
mysql程序常用命令
- 显示所有数据库:show databases;
- 选定默认数据库:use dbname;
- 显示默认数据库中所有表:show tables;
- 退出mysql程序:\q
总结
- MySQL是一种功能非常强大的关系型客户服务器数据库系统,它的安全性和稳定性足以满足许多应用程序的要求,而且有着非常高的性价比。
数据库常用知识
- 数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库
- 档案柜=数据库
- 抽屉=表
- 文件=记录
完整性分类
- 数据实体完整性
- 字段完整性
- 引用完整性
- 自定义完整性
SQL概述
什么是SQL
- SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
SQL语法组成
- DML( Data Manipulation Language数据操作语言)
- ——查询、插入、删除和修改数据库中的数据;
- ——SELECT、INSERT、 UPDATE 、DELETE等;
- DCL( Data Control Language数据控制语言)
- ——用来控制存取许可、存取权限等;
- ——GRANT、REVOKE 等;
- DDL( Data Definition Language数据定义语言)
- ——用来建立数据库、数据库对象和定义其列
- ——CREATE TABLE 、DROP TABLE、ALTER TABLE 等
- 功能函数
- ——日期函数、数学函数、字符函数、系统函数等
mysql中使用SQL语言几点说明
- 属于一个SQL语句,使用分号(;)结尾,否则mysql认为语句没有输入完。
- 箭头(->)代表SQL语句没有输入完
- 取消SQL语句使用(\c)
- SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分)
- 使用函数时,函数名和后面的括号之间不能有空格
字符串
- 由单引号或者双引号括起来的字符或者数字。如:”abc”,‘abc10’
- 字符串中要用转义字符才能表示的特殊符号
数值列类型
- Mysql为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。
所有数值列类型的类型名及其说明和所占的字节数见下表:
数值列类型包括整型和浮点型
- 说明:TINYINT, SAMLLINT, MEDIUMINT, INT, BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。
CHAR和VARCHAR类型
- CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于MySQL处理存储的方式:
- CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。
- VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短 )。
- 例如:INT(4) 意思是指定了一个具有4个字符显示宽度的INT列。如果定义了一个没有明确宽度的整数列,则会分配缺省的宽度,缺省值为每种类型的最长值的长度。
- 对于每种浮点型,可指定一个最大的显示尺寸M和小数位数D,M的取值应该是0-30,但小于M-2。M和D对于DECIMAL是必须的。
时间和日期类型
- 是存储如“2005 -1-1” 或者“12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序。
- NULL值是一种无类型的值,表示“空,什么也没有”。
所有时间和日期列类型的类型名及其说明和所占的字节数见下表:
说明
- 每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加
- 表示日期时必须先按:年,月,日的顺序给出
- DATE ,TIME ,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”,“hh:mm: ss”和“YYYY-MM-DD hh:mm: ss”,对于DATETIME类型,日期和时间部分都需要
- TIMESTAMP时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录
表
创建表
mysql -u root -p8023//进入mysql
create database test 01;//创建一个库
use test01;//进入库
show tables;//查看库里有几张表
create table data11(showtime time);//创建一个表,表的第一行为showtime,这一列的类型为time
insert into data11 values('11:11:11'),('11:11'),(111111);//插入数据,为3行.
select * from data11;//查看表格
create table data12(f_data date,f_time time);//创建表
insert into data12(f_data,f_time)values('1978-4-6',123412),(650503,'3:4:1');
select * from data12;
create table data14(f_datatime datetime,f_timestamp timestamp);
insert into data14 values('1999-11-11 11:11:11','2002-11-11 11:11:11');
select * from data14;
- 删除表
drop table data11;
drop table if exists data11;
删除表操作
- 语法:
drop table [if exists] tab_name [,tab_name]...
- 叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。
删除数据库操作
- 语法:
drop database [if exists] db_name
- 叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if exists 子句,则删除不存在的数据库不会出错。
数值列的完整性约束
unsigned用法
AUTO_INCREMENT
- 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。
举例:
create table t(id int auto_increment not null primary key);
UNSIGNED
- 无符号,此属性禁用负值,将数值的取值范围从零开始。
举例:
create table t(num tinyint , num2 tinyint unsigned);
create table t1(num1 int unsigned,num2 int);
insert into t1 values(-1,-2);
select * from t1;
create table t2(num1 int not null,num2 int);
insert into t2(num2)values(10);
select * from t2;
create table t3(num1 int default 100,num2 int);
insert into t3(num2)values(2);
select * from t3;
create table t4(num2 int zerofill);
insert into t4 values(2);
select ....
- 唯一性
create table t5(num1 int unique,num2 int);
insert into t5 values(1,2);
insert into t5 values(1,2);//会报错
select * from t5;
- 自增
create table t6(num1 int auto_increment unique,num2 int);
insert into t6(num2)values(10);
select * from t6;
insert into t6(num2)values(10);
select * from t6;
主键与外键
create table student(
sid int not null auto_increment,
name varchar(20) not null,
primary key(sid)
);
create table score(
cid int not null auto_increment primary key,
score int,
sid int,
foreign key(sid) references student(sid)
);
//(1)insert into score(score,sid)values(100,1);//主键没有插入信息,则外键插入不成功.
insert into student(name)values('jxb');
select *from student;
insert into score(score,sid)values(100,1);
delete from student;
drop table student;
(1)insert into score(score,sid)values(100,1);
(2)insert into student(name)values('jxb');
(3)insert into score(score,sid)values(100,1)
(4)delete from student;
(5)drop table student;
- 兼容中文
create table t9(name char(20),id int);
insert into t9 values('蒋秀碧',2);
select * from t9;
create table t10(name char(20),id int)default charset=utf8;
insert into t10 values('蒋秀碧',2);
select * from t9;
更改表结构
desc t10;
alter table t10 add adress int after name;
desc t10;
select * from t10;
- 修改adress的默认值
alter table t10 alter adress set default 100;
select * from t10;
desc t10;
- select * from t10;
- desc t10;
- 修改id
alter table t10 change id number char(20);
desc t10;
- 修改name
alter table t10 change name name int;
desc t10;
- 再将姓名的类型该回char(20)
alter table t10 modify name char(20);
desc t10;
- desc t10;
- 删除adress列
alter table t10 drop adress;
desc t10;
- desc t10;
- 将表名从t10重写命名为tt10
alter table t10 rename as tt10;
//desc t10;//报错
desc tt10;
- desc tt10;
MySQL运算符
- 算数运算符
- 比较运算符
- 逻辑运算符
- 位运算符
比较运算符
- select 'x'<>'X';//不区分大小写
- select binary 'x'<>'X';//区分大小写
- select 10 between 10 and 100;
- select 'x' between 'a' and 'z';
- select 7 in(1,2,3,4,5,6,7);
- select 7 in(1,2,3);
- select 2 = NULL,2 <=> NULL;
- select NULL = NULL,NULL <=> NULL;
- select 0 = NULL,0 <=>NULL;
MySQL数据库中的通配符
- “%” (百分号) 代表任意长度(长度可以为0)的字符串
举例:- a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
- “_ ”(下横线) 代表任意单个字符
举例:
a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
默认情况下
- 默认情况下,比较是不区分大小写的方式执行的。然而,以前我们注意到,可以添加BINARY关键字让MySQL执行区分大小写的比较。
select 'mysql' like '%SQL';