您的当前位置:首页正文

MySQL数据库(一)

2024-11-07 来源:个人技术集锦

1,数据库的作用

(1)数据的保存:大量程序产生的数据在程序运行时和程序结束后对数据进行保存。

(2)数据的完整性:连接数据和数据之间的结构,连接数据和程序之间的依赖关系。

(3)数据的读取:为了使写入的数据更方便的进行读取。

(4)数据的安全性:防止因为外界因素所造成的数据丢失。

(5)结构化:数据在数据库中的储存可以依靠二维表结构的逻辑来储存数据,可以参考数据原有的依赖关系和机构关系去储存数据。

(6)独立性:储存在数据库的数据和应用程序之间相互独立,互不影响。

(7)共享性:多个用户可以共同分析计算机数据库中的数据资源,同一数据可以同时被多人使用,从而实现数据库高效共享性.

(8)安全性:访问数据库时对用户的口令,用户的权限进行限制,或者对数据的储存进行限制。

2,数据库的概念

        长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。

        作用:存放、管理数据。

        分类:关系型数据库、NoSQL数据库

3,MySQL数据库的特点

        (1)操作便捷

        (2)小巧,功能齐全

        (3)免费,开源的数据库

        (4)可运行与windows或linux系统

4,数据库结构        

数据库(Database)
以文件的形式存放在磁盘上,即对应于一个或多个物理文件。
字段(Field)
也称域。表中的每一列称为一个字段。每个字段都有相应的描述信息。
索引(Index)索引实际上是一种特殊类型的表,其中含有关键字的值和指向实际记录位置的指针,可以提高访问数据库的效率。
数据表(Table)
简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。
记录(Record)
表中的每一行称为一个记录,它由若干个字段组成。
SQL语句
结构化查询语句命令,用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的操作。

5,SQL语句分类

名称解释命令

DDL

(数据定义语言)

定义和管理数据对象,如数据库,数据表等。CREATE创建
DROP删除
ALTER修改

DML

(数据操作语言)

操作数据库对象中所包含的数据。INSERT插入数据
UPDATE更新数据
DELETE删除数据

DQL

(数据查询语言)

用于查询数据库数据
SELECT
查询

DCL

(数据控制语言)

用来管理数据库的语言,包括管理权限及数据更改
GRANT授权
COMMIT提交
ROLLBACK回滚

6,DDL语句操作数据库

        (1)创建数据库        CREATE DATABASE 数据库名称;

        (2)删除数据库        DROP DATABASE 数据库名称;

        (3)查看数据库        SHOW DATABASES;

        (4)选择数据库        USE 数据库名称;

-- 创建数据库
CREATE DATABASE day001;
-- 删除数据库
DROP DATABASE day001;
-- 查看数据库
SHOW DATABASES;
-- 选择数据库
USE day001;

7,DDL创建数据库表

语法:

        CREATE TABLE [ IF NOT EXISTS ] `表名` (
                `字段名1` 字段类型 [ 属性 ] [ 索引 ] [注释] ,
                `字段名2` 字段类型 [ 属性 ] [ 索引 ] [注释] ,
                … …
                `字段名n` 字段类型 [ 属性 ] [ 索引 ] [注释]
        ) [ 表类型 ] [ 表字符集 ] ;
其中:"[]" 包含的内容可以省略
           "`" 当前符号为反引号,用于区别MySQL保留字与普通字符引入的。

8,数据库表的字段类型

        字符处类型

类型说明取值范围储存需求
char[(M)]
固定长字符串,检索快但费空间, 0 <= M <= 255
M字符
char[(M)]
varchar[(M)]
可变字符串,0 <= M <= 65535
可变长度varchar[(M)]
tinytext微型文本串
16777215长度+3个字节
tinytext
text
文本串(4个G左右大小)
4294967295长度+4个字节
text

        char和varchar比较

类型特点空间上时间上使用场景
char(M)固定长度浪费储存空间效率高储存不大,速度要求高
varchar(M)可变长度节省储存空间效率低非CHAR的情况

        数值类型

tinyint
非常小的数据
有符值: -2 ^7 ~ 2^7-1,无符号值:0 ~ 28-1
1字节
smallint
较小的数据
有符值: -2 15 ~ 215 -1 ,无符号值: 0 ~ 216 -1
2字节
mediumin
中等大小的数据
有符值: -2 23 ~ 223 -1 ,无符号值: 0 ~ 224 -1
int
整数
有符值: -2^31 ~ 2^31-1,无符号值:0 ~ 2^32-1
4字节
bigint
较大的整数
有符值: -2^63 ~2^63-1,无符号值:0 ~2^64-1
8字节
float
单精度浮点数
±1.1754351e -38
4字节
double
双精度浮点数
±2.2250738585072014e -308
8字节
Decimal
字符串形式的浮点数
decimal(m, d)
m个字节

        日期和时间类型

