数据库如何建表

MySQL数据库建表过程

目录

创建并使用数据库

第一步:打开命令行

第二步:运行MySQL

第三步:建立数据库以及表数据

创建表时约束条件

约束类型

其他SQL语句

MySQL命令行导入导出数据库

[char 和 varchar 区别](#char 和 varchar 区别)


创建并使用数据库

第一步:打开命令行

有的是直接输入密码就可以(软件版比较常用)

有的是首先【Win+r**】** 输入【cmd】,打开MySQL命令行(用的多一些)

还有的是到数据库安装目录下的【bin】文件夹,在地址栏中运行【cmd】

注意:Windows启动 MySQL 的几种方式

第二步:运行MySQL

运行cmd后输入:【**mysql -u root -p】**再回车,我的没有密码,所以password那里没有输入。

【正常来讲输入自己设置的密码:(默认:123456)直接回车。】

第三步:建立数据库以及表数据

首先就是建立一个数据库 ,在这里我们把数据库的名字命名为:jdbc_demo

输入:

sql 复制代码
create database jdbc_demo;

2、然后我们检查一下是否创建成功

输入:

sql 复制代码
show databases;

3、使用数据库

输入:

rust 复制代码
use jdbc_demo;

4、 创建表,让表中有 ID、名字、密码三条信息(里面信息可以随便改)

输入:

javascript 复制代码
create table user(
        id int(4) not null primary key auto_increment,
        username varchar(20) not null,
        password varchar(10) not null 
       );

当然我们在创建表之前可以先判断一下这个表在不在

如果数据库中存在这个表,就把它从数据库中drop掉。

sql 复制代码
DROP TABLE IF EXISTS 表名;

总的来说可以这样写:

IF EXISTS 表名; 作用:如果表存在就删掉(这段代码怎么执行都不会报错)

sql 复制代码
DROP TABLE IF EXISTS user; 
-- IF EXISTS 表名; 作用:如果表存在就删掉(这段代码怎么执行都不会报错)

create table user
(
    id int(4) primary key auto_increment,   -- 主键ID 可以不设置非空,因为主键本来就是非空且唯一
    username varchar(20) not null,  -- 用户名  非空
    password varchar(10) not null   -- 密码   非空
);

5、查看表是否存在

输入:

sql 复制代码
show tables;

6、查看表的定义

输入:

sql 复制代码
desc user;

7、插入数据(我们在这里随便写一下)

输入:

javascript 复制代码
insert into user values(0,"tom","12");

8、查看数据

输入:

sql 复制代码
select * from user;

到这里我们就完成一个创建数据库、建表的过程了,我们看一下运行效果:

注意事项:所有的符号都是英文编写。

创建表时约束条件

约束是建表时给某一列增加的强制数据规则

创建表的语法结构

javascript 复制代码
CREATE TABLE <表名> (
   <列名>  <数据类型>  [列级完整性约束定义] 
   {, <列名>  <数据类型>  [列级完整性约束定义]
                 ... } 
   [, 表级完整性约束定义 ]
);

约束类型

根据上表student表结构写一下约束类型:

主键:PRIMARY KEY一个表最多只能设置一个,是表每行的唯一性标识,非空且唯一

外键:FOREIGN KEY是别的表中的主键,两个表有依赖关系),被别的表依赖的表称为父表,依赖别的表的表成为子表,子表数据增加或修改时,数据必须在父表中存在。父表中数据删除或修改时,数据没有被子表使用

非空:NOT NULL(不允许为空)

唯一性:UNIQUE KEY(如果某列定义加了这个约束,那后续数据不允许出现重复,唯一约束允许NULL值的存在),比如说手机号。每个表最好都有主键约束

检查约束:CHECK(条件表达式),用于限制列的取值范围或规则,例如限制性别只能是男或女

自增:auto_increment常用在主键上,如果ID有1、2、3、4、5,删掉了3号,那么会变成:1、2、4、5)

【例一】用student表进行举例

|----------|------|-----|-----|------|--------|
| sno | name | sex | age | dep | uid |
| 09512101 | 张三 | 男 | 18 | 计算机系 | 000001 |
| 09512102 | 李四 | 男 | 19 | 计算机系 | 000002 |
| 09512103 | 王五 | 女 | 20 | 计算机系 | 000003 |
[student 表]

