数据库表的创建、数据类型、约束条件、增删改数据

发布时间 2023-11-30 11:31:53作者: 罗罗诺亚丶索隆

MYSQL数据库、表基本操作

一、常用数据类型

1.1、整型类型

数据类型 所占字节 存储范围(有符号) 存储范围(无符号)
TINYINT 1字节 -128~127 0~255
SMALLINT 2字节 -32768~32767 0~65535
MEDIUMINT 3字节 -8388608~8388607 0~16777215
INT 4字节 -2147483648~2147483647 0~4294967295
BIGINT 8字节 -9223372036854775808 ~9223372036854775807 0~18446744073709551615

1.2、浮点类型和定点类型

浮点数类型分为两种,单精度(FLOAT)和双精度(DOUBLE),而定点数类型只有DECIMAL一种。

浮点数类型和定点数类型都可以使用类型名称后面加“(M,D)”的形式来定义,其中M称为精度,表示数值的位数(整数位+小数位);D称为标度,表示小数点后的位数。

数据类型 占用字节 负数存储范围 非负数存储范围
FLOAT 4字节 -3.402823466E+38 ~-1.175494351E-38 0和1.175494351E-38 ~3.402823466E+38
DOUBLE 8字节 -1.7976931348623157E+308 ~-2.2250738585072014E-308 0和2.2250738585072014E-308 ~1.7976931348623157E+308
DECIMAL M+2字节 与DOUBLE相同 与DOUBLE相同

1.3、日期和时间类型

数据类型 占用字节 存储格式 存储范围
YEAR 1字节 YYYY 1901~2155
DATE 3字节 YYYY-MM-DD 1000-01-01~9999-12-31
TIME 3字节+小数秒存储 HH:MM:SS -838:59:59~838:59:59
DATETIME 5字节+小数秒存储 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~9999-12-31 23:59:59
TIMESTAMP 4字节+小数秒存储 YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC ~2038-01-19 03:14:07 UTC

1.4、字符串类型

类型名称 占用字节 存储范围
CHAR(M) M*w字节 0<=M<=255
VARCHAR(M) L+1字节 0<=M<=65535
BINARY(N) N字节 0<=N<=255
VARBINARY(N) L+1字节 0<=N<=65535
BLOB L+2字节 L<216
TEXT L+2字节 L<216
ENUM 1或2字节 0~65535
SET 1、2、3、4或8字节 最多64个成员

其中,TEXT类型和BLOB类型都用于存储比较大的数据。它们的不同之处在于TEXT类型存储的是文本字符串,常用于存储文章或新闻的正文;BLOB类型存储的是二进制字符串,常用于存储图片和音乐等文件。

二、数据完整性约束

2.1、主键约束-PRIMARY KEY

主键,也称主码,用于标识表中唯一的一条记录。一张表中只能有一个主键,并且主键值不能为空。设置主键约束的关键字为 PRIMARY KEY

-- 字段 数据类型(长度) primary key
或者
-- primary key(字段)

2.2、自增约束-AUTO_INCREMENT

在向数据表中插入数据时,如果用户希望每条记录的“编号”自动生成,并且按顺序排列,可以为该字段设置自增约束。设置自增约束的关键字为AUTO_INCREMENT

-- 字段 数据类型(长度) auto_increment
-- 注意:
	-- 一张表中只能设置一个字段为自增约束,并且该字段必须为主键。
	-- 默认的初始值为1,每增加一条记录,字段值自动增加1。
	-- 字段类型必须为整数型。

2.3、非空约束-NOT NULL

设置非空约束的关键字为NOT NULL,作用是规定字段的值不能为空,用户在向数据表中插入数据时,设置非空约束的字段必须要给值。

-- 字段 数据类型(长度) not  null

2.4、唯一约束-UNIQUE

设置唯一性约束的关键字为UNIQUE,作用是规定字段的值不能重复,比如学号字段,身份证字段就可设置唯一约束

-- 字段 数据类型(长度) unique
或者
-- unique(字段)

2.5、默认约束-DEFAULT

设置默认约束的关键字为DEFAULT,作用为该字段设置一个默认值,当添加数据时不给该字段添加值时,该字段就会填充默认值

-- 字段 数据类型(长度) default '默认值'

2.6、外键约束-FOREIGN KEY

设置外键约束的主要作用是保证数据的完整性。外键可以不是所属数据表的主键,但会对应着另外一张数据表的主键,例如有两个表:学生表和班级表之间具有一定关系,学生表中会有一个字段存储班级的编号,而此字段就能关联班级表的信息,通过该字段就能查询到班级信息,那么就可以将班级表的主键引入到学生表中作为外键。

CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 主键表(主键)

三、数据库基本操作

数据库的基本操作主要包括创建、查询、更新和删除,以下是相应的语法示例:

#创建数据库:
	CREATE DATABASE database_name;
#判断数据库是否存在,如果不存在则创建:
	CREATE DATABASE IF NOT EXISTS database_name;
#创建数据库并指定字符集:
	CREATE DATABASE database_name CHARACTER SET charset_name;
	
#查询所有数据库的名称:
	SHOW DATABASES;
#查询某个数据库的字符集:
	SHOW CREATE DATABASE database_name;
	
#选择数据库
	use database_name;
#删除数据库
	drop database database_name;
	

四、数据表结构的基本操作

数据表结构的操作,包括创建表,修改表结构,对表中的字段进行添加,删除,修改,删除表等操作

