Hello! 欢迎来到盒子萌!

mysql增删数据库&数据表


avatar
dspirit 2025-01-29 38

[每天记录一个问题,记录十年 Blog]

1.1 mysql增删_数据库

A. 创建数据库

creat database [if not exists] database_name  # 创建数据库
    character set utf8mb4  # 指定字符集
    collate utf8mb4_general_ci  # 指定排序规则
mysqladmin -u your_username -p create your_database \  # 使用mysql mysqladmin命令创建数据库
    --default-character-set=utf8mb4 \  #指定字符集
    --default-collation=utf8mb4_general_ci  # 指定排序规则

B. 删除数据库

drop database [if exists] database_name  # 删除数据库
mysqladmin -u your_username -p drop your_databsae  # 使用mysql mysqladmin命令删除数据库

C. 选中数据库(确保数据库存在,否则将收到报错消息,可以先用show databases查询可用数据库)

use database_name  # 选择数据库
mysql -u root -p -D your_database  # -D参数用于指定要选择的数据库

1.2 mysql数据类型

A. 数值类型

类型 大小 范围(有符号) 范围(无符号) 用途
tinyint 1 Bytes (-128,127) (0,255) 小整数值
smallint 2 Bytes (-32 768,32 767) (0,65 535) 大整数值
mediumint 3 Bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值
int或integer 4 Bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
bigint 8 Bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
float 4 Bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值
double 8 Bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值
decimal 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

B. 日期和时间类型

类型 大小 ( bytes) 范围 格式 用途
date 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
time 3 ‘-838:59:59’/’838:59:59’ HH:MM:SS 时间值或持续时间
year 1 1901/2155 YYYY 年份值
datetime 8 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ YYYY-MM-DD hh:mm:ss 混合日期和时间值
timestamp 4 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYY-MM-DD hh:mm:ss 混合日期和时间值,时间戳

C. 字符串类型

类型 大小 用途
char 0-255 bytes 定长字符串
varchar 0-65535 bytes 变长字符串
tinyblob 0-255 bytes 不超过 255 个字符的二进制字符串
tinytext 0-255 bytes 短文本字符串
blob 0-65 535 bytes 二进制形式的长文本数据
text 0-65 535 bytes 长文本数据
mediumblob 0-16 777 215 bytes 二进制形式的中等长度文本数据
mediumtext 0-16 777 215 bytes 中等长度文本数据
longblob 0-4 294 967 295 bytes 二进制形式的极大文本数据
longtext 0-4 294 967 295 bytes 极大文本数据
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY 和 VARBINARY(定长和变长的非二进制字节串,不是字符串) 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

D. 枚举与集合类型(enumeration and set types)

ENUM 枚举类型,用于存储单一值,可以选择一个预定义的集合。
SET 集合类型,用于存储多个值,可以选择多个预定义的集合。

E. 空间数据类型(spatial data types)

geometry, point, linestring, polygon, multipoint, multilinestring, multipolygon, geometrycollection: 用于存储空间数据(地理信息、几何图形等)。

1.3 mysql增删_数据表

A. 创建表

① mysql创建表

create table table_name (  # 表名
    column1 datatype,  # 字段1 字段1类型
    column2 datatype,  # 字段2 字段2类型
);
create table users (
    id int auto_increment primay key,  # 用户id,整数类型,自增长,作为主键
    username varchar(50) not null,  # 用户名,变长字符串,不允许为空
    email varchar(100) not null,  # 用户邮箱,变长字符串,不允许为空
    birthdate date,  # 用户生日,日期类型
    is_active boolean default true  # 用户是否已激活,布尔类型,默认值true
);

如果希望在创建表时指定数据引擎,字符集和排序规则等,可以使用character set和collate子句

create table mytable (
    id int primary key,
    name varchar(50)
) character set utf8mb4 collate utf8mb4_general_ci;  # 使用utf字符集且utf_ci排序
create table if not exists `runoob_tbl`(
   `runoob_id` int unsigned auto_increment,  # 定义列为自增,一般用于主键,数值会自动加1
   `runoob_title` varchar(100) not null,  # not null设置字段非空,当输入该字段为空值时,就会报错
   `runoob_author` varchar(40) not null,
   `submission_date` date,
   primary key ( `runoob_id` )  # primary key定义列为主键,可以使用多列来定义主键,列间以,分隔
)engine=innodb default charset=utf8;  # enging设置存储引擎,charset设置编码

② 通过命令提示符创建表

root@host# mysql -u root -p
enter password:*******
mysql> use runoob;
database changed
mysql> create table runoob_tbl(
   -> runoob_id int not null auto_increment,
   -> runoob_title varchar(100) not null,
   -> runoob_author varchar(40) not null,
   -> submission_date date,
   -> primary key ( runoob_id )
   -> )engine=innodb default charset=utf8;
query ok, 0 rows affected (0.16 sec)
mysql>

B. mysql删除表

drop table [if exists] table_name;

如果只是想删除表中的所有数据,但保留表的结构,可用truncate table语句:

truncate table table_name;

注意事项:

备份数据:在删除表之前,确保已经备份了数据,如果你需要的话。
外键约束:如果该表与其他表有外键约束,可能需要先删除外键约束,或者确保依赖关系被处理好。

C. 插入数据

① mysql插入数据insert into

insert into table_name (column1,column2,column3,···)
# 如果数据是字符型,必须使用单引号 ' 或者双引号 ",如: 'value1', "value1"。
values (value1,value2,value3,···);

如:

​ 指定字段插入:

insert into user (username,email,birthdate,is_active)
# 用户名(字符串),邮箱地址(字符串),用户生日(字符串),是否已激活(布尔类型)
values ('test','test@runoob.com','1990-01-01',true);

​ 如果要插入所有列的数据,可以省略列名(NULL是用于自增长列的占位符,表示系统将为id列生成一个唯一的值):

inster into users
values (null,'test','test#runoob.com','1990-01-01',true);

​ 如果要插入多行数据,可以在value子句中指定多组数值:

insert into users (username,email,birthdate,is_active)
values
    ('test1','test1@runoob.com','1985-07-10',true),
    ('test2','test2@runoob.com','1988-11-25',false),
    ('test3','test3@runoob.com','1993-05-03',true);

② 通过命令提示符插入

root@host# mysql -u root -p password;
enter password:*******
mysql> use runoob;
database changed
mysql> insert into runoob_tbl
    -> (runoob_title, runoob_author, submission_date)  # 标题,作者,提交时间
    -> values
    -> ("学习 php", "菜鸟教程", now());  # 标题,作者,now()是mysql函数,该函数返回日期和时间
query ok, 1 rows affected, 1 warnings (0.01 sec)
mysql> insert into runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> values
    -> ("学习 mysql", "菜鸟教程", now());
query ok, 1 rows affected, 1 warnings (0.01 sec)
mysql> insert into runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> values
    -> ("java 教程", "runoob.com", '2016-05-06');
query ok, 1 rows affected (0.00 sec)
mysql>select * from runoob_tbl;  # 读取数据表

相关阅读