数据库如何建表

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。

相关推荐
0xDevNull4 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴5 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存