存储引擎+作业

存储引擎:MyISAM、innoDB、MEMORY.

一、
(一)MyISAM

扩展名:MYD. MYI. frm.
特征:
1、所有数据值先存储低字节。
2、大文件(达63位文件长度)在支持大文件的文件系统和操作系统上被支持。
3、 当把删除和更新及插入混合的时候,动态尺寸的行更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。

4、NULL值被允许在索引的列中。这个占每个键的0-1个字节。

存储格式

MyISAM支持三种不同存储格式。
其中两个(固定格式和动态格式)根据正使用的列的类型来自动选择。第三个,即已压缩格式,只能使用myisampack工具来创建。

(二)INNODB

事务型数据库的首选引擎,支持ACID事务,支持行级锁定。

innoDB 给 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。

(三)Memory
功能
支持HASH索引(等值查询)和BTree索引(范围查找)(默认HASH)
所有字段都为固定长度varchar(10) = char(10)
不支持BLOG和TEXT等大字段
Memory存储引擎使用表级锁
表的最大大小由max_heap_table_size参数决定(默认16M,对存在的表修改是无效的)

二、作业
创建学生表,包含如下属性:
学号 定长字符型 10位 主键
姓名 变长字符型 20位 非空
性别 定长字符型 2位 取值范围只能为男或女
出生日期 日期型
所在班级

CREATE TABLE student(
studentid CHAR(10) PRIMARY KEY,
studentname VARCHAR(20) not NULL,
genger char(2) CHECK(genger in(‘男’,‘女’)),
studentbirth date,
studentclass int
)

INSERT into student (studentid,studentname,genger,studentbirth) VALUES(‘000000001’,‘zhang’,‘男’,‘2019-9-1’)

练习2:

创建DEPT表、EMP表

– CREATE TABLE DEPT(
– DEPTNO INT(2) PRIMARY KEY AUTO_INCREMENT,
– DNAME VARCHAR(20),
– LOC VARCHAR(30)
– )

– CREATE TABLE EMP(
– EMPNO INT(4) PRIMARY KEY AUTO_INCREMENT,
– ENAME VARCHAR(10),
– JOB VARCHAR(10),
– MGR VARCHAR(50),
– HIREDATE date,
– SAL DOUBLE(7,2),
– COMM DOUBLE(7,2),
– DEPTNO INT(2)
– )

通过子查询的方式创建一个表dept10,该表保存10号部门的员工数据。

– CREATE TABLE dept10 AS (SELECT * FROM EMP where DEPTNO=10)

练习3:
.在员工表中添加一个性别列,列名为gender,类型为char(2),默认值为“男”

– ALTER TABLE EMP
– add(gender CHAR(2) DEFAULT ‘男’)

修改员工表中性别列的数据类型为char(4)

– ALTER TABLE EMP
– MODIFY gender CHAR(4)
修改员工表中性别列的默认值为“女”
–ALTER TABLE EMP
–MODIFY gender CHAR(4) DEFAULT ‘女’
删除员工表中的性别列

ALTER TABLE EMP
DROP gender

课后作业:

创建表date_test,包含列d,类型为date型。试向date_test表中插入两条记录,一条当前系统日期记录,一条记录为“1998-08-18”

– CREATE TABLE date_test(
– d date
– )

– INSERT INTO date_test VALUES(SYSDATE());
– insert into date_test values(to_date(‘1998-08-18’);

创建与dept表相同表结构的表dtest,将dept表中部门编号在40之前的信息插入该表。

– create table dtest as select * from dept where deptno<40;

创建与emp表结构相同的表empl,并将其部门编号为前30号的员工信息复制到empl表。
– create table emp1 as select * from emp where deptno<30;

试为学生表student增加一列学生性别gender 默认值 “女”
– alter table student add(gender char(2) default’女’)

试修改学生姓名列数据类型为定长字符型10位。

– alter table student modify studentname char(10);

五种约束:
NOT NULL,非空约束,指定某列的所有行数据不能包含空值
UNIQUE,唯一性约束,指定列或者列的组合的所有行数据必须唯一
PRIMARY KEY 主键约束,表的每行的唯一性标志,指定列或者列的组合的所有行数据必须唯一
FOREIGN KEY 外键约束,在列及引用列上建立的一种强烈依赖关系
CHECK 检查性约束,在列上指定一个必须满足的条件
创建学生关系sc,包括属性名:
选课流水号 数值型 主键;
学生编号 非空 外键
课程编号 非空 外键;
成绩 0-100之间;

  • create table sc(
    – selectid int primary key,
    – stuid int,
    – constraint fk_stuid foreign key sc(stuid) references student(stuid),
    – courseid int,
    – constraint fk_courseid foreign key sc(courseid) references course(courseid),
    – grade int check (grade between 0 and 100)
    – )

创建copy_emp,要求格式同emp表完全一样,不包含数据。
create table copy_emp AS select * from emp where 1=2;

创建copy_dept,要求格式同dept表完全一样,不包含数据。

create table copy_dept AS select * from dept where 1=2;

设置copy_emp 表中外键deptno,参照copy_dept中deptno,语句能否成功,为什么?

alter table copy_emp add constraint pk_deptno primary key(deptno) references copy_dept(deptno);不能。

追加copy_dept表中主键deptno

alter table copy_dept add constraint pk_deptno primary key(deptno);

修饰符:
修改数据类型,
修改字段位置 —用modify(微改)

修改名字 --就用change
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值