SQL数据库

1、MYSQL存储引擎

存储引擎是插件式的,基于表的,所以一个数据库可以有多种引擎;

show variables like ‘文件名’——查看该文件的的属性;

2、MYSQL数据类型

2.1、整数类型

整数所有类型都会分为有无符号两种

数据类型

字节数

最小值

最大值

整数(INT)

4

有符号-2147483648 无符号0

2147483647

TINYINT

1

有符号-128 无符号0

有符号127 无符号255

SMALLINT

2

-32768

32767 无符号65535

MEDIUMINT

3

-8388608

8388607 无符号1677215

BIGINT

8

-9223372036854775808

int(数字):表示数据的长度一般和0填充(zerofill) 例如:int(4) zerofill

不给长度使用zerofill :int数字长度默认11,bigint数字长度默认20;

2.2浮点数与定点数

浮点数类型

字节

最小值

最大值

float

4

-1.7E-38

3.4E+38

double

8

-2.22E-308

1.79E+308

定点数类型

字节

最小值

最大值

DEC(M,D)和DECIMAL(M,D)

M+2

与double相同

与double相同

DECIMAL(M,D):M表示数据总长度,D表示小数位数;

2.3日期与时间类型

计算的时区=已知时区-(已知时区-要计算的时区) 备注:东时区为正,西时区为负

代码:select now();

set time_zone=‘+9:00’

set time_zone=DEFAULT;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAEI5cYW-1652627951987)(file://C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20211118150913760.png)]

如果储存的日期需要让不同时区的用户使用则可以使用TIMESTAMP类型。

2.5字符串

char:固定长度字符串

varchar:可变长度字符串

enum:枚举类型

set :集合类型

text:大型文本类型

3、创建数据表

3.1基本创建

create table 表名(

字段名1 数据类型[约束条件],

字段名2 数据类型[约束条件],

。。。。。

【其他约束条件】)

其他选项(例如定义数据引擎和字符集)

3.2约束

primary key :主键约束

unique :唯一约束

check :检查约束

foreign key:外键约束 与references 搭配使用

default:默认约束

默认约束只能是列级约束

constarint 名字:作用是给约束起名字 例如:constraint fk_deptno foreign key(本表列名) references

外表(外键的列名) 注:这也是外键使用的方法

3.3自增长
NULL AUTO_INCREMENT:自增长

可以更改种子与增量

种子SET @@AUTO_INCREMENT_OFFSET=2;——起始值

增量SET @@AUTO_INCREMENT_INCREMENT=3;

例如:

CREATE DATABASE test;
USE test;
CREATE TABLE book
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(40) NOT NULL,
submission_date DATE)
ENGINE=INNODB DEFAULT CHARSET=utf8;

3.4、check约束

在低版本的MySQL不支持check约束,在8.0.16版本之后就支持了。之前使用枚举与触发器代替check约束

check约束使用:

check(列名 between 数据1 and 数据2):表示约束取值在一个范围内

check(列名 in(x,y,z,q,m)):表示从括号内的数据中选取一个数据

check(列名 like 表达式):筛选类似的 例如 ’s%‘代表以s开头后面不限的,’s_‘代表s后面就带一个字符的

3.5级联

1、级联的使用格式

设置外键(FOREIGN KEY)约束
[CONSTRAINT 约束名 ]
FOREIGN KEY (列)REFERENCES 表B(列)
[ ON DELETE 级联选项]
[ ON UPDATE 级联选项]

2、级联选项有4种取值,其意义如下.

父表记录的删除(DELETE)或者修改(UPDATE)操作:
(1)CASCADE:会自动删除或修改子表中与之对应的记录。
(2)SET NULL:会将子表中与之对应记录的外键值自动设置为NULL值。
(3)NO ACTION:如果子表存在与之对应的记录,那么删除或修改操作将失败。
(4)RESTRICT:与NO ACTION功能相同。

3、代码示例

3.1、级联代码

CREATE TABLE SC(
sno CHAR(10) ,
cno CHAR(10),
garde INT,
PRIMARY KEY(sno,cno),
FOREIGN KEY(sno) REFERENCES student(sno) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(cno) REFERENCES course(cno)  
);

3.2、创建表格代码示例

INSERT db3.timm3
VALUES(NOW(),NOW());
SET time_zone='+1:00';
SELECT * FROM timm3;
SET time_zone=DEFAULT;
SET time_zone='+8:00';
CREATE TABLE t1(c1 CHAR(2),c2 ENUM('男','女'),c3 SET('唱歌','跳舞','rope','起飞')
NOT NULL);


CREATE TABLE student(
sno CHAR(10) PRIMARY KEY,
sname VARCHAR(8) UNIQUE,
ssex CHAR(2) CHECK(ssex IN('男','女')),
sage INT DEFAULT 18 CHECK(sage BETWEEN 15 AND 25) ,
sdept CHAR(10) CHECK(sdept LIKE '%系')
);
CREATE TABLE course(
cno CHAR(10) PRIMARY KEY,
cname VARCHAR(8)
);