二级MySQL基础知识(二) 回顾上篇查看所有SQL命令,MySQL命名规则,创建表定义字段Constraint约束名(索引名)

提示:二级MySQL常用数据库db_school,常用表tb_student。

文章目录


回顾上篇

在Win11命令提示符中登录mysql> 输入问号?显示的MySQL命令是可以类似DOS命令一样结尾不加分号,直接回车就能执行命令,这些命令仅适用于CMD命令提示符,并不能用在 MySQL Workbench 或 Navicat 数据库管理软件。
在命令提示符中使用SQL命令,还是必须在每一段SQL语句的结尾加上英文分号或\G,然后回车执行SQL语句。


一、 使用MySQL帮助目录命令查看所有SQL命令

1. 在Win11命令提示符中登录mysql> 输入命令: help contents

查看MySQL数据库所有SQL命令的目录:

mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
   Account Management
   Administration
   Compound Statements
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Help Metadata
   Language Structure
   Plugins
   Table Maintenance
   Transactions
   User-Defined Functions
   Utility

继续使用help命令可以查看目录中常用的SQL命令。

Account Management (DCL数据控制语言,账户权限管理)

输入命令:help account management
包含以下SQL命令:
DROP USER 删除用户
GRANT 设置用户权限
RENAME USER 给用户重命名
REVOKE 撤销用户权限
SET PASSWORD 设置用户密码

Administration 管理查看数据库结构

输入命令:help administration
包含以下等更多命令:
SHOW CREATE DATABASE
SHOW CREATE EVENT
SHOW CREATE FUNCTION
SHOW CREATE PROCEDURE
SHOW CREATE TABLE
SHOW CREATE TRIGGER
SHOW CREATE VIEW

输入命令:help show
查看包含"show"等更多命令:
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name

Data Definition (DDL数据定义语言)

输入命令:help data definition
查看包含修改、创建、删除等数据定义命令:
ALTER DATABASE、CREATE DATABASE、DROP DATABASE,等等

Data Manipulation (DML数据操作语言)

包含删除、插入、连接、替换、查询、更新数据记录等命令:
DELETE、INSERT、JOIN、REPLACE、SELECT、UPDATE,等等

2. 输入help create 查看创建命令和命名前缀

其中创建命令如下:

SQL命令含义带前缀小写下划线命名
CREATE DATABASE创建数据库db_数据库名
CREATE EVENT创建事件event_事件名
CREATE FUNCTION创建函数func_函数名
CREATE INDEX创建索引index_索引名
CREATE PROCEDURE创建过程proc_过程名
CREATE SERVER创建服务器server_服务器名
CREATE TABLE创建表tbl_表名,常用 tb_表名
CREATE TABLESPACE创建表空间
CREATE TRIGGER创建触发器trigger_触发器名
CREATE VIEW创建视图view_视图名

二、MySQL数据库命名规则

命名规则1:不区分英文大小写,以英文字母开头,使用字母、数字和下划线,查看数据库名和表名只显示小写英文。

例如:在同一个数据库里创建2张表,tb_student和 TB_STUDENT 表名是相同的,当tb_student 已经存在时,创建第2张表 TB_STUDENT 会提示以下错误,不能创建。

ERROR 1050 (42S01): Table ‘tb_student’ already exists

命名规则2:创建字段名或约束名也是不区分大小写,但查看表结构字段名和约束名会显示大小写!

因此选择统一的命名法尤其重要,有利于代码的可读性和可维护性。
建议除了字段名命名,其余命名统一使用带前缀的小写英文下划线命名法。

1. MySQL数据库名和表名:小写英文下划线命名法,每个单词用下划线连接,使用前缀。

首字母必须是英文,建议使用前缀表示类型,每个单词之间用下划线连接,例如:db_school, tb_student, tb_class, tb,course, tb_score。

2. 字段名(列名)可以有6种命名法

(1) 和数据库名一样用小写英文下划线命名法;

例如:student_no, student_name

(2) 大写英文下划线命名法,或大写英文简称;

例如:STUDENT_NO, STUDENT_NAME, SNO, SNAME

(3) 小驼峰命名法,首字母小写,后面每个单词首字母大写(二级MySQL教程使用)

例如:studentNo,studentName

(4) 大驼峰命名法,首字母大写,后面每个单词首字母大写;

例如:StudentNo,StudentName

(5) 全中文命名法;

例如:学号,姓名,班级编号,班级名称

(6) 大驼峰下划线命名法,每个单词首字母大写,每个单词用下划线连接。

例如:Student_No, Student_Name

三、创建表

help create table 查看创建表的语法格式

mysql> help create table
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

