数据库
(Database)
学完本次课程后,你能够:
了解MySQL数据库
学会安装MySQL
学会使用SQLyog数据库管理工具
了解常用的数据库命令
熟悉创建数据库表的语句
熟悉常见的数据列属性、类型和索引
数据库(Database,简称DB)
关系型数据库(SQL)MySQL、Oracle、SQL Server、SQLite、DB2
非关系型数据库(NOSQL)Redis、MongoDB
数据库管理系统(Database Management System)
数据管理软件,科学组织和存储数据、高效地获取和维护数据
数据库默认端口3306
#显示所有数据库 show databases ; #创建数据库 create database myschool; create database if not exists myschool; #选中要使用数据库 use myschool; #删除数据库 drop database myschool; create database if not exists myschool; #建表语句 create table if not exists subject( subjectno int(11) primary key(主键) auto_increment,(自动增长) subjectname varchar(50),(字符串) classhour int(4), gradeid int(4) );
每次使用数据库时,要使用use 语句选中后执行
subjectno | subjectname | classhour | gradeid |
---|---|---|---|
1 | 数学 | 48 | 1 |
create table if not exists demo( id int(10) primary key auto_increment, name varchar(5) ); #删除表 drop table if exists demo;
可以连接两个数据库或连接外部计算机
#连接外部计算机 #mysql -uroot -h192.168.153.149 -p; #Enter password:
结构化查询语句SQL
结构化查询语句分类
名称 | 解释 | 命令 |
---|---|---|
DDL(数据定义语言) | 定义和管理数据对象,如数据库,数据表等 | CREATE、DROP、ALTER |
DML(数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
DQL(数据查询语言) | 用于查询数据库数据 | SELECT |
DCL(数据控制语言) | 用来管理数据库的语言,包括管理权限及数据更改 | GRANT、COMMIT、ROLLBACK |
#查看表的信息描述 desc demo; desc subject; describe demo;
反引号:系统关键字的标注,表示这个是为了建表需要,算是标准化写法,可不加,
反引号用于区别MySQL保留字与普通字符而引入的
反引号在1旁边
# CREATE TABLE `subject` ((反引号) # `subjectno` int NOT NULL AUTO_INCREMENT, # `subjectname` varchar(50) DEFAULT NULL, # `classhour` int DEFAULT NULL, # `gradeid` int DEFAULT NULL, # PRIMARY KEY (`subjectno`) # ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
列类型
列类型
规定数据库中该列存放的数据类型
分为
1数值类型
2字符串类型
3日期和时间型数值类型
4NULL值
数值类型
类型 | 说明 | 取值范围 | 存储需求 |
---|---|---|---|
tinyint | 非常小的数据 | 有符值: -2**7** ~ 2**7-1** 无符号值:**0 ~ 28-1** | 1**字节** |
smallint | 较小的数据 | 有符值: -2**15** ~ 2**15-1** 无符号值: 0 ~ 2**16-1** | 2**字节** |
mediumint | 中等大小的数据 | 有符值: -2**23** ~ 2**23-1** 无符号值: 0 ~ 2**24-1** | 3**字节** |
int | 标准整数 | 有符值: -2**31** ~ 2**31-1** 无符号值:**0 ~ 232-1** | 4**字节** |
bigint | 较大的整数 | 有符值: -2**63** ~2**63-1无符号值:0 ~264-1** | 8**字节** |
float | 单精度浮点数 | ±1.1754351e -38 | 4**字节** |
double | 双精度浮点数 | ±2.2250738585072014e -308 | 8**字节** |
decimal | 字符串形式的浮点数 | decimal**(m,** d**)** | m**个字节** |
字符串类型
类型 | 说明 | 最大长度 |
---|---|---|
char**[(M)]** | 固定长字符串,检索快但费空间, 0 <= M <= 255 | M**字符** |
varchar**[(M)]** | 可变字符串**0 <= M <= 65535** | 变长度 |
tinytext | 微型文本串 | 2**8–1字节** |
text | 文本串 | 2**16–1字节** |
日期和时间型数值类型
类型 | 说明 | 取值范围 |
---|---|---|
DATE | YYYY-MM-DD**,日期格式** | 1000-01-01~ 9999-12-31 |
TIME | Hh:mm:ss ,时间格式 | -838:59:59~838:59:59 |
DATETIME | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 至**9999-12-31 23:59:59** |
TIMESTAMP | YYYYMMDDhhmmss**格式表示的时间戳** | 197010101000000 ~2037**年的某个时刻** |
YEAR | YYYY**格式的年份值** | 1901~2155 |
NULL值
理解为“没有值”或“未知值”
不要用NULL进行算术运算,结果仍为NULL
选择数据类型
整数和浮点
日期类型
char和varchar
数据字段属性2-1
UNSIGNED
无符号的声明该数据列不允许负数
ZEROFILL
0填充的
不足位数的用0来填充,如 int(3),5则为 005
AUTO_INCREMENT
自动增长的,每添加一条数据,自动在上一个记录数上加1通常用于设置主键,且为整数类型可定义起始值和步长
NULL 和 NOT NULL
默认为NULL,即没有插入该列的数值
如果设置为NOT NULL,则该列必须有值
DEFAULT
默认的
用于设置默认值
例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值
创建数据表student
create table student( StudentNo int(4) not null comment '学号', loginpwd varchar(20) default null, studentname varchar(20) default null comment '学生姓名', sex tinyint(1) default 1 comment '性别,取值0或1', gradeid int(11) default null comment '年终编号', phone varchar(50) not null comment '联系电话', address varchar(255) not null comment '地址', borndate datetime default null comment '出生时间', email varchar(50) not null comment '邮箱账号', identitycard varchar(18) default null comment '省份证号' )engine=InnoDB;
设置数据表字符集
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
数据表的存储位置
MySQL数据表以文件方式存放在磁盘中
包括表文件、数据文件以及数据库的选项文件
位置:MySQL安装目录\data下存放数据表。目录名对应数据库名,该目录下文件名对应数据表
修改数据表
#修改表名 alter table demo rename as demo1; #修改表内列的名字 alter table demo1 change name username varchar(50) not null comment '用户名'; #新增表中列 alter table demo1 add password varchar(32) not null comment '用户密码,不能为空'; #删除表中的列 alter table demo1 drop password;
MySQL数据管理
外键管理
在建表时创建索引和外键约束
第一种建表时直接创建外键约束
#建表时直接创建外键约束 create table mystu( id int(10) primary key auto_increment, name varchar(32)not null default '未录入姓名' comment '学生姓名', gradeid int(10), constraint fk_gradeid foreign key (gradeid) references grade(gradeid) #外键的重点代码 );
#在上述代码前添加 insert into grade(gradeid, gradename) values (null,'一年级'),(null,'二年级'); select * from grade
#一测试外键功能 insert into mystu(id,name,gradeid) value (null,'花少',1);————可以创建添加数据
#二测试外键功能 insert into mystu(id,name,gradeid) value (null,'花少',3);————不能创建由于外键的约束
第二种 建表后再创建外键约束
#建表后再创建约束 create table mystu( id int(10) primary key auto_increment, name varchar(32)not null default '未录入姓名' comment '学生姓名', gradeid int(10) ); alter table myschool.mystu add constraint fk_gradeid foreign key (gradeid) references grade(gradeid);
不太常用,主要约束会在开发时自成体系
#删除外键 alter table myschool.mystu drop foreign key fk_gradeid; insert into mystu(id,name,gradeid) value (null,'方总',3);---删除外键索引后不会报错 #删除外键索引 alter table myschool.mystu drop index fk_gradeid;
DML语言
(数据操作语言)
用于操作数据库对象中所包含的数据
包括
INSERT ( 添加数据语句 )
UPDATE ( 更新数据语句 )
DELETE ( 删除数据语句 )
插入数据
INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ] VALUES ( '值1', '值2', '值3', …)
1 字段或值之间用英文逗号隔开
2 “字段1, 字段2…”该部分可省略,但添加的值务必与表结构数据列顺序相对应,且数量一致
3 可同时插入多条数据,values 后用英文逗号隔开
insert into grade(gradeid,gradename) value (null, '三年级'); insert into grade value(null,'四年级'); insert into grade(gradename) values ('五年级'),('六年级');#插入多行数据