类型说明取值范围储存需求
DATE
YYYY-MM-DD,日期格式
1000-01-01~ 9999-12-31
DATE
TIME
Hh:mm:ss ,时间格式
-838:59:59~838:59:59
TIME
DATETIME
YY-MM-DD hh:mm:ss
1000-01-01 00:00:00 至 9999-12-31 23:59:59
DATETIM
TIMESTAMP
YYYYMMDDhhmmss格式表示的时间
197010101000000 ~2037年的某个时刻
TIMESTAMP
YEAR
YYYY格式的年份值
1901~2155
YEAR

9,数据库字段注释

        CREATE TABLE [ IF NOT EXISTS ] `表名` (
                `字段名1` 字段类型 [ 属性 ] [ 索引 ] [注释] ,
                `字段名2` 字段类型 [ 属性 ] [ 索引 ] [注释] ,
                … …
                `字段名n` 字段类型 [ 属性 ] [ 索引 ] [注释]
        ) [ 表类型 ] [ 表字符集 ] ;

10,查询创建的数据库表结构

方式一:describe 表名   或     desc       表名        
DESCRIBE teacher;
DESC teacher;

方式二:show create table 表名

SHOW CREATE TABLE teacher;

11,修改和删除数据库表

(1)修改表名 ALTER TABLE 旧表名 RENAME AS 新表名;

(2)添加字段 ALTER TABLE 表名 ADD 字段名 列类型 [属性];

(3)删除字段 ALTER TABLE 表名 DROP 字段名;

(4)修改字段 

                方式一:ALTER TABLE 表名 MODIFY 字段名 列类型 [属性];

                方式二:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 属性;        

(5)删除表 DROP TABLE 表名;

-- 修改表名
ALTER TABLE teacher RENAME AS laoshi;
-- 添加字段
ALTER TABLE teacher ADD t_phone CHAR(11) COMMENT '老师电话';
-- 删除字段(危险操作)
ALTER TABLE teacher DROP tea_name;

-- 修改字段 替换式,不写就会使用默认值
-- 满足数据可以转换为修改的数据类型,长度满足修改的长度。

-- 方式1:modify
ALTER TABLE teacher MODIFY t_phone CHAR(20);

-- 方式2:change
-- alter table teacher change 旧字段名 新字段名 数据类型 属性;
ALTER TABLE teacher CHANGE t_phone dianhua CHAR(11) COMMENT '电话';

-- 删除表(危险操作)
DROP TABLE teacher;

12,约束

概念:约束实际上就是表中数据的限制条件

作用:表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效

种类:

        非空约束(not null)

        唯一性约束(unique)

        主键约束(primary key) PK

        外键约束(foreign key) FK

        检查约束(目前MySQL不支持、Oracle支持)

13,非空约束

        概念:用not null约束的字段不能为null值,必须给定具体的数据

-- 非空约束
CREATE TABLE teacher2(
	t_name VARCHAR(10) NOT NULL DEFAULT '路人甲',
	t_age TINYINT
);

 若字段为空则报错

14,唯一约束

        概念:unique约束的字段,具有唯一性,不可重复,但可以为null        

-- 唯一约束
-- 方式一:行级唯一约束
CREATE TABLE teacher3(
	t_name VARCHAR(10) UNIQUE,
	t_age TINYINT
);

-- 方式二:表级唯一约束
CREATE TABLE teacher4(
	t_name VARCHAR(10),
	t_age TINYINT,
-- 表级约束给约束起名字
	CONSTRAINT uniqu_tname_tage UNIQUE(t_name,t_age) -- 联合唯一约束(一模一样,才算违反唯一约束)
);

如果字段相同则报错

 15,主键约束

概念:主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录

主键约束与“not null unique”区别
1,作为Primary Key的域/域组不能为null,而Unique Key可以。
2,在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的,具体到某一列可能会重复。
3,更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置
Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。
注意:一张表应该有主键字段,如果没有,表示该表无效

主键值:是当前行数据的唯一标识、是当前行数据的身份证号,即使表中两行记录相关数据相同,但由于主键值不同,所以也认为是两行不同的记录。
-- 主键约束
-- 1,所有的表都必须有一个主键
-- 2,每张表只允许有一个主键
-- 3,被设置的主键的列不允许重复(唯一性)
-- 4,不允许为空(不能为null)
-- 5,一般作为主键的类型 INT,BIGINT,依次递增(auto_increment)
CREATE TABLE teacher5(
	t_name VARCHAR(10) PRIMARY KEY,
	t_age TINYINT
);