Or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    select_statement

Or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

create_definition:
    col_name column_definition
  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
      [index_option] ...
  | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
      [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (index_col_name,...) reference_definition
  | CHECK (expr)

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      [COMMENT 'string']
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [STORAGE {DISK|MEMORY|DEFAULT}]
      [reference_definition]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_表名
(
字段名1 数据类型 约束 (列级约束),
字段名2 数据类型 约束,
字段名3 数据类型 约束,
字段名4 数据类型 约束,
CONSTRAINT 表级约束名(索引名),
CHECK 约束(expr字段名=取值范围表达式)
) 数据库引擎类型 设置字符集(可省略);

注意:关键字不区分大小写,但是关键词需要空格分开单词,或用下划线连接

字段约束(列级约束)有7种:写在单个字段后面

NOT NULL 非空约束,只能写在单个字段后出现。
UNIQUE 唯一键约束,也称候选键约束,可以有一个值为空值。一个表可以定义多个字段为唯一键约束。
Primary Key 列级主键约束只能定义1个字段,相当于唯一和非空合体,但是作用不同,not null unique 不等于primary。
列级外键约束省略Foreign Key,直接在字段后写 references 被参照表的表名(主键字段名)
Auto_Increment 自增属性,一个表只能有一个,数据类型只能是整数,要唯一键约束或主键约束搭配使用。
Default ‘默认值’,设置字段的默认值,如果插入数据时没有给字段赋值就显示默认值。
Check 取值范围约束(字段名=取值范围条件表达式)

表级约束 Constraint<设置约束名> 有4种:写在所有字段定义后面

Unique 唯一键约束(1个字段名),没有设置唯一键约束名,系统自动把字段名作为约束名(索引名)
Primary Key 主键约束(1个字段名,或2个字段名的联合主键),无论如何设置,约束名(索引名)都是PRIMARY,所以可以省略设置约束名。
Foreign Key外键约束(字段名)references 被参照表的表名(主键字段名),
Check约束(字段名=取值范围条件表达式,即使设置check约束名,但是当前MySQL5.5查看创建表和查看索引都不显示check约束,所以省略设置约束名。

添加外键约束的规则1:Constraint 后写外键约束名,没有设置外键约束名,系统会自动生成外键约束名。
添加外键约束的规则2: 添加外键约束的表称为参照表,需要reference参照另一个表被参照表的主键,因此被参照表必须已经创建并设置好主键,参照表才能设置外键约束。

因为MySQL5.5版本的数据库引擎默认InnoDB,所以可以省略引擎类型 Engine=InnoDB。
创建表定义内容写在括号里,每一句用逗号分开,最后一句不能有逗号!

1. 创建学生表 tb_student

注意:在CSDN文章中加了反引号的名字显示红色
在文章中 db_school每个反引号前再加上反斜杠就能显示反引号 `db_school`
db_school, db_school,`db_school` 这3种名字意义相同,平时就用简写 db_school

创建数据库db_school
create database db_school character set gb2312;

选择数据库 db_school
use db_school;

创建学生表的SQL语句:
create table tb_student
(
studentNo char(10) not null,
studentName varchar(20) not null,
sex char(2) not null,
birthday date,
native varchar(20),
nation varchar(10) default’汉’,
classNo char(6),
constraint pk_student primary key(studentNo)
);

constraint pk_student primary key(studentNo)可以简写为:primary key(studentNo)
因为无论怎么设置主键约束名,系统都会自动把主键索引名设置成PRIMARY

查看表结构
show create table tb_student;

| tb_student | CREATE TABLE `tb_student` (
  `studentNo` char(10) NOT NULL,
  `studentName` varchar(20) NOT NULL,
  `sex` char(2) NOT NULL,
  `birthday` date DEFAULT NULL,
  `native` varchar(20) DEFAULT NULL,
  `nation` varchar(10) DEFAULT '汉',
  `classNo` char(6) DEFAULT NULL,
  PRIMARY KEY (`studentNo`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

创建中文列名学生表的SQL语句:

设置性别为男或女
create table tb_student_china
(
学号 char(10) primary key,
姓名 varchar(20) not null,
性别 char(2) not null check(性别=‘男’ or ‘女’),
出生日期 date,
籍贯 varchar(20),
名族 varchar(10) default’汉’,
所属班级 char(6)
);

查看表结构,没有显示Check约束,只有主键约束。
show create table tb_student_china;

| tb_student_china | CREATE TABLE `tb_student_china` (
  `学号` char(10) NOT NULL,
  `姓名` varchar(20) NOT NULL,
  `性别` char(2) NOT NULL,
  `出生日期` date DEFAULT NULL,
  `籍贯` varchar(20) DEFAULT NULL,
  `名族` varchar(10) DEFAULT '汉',
  `所属班级` char(6) DEFAULT NULL,
  PRIMARY KEY (`学号`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

2. 创建班级表 tb_class

创建班级表的SQL语句:
create table tb_class
(
classNo char(6) primary key,
className varchar(30) not null,
department varchar(30) not null,
grade smallint,
classNum tinyint,
constraint uq_class unique(className)
);

查看表结构使用\G结束SQL语句,这是命令提示符特有的纵向显示。
表结构显示唯一约束名为 uq_class
show create table tb_class\G

*************************** 1. row ***************************
       Table: tb_class
Create Table: CREATE TABLE `tb_class` (
  `classNo` char(6) NOT NULL,
  `className` varchar(30) NOT NULL,
  `department` varchar(30) NOT NULL,
  `grade` smallint(6) DEFAULT NULL,
  `classNum` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`classNo`),
  UNIQUE KEY `uq_class` (`className`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

查看索引,主键约束的索引名是大写PRIMARY,唯一约束的索引名是uq_class
show index from tb_class;

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table    | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tb_class |          0 | PRIMARY  |            1 | classNo     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tb_class |          0 | uq_class |            1 | className   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

当班级表tb_class主键创建完成后,学生表tb_student就能设置外键。

添加外键约束的SQL语句:

alter table tb_student
add constraint fk_student foreign key(classNo) references tb_class(classNo);

查看学生表 tb_student 的索引,已经有外键索引名fk_student
show index from tb_student;

+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table      | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tb_student |          0 | PRIMARY    |            1 | studentNo   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tb_student |          1 | fk_student |            1 | classNo     | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

3. 创建课程表 tb_course

创建课程表的SQL语句:
create table tb_course
(
courseNo char(6) primary key,
courseName varchar(20) not null,
credit int not null,
courseHour int not null,
term char(2),
priorCourse char(6),
constraint fk_course foreign key(priorCourse) references tb_course(courseNo),
constraint ck_course check( credit=courseHour/16)
);

查看表结构,因为参考表是自己,所以可以设置外键,外键约束名为 fk_course
show create table tb_course\G

*************************** 1. row ***************************
       Table: tb_course
Create Table: CREATE TABLE `tb_course` (
  `courseNo` char(6) NOT NULL,
  `courseName` varchar(20) NOT NULL,
  `credit` int(11) NOT NULL,
  `courseHour` int(11) NOT NULL,
  `term` char(2) DEFAULT NULL,
  `priorCourse` char(6) DEFAULT NULL,
  PRIMARY KEY (`courseNo`),
  KEY `fk_course` (`priorCourse`),
  CONSTRAINT `fk_course` FOREIGN KEY (`priorCourse`) REFERENCES `tb_course` (`courseNo`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

查看索引,外键约束的索引名为 fk_course
show index from tb_course;

+-----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table     | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tb_course |          0 | PRIMARY   |            1 | courseNo    | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tb_course |          1 | fk_course |            1 | priorCourse | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
+-----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

4. 创建成绩表 tb_score

创建成绩表的SQL语句:
create table tb_score
(
studentNo char(10) not null,
courseNo char(6) not null,
score float check( score>=0 and score<=100),
constraint pk_score primary key( studentNo,courseNo),
constraint fk_score1 foreign key(studentNo) references tb_student(studentNo),
constraint fk_score2 foreign key(courseNo) references tb_course(courseNo)
);

查看表结构,主键PRIMARY KEY有2个字段,KEY显示一个外键约束名fk_score2
show create table tb_score\G

*************************** 1. row ***************************
       Table: tb_score
Create Table: CREATE TABLE `tb_score` (
  `studentNo` char(10) NOT NULL,
  `courseNo` char(6) NOT NULL,
  `score` float DEFAULT NULL,
  PRIMARY KEY (`studentNo`,`courseNo`),
  KEY `fk_score2` (`courseNo`),
  CONSTRAINT `fk_score1` FOREIGN KEY (`studentNo`) REFERENCES `tb_student` (`studentNo`),
  CONSTRAINT `fk_score2` FOREIGN KEY (`courseNo`) REFERENCES `tb_course` (`courseNo`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

查看索引,1个主键对应2个字段,只显示一个外键索引名为fk_score2
show index from tb_score;

+----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table    | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tb_score |          0 | PRIMARY   |            1 | studentNo   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tb_score |          0 | PRIMARY   |            2 | courseNo    | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tb_score |          1 | fk_score2 |            1 | courseNo    | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

在phpMyAdmin查看表
在这里插入图片描述

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值