数据库如何建表

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。

相关推荐
砚边数影9 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt10 小时前
Djiango配置Celery
数据库·sqlite
云小逸10 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
·云扬·10 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
肉包_51110 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总11 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
此刻你12 小时前
常用的 SQL 语句
数据库·sql·oracle
それども12 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·12 小时前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb
天空属于哈夫克313 小时前
Java 版:利用外部群 API 实现自动“技术开课”倒计时提醒
数据库·python·mysql