目录
一、基础知识
1、什么是数据库
数据库由一批数据构成有序的集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。
数据库的发展大致分为:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。其种类有3种:层次式数据库、网络式数据库和关系式数据库。
2、表
在关系型数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。行称为记录,是组织数据的单位;列称为字段,每一列表示记录的一个属性,都有相应的描述信息。
序号 | 用户名 | 密码 | 年龄 |
---|---|---|---|
1 | admin | 123456 | 20 |
2 | root | admin | 18 |
3、数据类型
数据类型决定了数据在计算机中存储格式,代表不同的信息类型。常用的数据类型有:整数型、浮点型、二进制型、日期时间型、字符串型等。
4、主键
主键(Primary Key)又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值。以上表为例,可以标识序号为主键,其他字段的记录可以有重复值故不能当作主键。
5、SQL语言
对数据库进行查询和修改操作的语言叫做SQL(结构化查询语言)。SQL有许多不同的类型,各大数据库厂商提供不同版本的SQL。SQL包含以下4个部分:
1、数据定义语言:DROP、CREATE、ALTER等
2、数据操作语言:INSERT、UPDATE、DELETE等
3、数据查询语言:SELECT语句
4、数据控制语言:GRANT、REVOKE、COMMIT、ROLLBACK语句等
6、数据库访问接口
不同的程序设计语言会有不同的数据库访问接口,程序语言通过这些接口,执行SQL语句,进行数据库管理。主要的数据库访问接口有:
1、ODBC:开放数据库互联技术为访问不同的SQL数据库提供了一个共同接口。所有的数据库操作由对应的DBMS的ODBC驱动程序完成。
2、JDBC:java数据库连接,它由一组用java语言编写的类和接口组成。
3、ADO.NET:是微软在.NET框架下设计的一组和数据源进行交互的面向对象类库。
4、PDO:是PHP访问数据库定义的一个轻量级的接口,提供了一个数据访问抽象层,是PHP5新加入的一个功能。
7、什么是Mysql
Mysql是一个小型关系型数据库管理系统,与其他大型数据库管理系统(Oracle、DB2、SQL Server等)相比,Mysql规模小、功能有限。但体积小、速度快、成本低,这些特性使得MySQL成为了目前流行的开放源代码数据库。
MySQL的命令机制由3个数字和1个后缀组成,如MySQL-5.7.10。
第一个数字(5)是主版本号,第二个数字(7)是发行级别,第三个数字(10)是在此发行系列的版本号。
8、MySQL语法规范
MySQL语法不区分大小写,但推荐操作语句全部大写,数据库、表明、字段等信息全部小写。如 CREATE DATABASE test1;
MySQL使用分号;作为语句结束。
9、MySQL注释
在MySQL中支持两种注释:
1、#这是注释内容
2、-- 这是注释内容
二、数据库操作
1、连接数据库
常用选项:mysql -u -p -h (-u 用户名 -p 密码 -h 数据库地址 -P 端口 -D数据库名)
2、退出数据库
使用 quit、exit、\q都可以退出当前连接
3、查看当前数据库状态
使用 \s 查看当前数据库的基本信息
4、查看所有数据库
使用SHOW DATABASES;查看当前数据库
5、创建数据库
使用CREATE DATABASE name;创建数据库
创建数据库,相当于在MySQL目录下的DATA目录中新建一个文件夹,一个文件夹代表一个数据库
6、查看数据库创建规范
使用 SHOW CREATE DATABASE name; 查看已创建的数据库语句。
可看到默认创建的数据库编码为UTF8
7、进入数据库
使用USE name;进入某数据库中,使用SHOW DATABASE(); 查看当前数据库
8、删除数据库
使用DROP DATABASE name;删除数据库
三、数据类型
1、整数型
类型名称 | 说明 | 存储需求 | 范围 |
---|---|---|---|
tinyint | 很小的整数 | 1个字节 | 0-255 |
smallint | 小的整数 | 2个字节 | 0-65535 |
mediumint | 中等大小的整数 | 3个字节 | 0-16777215 |
int | 普通大小的整数 | 4个字节 | 0-4294967295 |
bigint | 大整数 | 8个字节 | 0-xxxx |
2、浮点型
类型名称 | 说明 | 存储需求 |
---|---|---|
float | 单精度 | 4个字节 |
double | 双精度 | 8个字节 |
decimal(M,D) | 定点数 | M+2个字节 |
3、日期时间型
类型名称 | 日期格式 | 存储需求 |
---|---|---|
year | YYYY | 1个字节 |
time | HH:MM:SS | 3个字节 |
date | YYYY-MM-DD | 3个字节 |
datetime | YYYY-MM-DD HH:MM:SS | 8个字节 |
timestamp | YYYY-MM-DD HH:MM:SS | 4个字节 |
4、文本字符串类型
类型名称 | 说明 |
---|---|
char(m) | 固定长度非二进制字符串 |
varchar(m) | 变长非二进制字符串 |
tinytext | 非常小的非二进制字符串 |
text | 小的非二进制字符串 |
mediumtext | 中等大小的非二进制字符串 |
longtext | 大的二进制字符串 |
enum | 枚举类型 |
set | 一个设置 |
5、二进制字符串类型
类型名称 | 说明 |
---|---|
bit(m) | 位字段类型 |
binary(m) | 固定长度二进制字符串 |
varbinary(m) | 可变长二进制字符串 |
tinyblob(m) | 非常小的blob |
blob(m) | 小blob |
mediumblob(m) | 中等大小的blob |
longblob(m) | 非常大的blob |
四、创建表
1、创建表
创建表的语法格式:CREATE TABLE 表名
(
字段名1,数据类型 [列级别约束条件] [默认值],
字段名2,数据类型 [列级别约束条件] [默认值],
......
[表级别约束条件]
);
CREATE TABLE user(
username VARCHAR(20),
age TINYINT,
sex ENUM('男','女'),
Birthday YEAR
);
2、查看当前数据库下数据表
使用SHOW TABLES;查看当前数据库中所有数据表。
3、查看表的结构
使用DESC 表名;和SHOW COLUMNS FROM 表名;可以查看表的字段信息。
4、主键约束
主键约束要求主键列的数据唯一,且不允许为空。可以结合外键来定义不同数据表之间的关系,加快查询的速度。分为两种主键:单字段主键和多字段联合主键。
单字段主键
由一个字段组成,可以在定义列的同时指定主键:字段名 数据类型 PRIMARY KEY
在定义完所有列后之后定义主键:PRIMARY KEY 字段名
CREATE TABLE user1(
id INT PRIMARY KEY,
username varchar(20)
);
CREATE TABLE user2(
id INT,
username varchar(20),
PRIMARY KEY id
);
多字段联合主键
PRIMARY KEY(字段1,字段2,....字段n)
CREATE TABLE user(
id INT,
username varchar(20),
cid INT,
PRIMARY KEY(id,cid)
);
5、自增长约束
一个表中只能有一个字段使用此约束,且该字段必须为主键的一部分,默认的自增字段id的值从1开始,每次添加一条新纪录,该值自动加1。
语法格式如下:字段名 数据类型 AUTO_INCREMENT
CREATE TABLE user1(
id INT PRIMARY KEY AUTO_INCREMENT,
username varchar(20)
);
6、非空约束
非空约束指字段的值不能为空。语法格式如下:字段名 数据类型 NOT NULL
CREATE TABLE user1(
id INT PRIMARY KEY AUTO_INCREMENT,
username varchar(20) NOT NULL
);
7、默认值约束
默认值约束指定某列的默认值,语法格式为:字段名 数据类型 DEFAULT 默认值
CREATE TABLE user2(
id INT PRIMARY KEY AUTO_INCREMENT,
username varchar(20) NOT NULL,
age TINYINT DEFAULT 20
);
8、唯一性约束
唯一性约束要求该列唯一,允许为空,但只能出现一个空值。语法格式:字段名 数据类型 UNIQUE
CREATE TABLE user3(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
card VARCHAR(10) UNIQUE,
age TINYINT DEFAULT 20
);
9、外键约束
外键用来在两个表的数据之间建立连接,被参照的表是主表,外键所在的表为子表。父表中对记录做操作时,子表中与之对应的信息也应有相应的改变。外键的作用保持数据的一致性和完整性。父表和子表必须使用相同的存储引擎:InnoDB。
创建外键的语法格式:[constraint 外键名] foreign key 字段名1 references 主键列1
CREATE TABLE proid(
id INT PRIMARY KEY,
proname VARCHAR(200) NOT NULL,
FOREIGN KEY id REFERENCES users.proid //把外键ID与users表中的proid关联起来。
);
五、修改表
1、修改表名
语法格式:ARTER TABLE <旧表名> RENAME [to] <新表名>;
AlTER TABLE user RENAME users;
2、修改字段的数据类型
语法格式:ALTER TABLE <表名> MODIFY <字段名> <数据类型>
ALTER TABLE user1 MODIFY username VARCHAR(30);
3、修改字段名
语法格式:ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
如果旧字段名与新字段名相同,则只修改数据类型,和modify效果一样。
ALTER TABLE user1 CHANGE username UserName VARCHAR(20);
4、添加字段
语法格式:ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [ first | after 已存在字段名]
“first”为可选参数,作用是将添加的字段置为第一个字段;“after”为可选参数,作用是将新添加的字段添加到指定存在的字段后面。
ALTER TABLE user2 ADD addres VARCHAR(50) NOT NULL;
5、删除字段
语法格式:ALTER TABLE <表名> DROP <字段名>
ALTER TABLE user2 DROP addres;
6、删除表的外键约束
语法格式:ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
外键约束名指在定义表constraint关键字后面的参数
7、更改表的存储引擎
MySQL的存储引擎有:MyISAM、InnoDB、HEAP、BDB等,可以使用show engines查看:
语法格式:ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;
8、删除表
语法格式:DROP TABLE [if exists] 表1,表2,......表n;
参数if exists用于删除前判断删除的表是否存在,加上该参数,再删除表时,如果表不存在则sql可以顺利执行,但会发出警告。
DROP TABLE user2;