|------|-------------|---------|-------------------|
| 列名 | 数据类型 | 约束 | 说明 |
| sno | CHAR(8) | 主键 | 每个学生学号应非空且唯一 |
| name | CHAR(10) | 非空 | 姓名信息必须要保存 |
| sex | CHAR(2) | 检查 | 取值"男"或"女" |
| age | INT | 检查 | 小于10,大于60的学生年龄无意义 |
| dep | VARCHAR(26) | default | 默认值为"计算机系" |
| uid | CHAR(18) | 唯一值 | 每个人的身份证号是唯一 |
[student 表结构]

创建 student 表

javascript 复制代码
CREATE TABLE student(
    sno CHAR(8) PRIMARY KEY ,
    name CHAR(10) NOT NULL ,
    sex CHAR(2) CHECK(sex ='男' OR sex ='女'),
    age INT CHECK(age >=10 AND age <=60),
    dep VARCHAR(26) default '计算机系',
    uid CHAR(18) UNIQUE
);

【例二】用stulesson表进行举例

|-----|-------|-------|
| sno | cname | score |
| 001 | 数据库原理 | 90 |
| 003 | 数据库原理 | 80 |
| 003 | C语言 | 75 |
[stulesson 选课表]

|-------|----------|----|-----------|
| 列表 | 数据类型 | 约束 | 说明 |
| sno | CHAR(8) | | |
| cname | CHAR(50) | 非空 | 姓名信息必须要保存 |
| score | INT | 检查 | 在0~100之间 |
[stulesson 选课表结构]

创建 stulesson 表

sql 复制代码
CREATE TABLE stulesson(
    sno CHAR(8),
    cname CHAR(50) NOT NULL,
    score INT CHECK(score >=0 AND score <=100),
    PRIMARY KEY(sno, cname), 
    FOREIGN KEY(sno) REFERENCES student(sno)
)

注释:

<表名>:所要定义的基本表的名字

<列名>:组成该表的各个属性(列)

<列级完整性约束条件>:涉及相应属性列的完整性约束条件

<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

其中 PRIMARY KEY 为主码约束,CHECK为检查约束

其他SQL语句

删除数据库:

drop database 数据库名

删除表:

drop table 表名

在表的末尾添加一个列:

Alter table 表名 add 列名 数据类型 (约束条件);

在表的开头添加一个列:

Alter table 表名 add 列名 数据类型 (约束条件) first;

MySQL命令行导入导出数据库

想直接导入sql文件或者写好后想导出数据库怎么办

MySQL命令行导入导出数据库

char 和 varchar 区别

`char`和`varchar`都是SQL数据库中用于存储字符串数据类型的字段类型,它们的主要区别在于存储方式、空间效率以及长度处理:

1. 存储方式:

char:定长字符串类型,每个`char`类型的字段会占用预定义的固定长度的空间,不论实际存储的字符串长度是否达到预设长度。例如,如果你声明一个`char(10)`字段,那么即使你只存储了3个字符,也会占用10个字符的存储空间,并用空格或其他空白字符填充剩余的7个字符位置。

varchar:变长字符串类型,根据实际存储的字符数动态分配存储空间。例如,对于`varchar(10)`,若存储3个字符,只会占用包含3个字符及必要结束标记的存储空间。

2. 空间效率:

char:当数据长度往往固定且较小,或者经常填充到预定义长度时,空间利用率较高,但存储短字符串时可能会造成空间浪费。

varchar:更适合存储长度变化较大的字符串,能有效节省空间,特别是对于大多数字符串都不满预定义长度的情况下。

3. 性能:

char:因为长度固定,在数据存储和检索上可能会更快,特别是在索引密集型操作中,因为存储结构更加紧凑和可预测。

varchar:数据长度不固定,尽管现代数据库系统对此做了优化,但在某些条件下,尤其是在索引较大且字符串长度变化范围大的情况下,其性能可能略低于char。

4. 适用场景:

char:适用于存储固定长度的数据,如身份证号码、ID、邮政编码等,或者是长度一定且不需要额外空间的场景。

varchar:适用于存储长度可变的数据,如姓名、地址、评论等,这些数据长度可能有很大差异。

需要注意的是,不同数据库系统对char和varchar的具体实现可能会有所不同,包括最大长度限制、是否填充空格、存储效率等方面。在MySQL等数据库中,varchar的最大长度可达65535字节,而在Oracle数据库中,varchar2是varchar的增强版本,通常用于替代varchar。

相关推荐
jiayou644 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北5 小时前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤1 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12022 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
加号33 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐3 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再3 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip