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)
);