什么是MySQL?
MySQL是数据库管理系统,能够帮助你管理关系型数据库,并且是开源的,意味着这是免费的,如果必要,你可以修改源代码。
尽管MySQL是开源软件,你需要买社区版才能得到专项服务。
MySQL 对比Oracle和 SQL server 有非常大的优势。.
- MySQL 可以在几乎所有平台上运营UNIX, Linux, Windows,小到你可以安装服务器在自己的pc中,而且,可靠,可拓展,运行速度飞快。
- 如果你开发web或者webapp,mysql 是明智的选择,因为他拥有LAMP堆栈, 包含Linux, Apache, MySQL, 和 PHP。
市面上有很多种数据库
-
MySQL
-
SQL Server
SQL Server是由微软开发的数据库管理系统,是Web上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业。
目前最新版本是SQL Server 2005,它只能在Windows上运行,操作系统的系统稳定性对数据库十分重要。并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。
SQL Server 提供了众多的Web和电子商务功能,如对XML和Internet标准的丰富支持,通过Web对数据进行轻松安全的访问,具有强大的、灵活的、基于Web的和安全的应用程序管理等。而且,由于其易操作性及其友好的操作界面,深受广大用户的喜爱。 -
Oracle
提起数据库,第一个想到的公司,一般都会是Oracle(甲骨文)。该公司成立于1977年,最初是一家专门开发数据库的公司。Oracle在数据库领域一直处于领先地位。 1984年,首先将关系数据库转到了桌面计算机上。然后,Oracle5率先推出了分布式数据库、客户/服务器结构等崭新的概念。Oracle 6首创行锁定模式以及对称多处理计算机的支持……最新的Oracle 8主要增加了对象技术,成为关系—对象数据库系统。目前,Oracle产品覆盖了大、中、小型机等几十种机型,Oracle数据库成为世界上使用最广泛的关系数据系统之一。
Oracle数据库产品具有以下优良特性:
兼容性 可移植性 可联结性 高生产率 开放性 -
Sybase
*1984年,Mark B. Hiffman和Robert Epstern创建了Sybase公司,并在1987年推出了Sybase数据库产品。Sybase主要有三种版本:一是UNIX操作系统下运行的版本; 二是Novell Netware环境下运行的版本;三是Windows NT环境下运行的版本。对UNIX操作系统,目前应用最广泛的是SYBASE 10及SYABSE 11 for SCO UNIX。
Sybase数据库的特点:
(1)它是基于客户/服务器体系结构的数据库。
(2)它是真正开放的数据库。
(3)它是一种高性能的数据库。
如何创建数据库?
create database 数据库名 ;
查看我们创建的数据库是否存在
show databases;这个语句是查看所有的数据库
如何删除一个数据库?
drop database 数据库名;
可以看见数据库已经被删掉了
MySQL里表的创建、字段的创建
创建表
建好了数据库,我们选择一个数据库,来对它进行表的相关操作。表是数据在数据库中一种逻辑上的存储形式,和常见的电子表格类似,其中每一行代表一个记录(可以理解成一个数据对象),而记录的每一列代表一个字段(其实你可以理解成数据对象的属性)。
表的基本操作有创建,查看,删除,修改4种基本操作。
建表:
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
…
)
create table student(
sno varchar(10),
sname varchar(10)
);
这是一个学生表,这个表里一共就有两个字段,一个是学号,一个是学生的姓名
查看表:
show tables;
这个语句会将你所在数据库中的所有表显示出来
这里就显示出了我们的学生表
为了进一步详细的显示我们这个表中的信息,可以用到以下语句:
desc 表名
这个会将表中的字段,以及字段的类型等等都显示出来
删除表
drop table table_name
语句用来删除表,其中"table_name"是表名。
修改表:
ALTER TABLE old_table_name RENAME new_table_name
语句用来修改表名,其中"old_table_name"是旧表名,"new_table_name"是新表名,当然,这里所要操作的对象一定得是存在的,不然会报错。
字段
增加字段
ALTER TABLE table_name ADD Att_name_1 Data_type_1;
在表"table_name"末尾,增加属性名为Att_name_1,数据类型为Data_type_1的字段
ALTER TABLE table_name ADD Att_name_1 Data_type_1 FIRST;
在表"table_name"开头,增加属性名为Att_name_1,数据类型为Data_type_1的字段
ALTER TABLE table_name ADD Att_name_1 Data_type_1 AFTER Att_name_2;
在属性名为Att_name_2的字段后,增加属性名为Att_name_1,数据类型为Data_type_1的字段
删除字段
ALTER TABLE table_name DROP Att_name;
将属性名为"Att_name"的字段删除
修改字段
ALTER TABLE table_name MODIFY Att_name New_data_type;
将属性名为"Att_name"的字段的数据类型新设置为"New_data_type"。
ALTER TABLE table_name CHANGE Old_att_name New_att_name Old_data_type;
将属性名为"Old_att_name",数据类型为"Old_data_type"的字段名修改为"New_att_name"
表的约束
表的约束是用来检验表中数据的完整性的,说的直白一些,就是检验表中的数据是否满足了规定的条件。以tab_student表举例来说,如果我不愿意令字段ID为空,就可以在建表时定义相关的约束。如果用户在插入数据时,违反了这样的约束条件,就会报错。当然可以定义的约束条件分很多种,下面会一一讲解。
- 设置非空约束
关键字NOT NULL用来约束某字段不能为空,语法形式如下:
CREATE TABLE table_name(
Att_name Data_type NOT NULL,
...
);
- 设置字段的默认值
关键字DEFAULT用来设置字段的默认值。如果在插入数据时,没有为某个字段赋值,则Mysql会自动为这个字段赋值为默认值。其语法形式如下:
CREATE TABLE table_name(
Att_name Data_type DEFAULT deVal,
...
);
- 设置唯一约束
关键字UNIQUE用来设置对某个字段的唯一约束,唯一约束表示,插入的数据在这个字段上的值得是唯一的,不能重复(你可以类比一般编程语言中“键值对”的“键”)。以学生的信息系统为例,每个人的学号信息应该是唯一的,那么在录入数据时,如果这一项出现了重复,那必然是出错了。所以我们最好设置唯一值约束,如果出现重复,则报错。其语法形式如下:
CREATE TABLE table_name(
Att_name Data_type UNIQUE,
...
);
上述代码将字段"Att_name"设置为了唯一约束。
现在以上面的tab_student为例,我对tab_student中的属性设置上面说的“非空”,“默认值”,“唯一”的约束:
CREATE TABLE tab_student(
ID VARCHAR(20) NULL UNIQUE, # 设置学生ID非空,且唯一
Score INT DEFAULT 0, # 设置Score默认值为0
Gender CHAR
);
- 设置主键约束
主键的作用在于用某个字段唯一地标识所有记录,以便在数据库中快速地查找数据。比如我们一般用索引号来唯一标识每一条数据记录。由于主键可以是单一字段,也可以是多个字段,所以,下面分两种情况讨论:
单字段主键:用关键字PRIMARY KEY设置主键。比如,还是tab_student的例子,现在将学号设置为主键。
CREATE TABLE tab_student(
ID VARCHAR(20) PRIMARY KEY, # 设置学生ID为主键
Score INT,
Gender CHAR
);
- 多字段主键:当主键由多个字段组合而成时,则需要关键字CONSTRAINT和PRIMARY KEY配合设置。其语法结构如下:
CREATE TABLE tab_student(
ID VARCHAR(20),
Name VARCHAR(20),
Score INT,
CONSTRAINT ID_Name PRIMARY KEY (ID, Name)
);
在上面代码展示的例子中,语句CONSTRAINT ID_Name PRIMARY KEY (ID, Name),将学生的ID和Name组合起来设置为主键。最后括号内表示的是主键涵盖的字段,而CONSTRAINT后面的ID_Name则是为这个约束起的名字(就设置主键约束来说,这个名字不要也没什么影响)。
- 设置字段值自动增加
往表中插入记录时,往往会遇到需要递增的字段。例如商品编号啊,等等。Mysql支持对这类字段设置字段值自动增加的约束。默认情况下,设置了自动增加的字段值为整数,从1开始,每次加1。又因为这种自动增加的字段肯定是唯一的,所以一般我们也把它设置为主键。
设置自动增加的关键字为AUTO_INCREMENT
CREATE TABLE tab_student(
ID INT PRIMARY KEY AUTO_INCREMENT, # 将ID设置为整数类型,并且设置字段值自动增加
Name VARCHAR(20),
Score INT
);
- 设置外键约束
上面的5种约束都是对于单表,而外键约束则是保证多个表之间的参照完整性。
设置外键约束的两个表之间具备父子关系,即子表中某个字段的取值依赖于父表。举例来说,现在有两个表:部门表和雇员表,部门表的主键为部门编号depNo,而雇员表中表示雇员所在部门编号的字段depno就成为了雇员表(子表)的外键。外键设置时有以下几点要求:
外键所代表的字段必须依赖于已经存在的父表的主键;
外键与相应的父表的主键可以不同名;
外键可以为空(null)
设置外键的语法用FOREIGN KEY (attribute) + REFERENCES father_table_name (attribute)的形式:
CREATE TABLE child_table_name(
Att_name_1, DataType_1,
Att_name_2, DataType_2,
CONSTRAINT FK_name FOREIGN KEY (Att_name_1) REFERENCES father_table_name (Att_name)
);
Select语句
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
语法:
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
select * from room_table;
select name from room_table
select distnict name from room_table;
distinct 去掉要查询的结果中重复的
select 字段 from 表名 where 条件;
where 根据条件查询
select distinct name from room_table where Price=750;
查询room表中,价钱为750的房间的名字
结果如下:
ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
select name from room_table order by Price;
选择房间名根据价格排名
分组查询
聚合函数
聚合函数 | 说明 |
---|---|
SUM() | 返回某列所有值的和 |
AUG() | 返回某列的平均值 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
COUNT() | 返回某列的行数 |
其中,COUNT(*)对查询结果中的所有行进行计数,COUNT(列名)、SUM()、AVG()、MAX()、MIN()函数都忽略列值为NULL的行。
group by 子句
通过分组可以使用聚合函数对结果集进行统计。
eg: 检索平均成绩高于70分的学生信息及平均成绩,结果按平均分降序排序。
select Student.Sno,Student.Sname,Student.Sex,Department.Dname,AVG(SC.Grade) as '平均成绩'
from Student inner join SC inner join Department
on Student.Sno = SC.Sno and Student.Dno = Department.Dno group by SC.Sno
having AVG(SC.Grade) >= 70 order by AVG(SC.Grade) desc;
having 子句
分组之后对这些组进行筛选,使用 having 子句。
where 子句作用的对象是基本表或视图,having 子句作用的对象是组。
函数
以下列举几种常见的函数
函数的语法
内建 SQL 函数的语法是:
SELECT function(列) FROM 表
函数的类型
在 SQL 中,基本的函数类型和种类有若干种。函数的基本类型是:
- Aggregate 函数
- Scalar 函数
SQL AVG 函数
定义和用法
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SQL AVG() 语法
SELECT AVG(column_name) FROM table_name
SQL COUNT() 函数
COUNT() 函数返回匹配指定条件的行数。
SQL COUNT() 语法
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT() 语法
COUNT() 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name