CREATE TABLE teacher6(
	t_no INT PRIMARY KEY auto_increment,
	t_name VARCHAR(10),
	t_age TINYINT
);

-- 表级主键
CREATE TABLE teacher7(
	t_email VARCHAR(20),
	t_passwd VARCHAR(10),
	t_name VARCHAR(10),
	PRIMARY KEY(t_email,t_name), -- 只能有一个
	UNIQUE(t_email),
	UNIQUE(t_passwd),
	UNIQUE(t_email,t_name)
);

16,外键约束

        外键:外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。 若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键。

        A为基本表或父标,主表,B为信息表,子表,副表

        定义:foreign key(表的字段名) references 父表表名(父表的字段名)

某个字段添加外键约束之后,该字段称为外 键字段,外键字段中每个数据都是外键值
-- 外键约束
-- 先创建父表,再创建子表
-- 外键数据是可以为空的
-- 添加数据的时候,先要添加父表的数据,再添加子表
-- 删除数据的时候,先要删除子表的数据,再删除父表的数据
-- 什么样的(父表)可以作为(子表)的外键(要么主键,要么唯一)

CREATE TABLE A(
	id INT PRIMARY KEY auto_increment,
	a_name VARCHAR(10)	
);
CREATE TABLE B(
	bid INT PRIMARY KEY auto_increment,
	b_name VARCHAR(10),
	id INT,
	FOREIGN KEY(id) REFERENCES A(id)
);

若添加外键数据的值主键不存在

17,约束的添加

添加非空约束alter table 表名 modify 字段名 not null 
添加唯一约束alter table 表名 add unique(字段名)
添加主键约束alter table 表名 add primary key(字段名)
添加外键约束alter table 表名 add constraint N1 foreign key(字段名) references 父表(父表字段名)
SHOW CREATE TABLE teacher;
CREATE TABLE `teacher` (
  `tea_age` int(11) DEFAULT NULL,
  `dianhua` char(11) DEFAULT NULL COMMENT '电话'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

-- 给tea_age添加非空约束
ALTER TABLE teacher MODIFY tea_age INT(11) NOT NULL;

CREATE TABLE `teacher` (
  `tea_name` varchar(10) DEFAULT NULL,
  `tea_age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

-- 给tea_name添加唯一约束
ALTER TABLE teacher MODIFY tea_name VARCHAR(20) UNIQUE;

CREATE TABLE `teacher` (
  `tea_name` varchar(20) NOT NULL,
  `tea_age` int(11) NOT NULL,
  PRIMARY KEY (`tea_name`),
  UNIQUE KEY `tea_name` (`tea_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

-- 给tea_name添加主键约束
ALTER TABLE teacher MODIFY tea_name VARCHAR(10) PRIMARY KEY;

CREATE TABLE `teacher` (
  `tea_name` varchar(10) NOT NULL,
  `tea_age` int(11) NOT NULL,
  PRIMARY KEY (`tea_name`),
  UNIQUE KEY `tea_age` (`tea_age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci



18,约束的删除

删除not null约束
alter table 表名 modify 列名 类型;
删除unique约束
alter table 表名 drop index 唯一约束名;
删除primary key约束
alter table 表名 drop primary key;
删除foreign key约束
alter table 表名 drop foreign key 外键名;
-- 删除tea_age的非空约束
ALTER TABLE teacher MODIFY tea_age INT(11);

CREATE TABLE `teacher` (
  `tea_name` varchar(20) NOT NULL,
  `tea_age` int(11) DEFAULT NULL,
  PRIMARY KEY (`tea_name`),
  UNIQUE KEY `tea_name` (`tea_name`),
  UNIQUE KEY `tea_name_2` (`tea_name`),
  UNIQUE KEY `tea_age` (`tea_age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

-- 删除tea_age的唯一约束
ALTER TABLE teacher DROP INDEX tea_age;

CREATE TABLE `teacher` (
  `tea_name` varchar(20) NOT NULL,
  `tea_age` int(11) DEFAULT NULL,
  PRIMARY KEY (`tea_name`),
  UNIQUE KEY `tea_name` (`tea_name`),
  UNIQUE KEY `tea_name_2` (`tea_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

-- 删除表的主键
ALTER TABLE teacher DROP PRIMARY KEY;

CREATE TABLE `teacher` (
  `tea_name` varchar(20) NOT NULL,
  `tea_age` int(11) DEFAULT NULL,
  UNIQUE KEY `tea_name` (`tea_name`),
  UNIQUE KEY `tea_name_2` (`tea_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

显示全文