4.1、创建数据表语法

创建数据表,实际上是规定列属性和实现数据完整性约束的过程,基本语法形式如下:

1.创建一个数据表
	1.1建表语法:
		create  table 表名(
			字段名1 数据类型(长度) 约束条件 comment'注释',
			字段名2 数据类型(长度) 约束条件 comment'注释'
		);
	1.2约束条件
		主键约束	primary key
		自增约束	auto_increment
		非空约束	not NULL
		唯一约束	unique
		默认约束    default 默认值
		外键约束    ONSTRAINT key_name FOREIGN KEY(child_col_name) REFERENCES parent_table_name(parent_col_name)

2.查看数据库表
	2.1查看表结构
		desc 表名;
	2.2查看建表语句
		show create table 表名;
3.修改(alter)表结构
	3.1修改表名
		alter table 表名 rename  新表名;
	3.2修改表的字段的数据类型
		alter table 表名 modify 字段 新类型 [约束条件]; 
	3.2修改表的字段
		alter table 表名 change 旧字段 新字段 类型 [约束条件];
	3.3添加表的字段
		alter table 表名 add 字段名 数据类型 [约束条件];
	3.4删除表的字段
		alter table 表名 drop 字段名;
4.删除表
	drop table [if exists] 表名;

4.2、创建数据表示例

根据下表的创建商品信息表image-20231130102352987

create table goods (
	id int(11) not null primary key  auto_increment comment'商品编号',
	type varchar(30) not null comment '商品类型',
	name varchar(20) unique comment '商品名称',
	price decimal(7,2) comment '商品价格',
	num int(11) default 0 comment'商品库存',
	add_time datetime comment '添加时间'
);
#设置主键约束和唯一约束的第二种方式
create table goods1(
	id int(11) auto_increment  comment'商品编号',
	name varchar(20) comment '商品名称',
	type varchar(30) not null,
	price decimal(7,2) comment '商品价格',
	num int(11) default 0 comment'商品库存',
	add_time datetime comment '添加时间',
	primary key(id),  #主键约束
	unique(name)  # 唯一约束
);

4.3、查看表结构

-- 查看表的基本结构
describe goods1;
desc goods1;
-- 查看建表语句
show create table goods1;

4.4、修改表结构

-- 创建表
drop table if exsits user;
create table user(
	id int(10) not null auto_increment primary key,
	name varchar(20) not null,
	nickname varchar(20) not null,
	password varchar(20) not null,
	sex tinyint(1),
	email varchar(20) not null,
	cellphone char(10) not null,
	date int(10) not null
);
-- 1.修改表名: alter table 旧表名 rename 新表名 ;
alter table user rename tb_user;

-- 2.修改字段的数据类型: alter table 表名 modify 字段名 新的数据类型 [约束条件]
alter table tb_user modify date  datetime;

-- 将 tb_user表汇中的date字段修改为 create_date
-- 3.修改表的字段: alter table 表名 change 旧字段 新字段 数据类型 [约束条件]
alter table tb_user change date create_date datetime;

-- 4.添加字段:alter table 表名 add  字段名称 数据类型(长度) [约束条件]
-- 向tb_user表中添加一个用户头像字段
alter table tb_user add img_url varchar(50);
-- 向tb_user表中添加一个身份证号的字段,添加到邮箱(email)字段之后
alter table tb_user add sfzh varchar(18) after email 

-- 5.删除字段:alter table 表名 drop 字段名称
-- 删除tb_user表中的img_url字段
alter table tb_user drop img_url

-- 6.删除表 :drop table [if exists] 表名;
drop table if exists tb_user;

五、数据的增删改

5.1、向表中添加数据-insert

-- 语法:
	-- insert into 表名(字段1,字段2,字段3,...,字段n) values(值1,值2,值3,...,值n);
-- 示例:向商品表中添加一条数据
	insert into goods(id,name,type,price,num,add_time) values(null,"三国演义","书籍",79.8,200,"2023-11-29");
	insert into goods(name,type,price,num,add_time) values("水浒传","书籍",79.8,200,"2023-11-29");
	insert into goods(name,type) values("西游记","书籍");
	insert into goods values(null,"书籍","红楼梦",30.9,20,null);
-- 注意:
	-- 1.字段需要和值进行一一对应(顺序,类型,个数)
	-- 2.自增长的主键不需要手动添加值,可以使用 null 填充
	-- 3.not null 约束的字段 必须要给值
	-- 4.字段可以省略,省略了字段之后,默认添加所有字段的值。
-- 通过添加多个值:
	-- insert into 表名(字段1,字段2,字段3,...,字段n) values(值1,值2,值3,...,值n),(值1,值2,值3,...,值n),(值1,值2,值3,...,值n);
-- 示例:
	insert into tb_stu(stu_name,stu_age)values("张三1",20),("张三2",20),("张三3",20);
	

5.2、修改数据-update

-- 语法:
	-- update 表名 set 字段1 = 值,字段2=值,字段n = 值 [where 限制条件];
-- 示例:
	update goods set num=10000; #修改所有数据
	update goods set num = 100 ,name = "《水浒传》" where id = 3; #根据条件修改数据

5.3、删除数据-delete

-- 语法:
	-- delete from  表名 [where 限制条件];
-- 示例:
	delete from goods; #删除所有数据
	delete from goods where id = 1; # 根据条件删除数据