MySQL数据库创建与维护数据表

目录

数据表

命名

结构

数据类型

SQL语法格式

约定符号

书写准则

创建数据表

查看表结构

完整性约束条件

列级

表级

查看表详细结构

查看当前库里的全部表

实验环境

修改表结构

复制表

删除表

插入记录

修改记录

删除记录

注意事项


数据表

  • 命名

    1. 可采用字母自然数,' _ ' 和 ' $ ' 两个符号来命名
    2. 最长为64个字符,但长度会受操作系统限制
    3. 大小写敏感,如果文件系统对大小写敏感(UNIX系统),则test和TEST指的是两张表,如果文件系统对大小写不敏感(Windows系统),则test和TEST指的是一张表,本文采用的环境是Windows系统,即大小写不敏感
  • 结构

    • 行,专业术语:记录
    • 列,专业术语:字段
      • 字段名
        • 最长为64个字符
        • 可采用中文英文数字、' _ ' 、' # ' 、' $ ' 和 ' @ ' 来命名
        • 同一个表中,字段名不可以重复
      • 字段长度和小数位数
        • 长度,字段所能容纳的最大数据量,不同数据类型的长度对字段含义有些不同
          • 字符串类型,长度指字段能容纳的字符数目
          • 整数类型,长度指字段显示宽度(能够显示的数据的最大长度,与ZEROFILL关键字一起使用才有效果,如int(3),插入值为1,会显示为001)
          • 二进制类型,长度指字段所能容纳的最大字节数(一个字节8位)
          • 浮点数和定点数类型,长度指字段里数据总长度:精度,精度指数据中数字的总位数小数位数,指数据里小数点右侧的位数;如float(4,1),表示该字段里数据总位数为4,小数位数为1,即此数据整数位为3位,小数位1位
      • 字段属性
        • 默认值,当用户没有插入值时自动使用默认值
        • 自动增长列,使用AUTO_INCREMENT关键字指定,添加一个新记录到表中时,该列会自动赋予新值(默认+1递增),初值默认为1
        • 空值允许,创表时默认为允许空值(NULL关键字),修改成不允许空值(NOT NULL)后该字段必须输入数据


数据类型

类别数据类型存储长度数值范围用途
字符串char(n)n字节

1~2的8次方-1

定长字符串,若输入数据长度超过n,则超出部分会被截断,反之,不足部分用空格填充,即定长字符串无论插入何种数据都会占用n个字符的空间,n的取值为1-8000
varchar(n)值的长度+10~2的16次方-1

变长字符串,字节数随输入数据长度变化,占用空间为输入值的长度+1,最大不超过n,“+1”表额外占用空间记录字段数据长度;

n的取值为1-8000

tinytext值的长度+2字节0~2的8次方-1短文本字符串
text值的长度+2字节0~2的16次方-1长文本数据
mediumtext值的长度+3字节0~2的24次方-1中等长度文本数据
longtext值的长度+4字节0~2的32次方-1极大长度文本数据
enum1字节或2字节枚举,该类型的列只可以容纳所列值之一或空值
set1~4字节或8字节

1-8成员的集合占1字节

9-16成员的集合占2字节

17-24成员的集合占3字节

25-32成员的集合占4字节

33-64成员的集合占8字节

指定列中的值必须来自集合中的某个值,如set('a','b','c','d'),插入值只能从abcd里选
整数tinyint(n)1字节

有符号:-2的7次方~2的7次方-1

无符号:0~2的8次方

默认显示宽度n为4
smallint(n)2字节

有符号:-2的15次方~2的15次方-1

无符号:0~2的16次方

默认显示宽度n为6
mediumint(n)3字节

有符号:-2的23次方~2的23次方-1

无符号:0~2的24次方

默认显示宽度n为9
int(n)4字节

有符号:-2的31次方~2的31次方-1

无符号:0~2的32次方

默认显示宽度n为11
bigint(n)8字节

有符号:-2的63次方~2的63次方-1

无符号:0~2的64次方

默认显示宽度n为20
类别数据类型存储长度数值范围用途
二进制bit(n)n位二进制n最大值为64,默认为1位字段类型,若分配的值长度小于n位,就在值的左边用0填充
binary(n)n字节定长二进制字符串,若输入数据的长度超过了n规定的值,则超出部分会被截断,反之会用数字0填充,n的取值为1-8000
varbinary(n)值的长度+4字节变长二进制字符串,占用空间为输入值的长度+4字节,n的取值为1-8000
tinyblob2的8次方-1字节主要存储图片、音频等信息
blob2的16次方-1字节
mediumblob2的24次方-1字节
longblob2的32次方-1字节

日期

时间

year1字节1901~2155存储年份,格式YYYY
date3字节1000-01-01~9999-12-31

存储日期

格式YYYY-MM--DD

time3字节-838:59:59~838:59:59

存储时间

格式HH:MM:SS

timestamp4字节1970-01-01 00:00:01 UTC~2038-01-19 23:59:59 UTC

存储日期和UTC时间

格式

YYYY-MM-DD HH:MM:SS

datetime8字节1000-01-01 00:00:00~9999-12-31 23:59:59

存储日期和时间

格式

YYYY-MM-DD HH:MM:SS

浮点数定点数float(n[,m])4字节单精度浮点数类型,若不指定精度,则默认保存实际精度
double(n[,m])8字节双精度浮点类型,若不指定精度,则默认保存实际精度;该数据类型还可以写成real(n[,m])
decimal(n[,m])

若n>m,则为n+2字节

否则为m+2字节

定点数类型,默认的精度为10,小数位为0;该数据类型还可以写成numeric(n[,m]);如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理;float和double在四舍五入时不会报错,而decimal会有警告


SQL语法格式

约定符号

  1. 尖括号 “ < > ” 中的内容为必选项
  2. 中括号 “ [ ] ” 中的内容为任选项
  3.  “ [,...] ” 意思是 “等等” ,即前一项中的内容可以重复
  4. 大括号 “ { } ” 与竖线 “ | ” 意思是此处为选择项,在所列出的各项中仅需选择一项
  5. 字段、表、视图之类的分隔符为逗号 “ , ” ,字符串常量定界符为单引号 ' 

书写准则

  1. 大小写不敏感,通常大写的内容是为了提高阅读性(关键字)
  2. 一条句子可以写成单行或多行,习惯每个子句占用一行
  3. 关键字不能在行与行之间分开,比如NULL不能打成NU(按下回车)LL
  4. 语句结束符为分号 “ ; ” ,分号必须放在最后面

创建数据表

语句格式:

CREATE TABLE <表名>

( <字段1> <数据类型1> [ <列级完整性约束条件1> ]

[ , <字段2> <数据类型2> [ <列级完整性约束条件>] ] [,...]

[ , <表级完整性约束条件1> ]

[ , <表级完整性约束条件2> ] [,...]

) ;

查看表结构

语句格式:

DESCRIBE <表名>

DESCRIBE可以简写成DESC

该语句可以查看表的字段信息,包括字段名,是否为主键,是否有默认值,是否允许空值等

完整性约束条件

  • 列级

  1. PRIMARY KEY:指定字段为主键
  2. NULL/NOT NULL:指定字段允许为空值/不允许为空值,如果没有指定约束条件,默认NULL
  3. UNIQUE:指定字段取值唯一,每一行在指定的列取值不能重复
  4. DEFAULT <默认值>:指定字段默认值
  5. AUTO_INCREMENT:指定字段的值自动增加,即自动增长列
  6. CHECK<(条件表达式)>:校验输入值,拒绝不满足条件的值被输入记录中
  • 表级

完整性约束条件要在创表时创建

字段名清单表示可为一个或多个字段名,下方外键部分字段名清单要相同

PRIMARY KEY:定义主键约束

语句格式:

CONSTRAINT <约束名> PRIMARY KEY [CLUSTERED | NONCLUSTERED]

(<字段名清单>) ;

CLUSTERED和NONCLUSTERED:是表示为PRIMARY KEY或UNIQUE约束创建聚集或非聚集索引的关键字。PRIMARY KEY约束默认为CLUSTERED,UNIQUE约束默认为

NONCLUSTERED。


FOREIGN KEY:定义外键约束

语句格式:

CONSTRAINT <约束名> FOREIGN KEY <字段名清单> 

REFERENCES <被参照表(字段名清单)> ;


UNIQUE:可作列级完整性约束也可作表级完整性约束

语句格式:

CONSTRAINT <约束名> UNIQUE (<字段名>) ;

创建st表
CREATE TABLE st(
sno char(10) PRIMARY KEY UNIQUE,                                --学号为主键
sname char(8),                                                  --姓名
ssex char(2) DEFAULT '男',                                      --性别,默认男
sbirthday date DEFAULT '1992-01-01',                            --出生日期,默认92年元旦
sid varchar(18),                                                --身份证号
saddress varchar(30),                                           --家庭住址
spostcode char(6),                                              --邮政编码
sphone char(18) DEFAULT '不详',                                 --电话,默认不详
spstatus varchar(20),                                           --政治面貌
sfloor char(10),                                                --楼号
sroomno char(5),                                                --房号
sbedno char(2),                                                 --床号
tuixue tinyint(1) NOT NULL DEFAULT 0,                           --是否退学,不允许空值,默认0
xiuxue tinyint(1) NOT NULL DEFAULT 0,                           --是否休学,不允许空值,默认0
smemo text,                                                     --简历
sphoto blob,                                                    --照片
classno char(8)                                                 --班级
);

查看st表结构
DESCRIBE st;
+-----------+-------------+------+-----+------------+-------+
| Field     | Type        | Null | Key | Default    | Extra |
+-----------+-------------+------+-----+------------+-------+
| sno       | char(10)    | NO   | PRI | NULL       |       |
| sname     | char(8)     | YES  |     | NULL       |       |
| ssex      | char(2)     | YES  |     | 男         |       |
| sbirthday | date        | YES  |     | 1992-01-01 |       |
| sid       | varchar(18) | YES  |     | NULL       |       |
| saddress  | varchar(30) | YES  |     | NULL       |       |
| spostcode | char(6)     | YES  |     | NULL       |       |
| sphone    | char(18)    | YES  |     | 不详       |       |
| spstatus  | varchar(20) | YES  |     | NULL       |       |
| sfloor    | char(10)    | YES  |     | NULL       |       |
| sroomno   | char(5)     | YES  |     | NULL       |       |
| sbedno    | char(2)     | YES  |     | NULL       |       |
| tuixue    | tinyint(1)  | NO   |     | 0          |       |
| xiuxue    | tinyint(1)  | NO   |     | 0          |       |
| smemo     | text        | YES  |     | NULL       |       |
| sphoto    | blob        | YES  |     | NULL       |       |
| classno   | char(8)     | YES  |     | NULL       |       |
+-----------+-------------+------+-----+------------+-------+
16 rows in set (0.00 sec)


创建ce表
CREATE TABLE ce(                                                
cno char(3) NOT NULL,                                           --课程号,不允许空值
cname varchar(20) NOT NULL,                                     --课名,不允许空值
cterm tinyint NOT NULL,                                         --学期,不允许空值
CONSTRAINT C1 PRIMARY KEY(cno,cterm)                            --课程号+学期为主键
);

查看ce表结构
DESC ce;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| cno   | char(3)     | NO   | PRI | NULL    |       |
| cname | varchar(20) | NO   |     | NULL    |       |
| cterm | tinyint     | NO   | PRI | NULL    |       |
+-------+-------------+------+-----+---------+-------+

                                                               
创建sc表                                                        
CREATE TABLE sc(
sno char(10) NOT NULL,                                          --学号,不允许空值
cno char(3) NOT NULL,                                           --课程号,不允许空值
degree decimal(4,1),                                            --成绩
cterm tinyint NOT NULL,                                         --学期,不允许空值
CONSTRAINT S1 PRIMARY KEY(sno,cno,cterm),                       --学号+课程号+学期为主键
CONSTRAINT S2 CHECK(degree>=0 and degree<=100),                 --成绩约束条件
CONSTRAINT S3 FOREIGN KEY(sno) REFERENCES st(sno),              --学号为外键
CONSTRAINT S4 FOREIGN KEY(cno,cterm) REFERENCES ce(cno,cterm)   --课程号+学期号为外键
);

查看sc表结构
DESC sc;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| sno    | char(10)     | NO   | PRI | NULL    |       |
| cno    | char(3)      | NO   | PRI | NULL    |       |
| degree | decimal(4,1) | YES  |     | NULL    |       |
| cterm  | tinyint      | NO   | PRI | NULL    |       |
+--------+--------------+------+-----+---------+-------+

查看表详细结构

语句格式:

SHOW CREATE TABLE <表名> [\G] ;

该语句可以查看表名、创建该表的CREATE TABLE语句、存储引擎、字符集等信息

不加参数的情况下命令行会显得十分混乱

推荐加上“\G”参数

下面是对比(比了个寂寞,去命令行敲一遍看看比较直观)

mysql> show create table sc;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sc    | CREATE TABLE `sc` (
  `sno` char(10) NOT NULL,
  `cno` char(3) NOT NULL,
  `degree` decimal(4,1) DEFAULT NULL,
  `cterm` tinyint NOT NULL,
  PRIMARY KEY (`sno`,`cno`,`cterm`),
  KEY `S4` (`cno`,`cterm`),
  CONSTRAINT `S3` FOREIGN KEY (`sno`) REFERENCES `st` (`sno`),
  CONSTRAINT `S4` FOREIGN KEY (`cno`, `cterm`) REFERENCES `ce` (`cno`, `cterm`),
  CONSTRAINT `S2` CHECK (((`degree` >= 0) and (`degree` <= 100)))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)



mysql> show create table sc\G
*************************** 1. row ***************************
       Table: sc
Create Table: CREATE TABLE `sc` (
  `sno` char(10) NOT NULL,
  `cno` char(3) NOT NULL,
  `degree` decimal(4,1) DEFAULT NULL,
  `cterm` tinyint NOT NULL,
  PRIMARY KEY (`sno`,`cno`,`cterm`),
  KEY `S4` (`cno`,`cterm`),
  CONSTRAINT `S3` FOREIGN KEY (`sno`) REFERENCES `st` (`sno`),
  CONSTRAINT `S4` FOREIGN KEY (`cno`, `cterm`) REFERENCES `ce` (`cno`, `cterm`),
  CONSTRAINT `S2` CHECK (((`degree` >= 0) and (`degree` <= 100)))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

查看当前库里的全部表

语句格式:

SHOW  TABLES;

mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+
3 rows in set (0.00 sec)

实验环境

本文采用的数据表结构如下

--学生表
mysql> desc student;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| sno       | varchar(10) | NO   | PRI |         |       |
| sname     | varchar(8)  | YES  |     | NULL    |       |
| ssex      | varchar(2)  | YES  |     | NULL    |       |
| sphone    | varchar(20) | YES  |     | NULL    |       |
| saddress  | longtext    | YES  |     | NULL    |       |
| sbirthday | datetime    | YES  |     | NULL    |       |
| classno   | varchar(8)  | YES  |     | NULL    |       |
| sphoto    | longblob    | YES  |     | NULL    |       |
| QQ        | varchar(20) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

--班级表
mysql> desc class;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| classno    | varchar(8)  | NO   | PRI |         |       |
| classname  | varchar(16) | YES  |     | NULL    |       |
| speciality | longtext    | YES  |     | NULL    |       |
| inyear     | varchar(4)  | YES  |     | NULL    |       |
| number     | int         | YES  |     | NULL    |       |
| header     | varchar(8)  | YES  |     | NULL    |       |
| deptno     | varchar(3)  | YES  |     | NULL    |       |
| monitor    | varchar(8)  | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

--课程表
mysql> desc course;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| cno   | varchar(4) | NO   | PRI |         |       |
| cname | longtext   | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

--成绩表
mysql> desc sc;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| sno    | varchar(10)   | NO   | PRI |         |       |
| cno    | varchar(4)    | NO   | PRI |         |       |
| degree | decimal(28,0) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

--统计后的成绩表
mysql> desc s_grade;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| sno       | char(12)     | NO   | PRI | NULL    |       |
| avg_grade | decimal(4,1) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)




--教师表
mysql> desc teacher;
+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| Tno       | varchar(3) | NO   | PRI |         |       |
| Tname     | longtext   | YES  |     | NULL    |       |
| Tsex      | varchar(2) | YES  |     | NULL    |       |
| Tbirthday | datetime   | YES  |     | NULL    |       |
| deptno    | varchar(3) | YES  |     | NULL    |       |
+-----------+------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

--上课分工表
mysql> desc teaching;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| cno   | varchar(4) | YES  |     | NULL    |       |
| tno   | varchar(3) | YES  |     | NULL    |       |
| cterm | tinyint    | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

--部门表
mysql> desc department;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| deptno     | varchar(3)  | NO   | PRI |         |       |
| deptname   | varchar(20) | YES  |     | NULL    |       |
| deptheader | varchar(8)  | YES  |     | NULL    |       |
| office     | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


--数据库内的s_grade表需要手动创建,该表没有任何表级完整性约束条件

此数据库来源为“MySQL数据库原理及应用(第2版)(微课版)教学资源”,由于这本书的编写团队二五仔成分略多,出现奇奇怪怪的题目请谅解 ,下方为资源链接,本文使用的数据库图形化管理工具为Navicat(付费软件,只能试用14天)

数据库备份文件链接

Navicat下载链接

gradembak.psc为本次使用的数据库,登录后才能下载

修改表结构

语句格式:

ALTER TABLE <表名>

{

[ ADD <新字段名> <数据类型> [ <列级完整性约束条件> ] [ FIRST | AFTER 已存在字段名 ] ]

| [ ADD [ CONSTRAINT 约束条件名 ] <表级完整性约束条件> ]

| [ MODIFY <字段名1> <新数据类型> [ <列级完整性约束条件>] [ FIRST | AFTER 字段名2 ] ]

| [ CHANGE <旧字段名> [ <新字段名> ] <新数据类型> ]

| [ DROP <字段名> | <完整性约束名> ]

| [ RENAME [ TO ] <新表名> ]

| [ ENGINE=<更改后的存储引擎名> ]

} ;

参数说明

  • ADD关键字,为指定表添加一个新字段,并指定数据类型,同时可以选择是否添加列级完整性约束条件;FIRST和AFTER关键字分别对应:“将新添加的字段设置为表的第一个字段”和“将新添加的字段放至指定字段后”,如果没有选用[ FIRST | AFTER]参数,则默认将新添加字段放至数据表最后列。添加表级完整性约束条件,“ <表级完整性约束条件> ” 语句格式,在上方完整性约束条件已写明
  • MODIFY关键字,修改指定表中字段的数据类型或完整性约束条件;FIRST和AFTER参数作用同上;如果是要为字段添加完整性约束条件,可将数据类型设为和原来一样,一定不能跳过数据类型
  • CHANGE关键字,重命名指定表中的字段和重新指定数据类型;同MODIFY,如果仅仅是改字段名,要将数据类型设置为跟原来一样
  • DROP关键字,删除指定表中的字段或完整性约束条件
  • RENAME关键字,修改指定表的表名
  • ENGINE关键字,修改指定表的存储引擎
-------------
--修改表结构--
-------------

/*
ADD
加字段,列级或表级完整性约束条件
*/

--在student表中添加一个数据类型为char,长度为10的字段dept,新字段在ssex后面
ALTER TABLE student ADD dept char(10) AFTER ssex;

--向student表中增加“入学时间”列,数据类型为日期时间类型,并设为student表第一个字段
ALTER TABLE student ADD 入学时间 datetime FIRST;

--给s_grade表添加自动增长列rowID,数据类型为int,显示宽度三,启用ZEROFILL,设为s_grade表第一个字段
ALTER TABLE s_grade ADD rowID int(3) ZEROFILL PRIMARY KEY AUTO_INCREMENT FIRST;

--将s_grade表的sno字段设为主键
ALTER TABLE s_grade ADD CONSTRAINT A1 PRIMARY KEY(sno);

--给sc表添加关联course表的外键
ALTER TABLE sc ADD CONSTRAINT C1 FOREIGN KEY(cno) REFERENCES course(cno);

--给s_grade表添加UNIQUE完整性约束条件
ALTER TABLE s_grade ADD CONSTRAINT S1 UNIQUE(avg_grade);


/*
#MODIFY
修改字段数据类型或列级完整性约束条件
*/

--将student表中的QQ数据类型修改为char,长度为20
ALTER TABLE student MODIFY QQ char(20);

--将s_grade表中的avg_grade设置不允许空值
ALTER TABLE s_grade MODIFY avg_grade decimal(4,1) NOT NULL;

--给teaching表中的cterm字段增加zerofill约束条件
ALTER TABLE teaching MODIFY cterm tinyint ZEROFILL;


/*
CHANGE
改名时一定要加上数据类型
*/

--将student表中的sbirthday字段改名为sbirth
ALTER TABLE student CHANGE sbirthday sbirth date;


/*
DROP
删除主键可直接指定PRIMARY KEY
删除主键时若主键约束为表级约束,则无法使用指定CONSTRAINT和约束名的方法删除
删除外键时可以直接指定FOREIGN KEY和其约束名
或者直接指定CONSTRAINT和约束名
*/

--将student表中的sphoto字段删除
ALTER TABLE student DROP sphoto;

--将s_grade表中的主键删除
ALTER TABLE s_grade DROP PRIMARY KEY;

--将sc表中的外键删除
ALTER TABLE sc DROP FOREIGN KEY C1;

--将sc表中的完整性约束条件A2删除
ALTER TABLE sc DROP CONSTRAINT A2;


/*
RENAME
*/

--将sc表名改为score
ALTER TABLE sc RENAME score;


/*
ENGINE
*/

--将student表的存储引擎改为MyISAM
ALTER TABLE student ENGINE=MyISAM;

复制表

语句格式:

CREATE TABLE <新表名> <查询语句>

该查询语句必须具备表的结构,比如 SELECT CURDATE();” 这种虽然有结果但不能用来复制

查询语句可以无限套娃,参考嵌套查询(只要能出结果就能复制)

----------
--复制表--
----------

--复制student表到st表
CREATE TABLE st SELECT * FROM student;

--仅复制sc的表结构到degree表
CREATE TABLE degree SELECT * FROM sc WHERE 1=0;

删除表

语句格式:

DROP TABLE [ IF EXISTS ] <表名1> [,表名2 ] [,...]

可删除一个或多个没被其他表关联的表(当然如果被关联的表同时被删也可以成功)

IF EXISTS参数用于判断删除前的表是否存在,可以避免因为要删除的表不存在而报错

----------
--删除表--
----------

--删除sc表
DROP TABLE sc;

--删除teaching表
DROP TABLE IF EXISTS teaching;

--删除student,course,teacher三个表
DROP TABLE student,course,teacher;

插入记录

语句格式:

插入单条记录

INSERT [ INTO ] <表名> [ (<字段名清单>) ] VALUES (<常量清单>);

若使用字段名清单,则常量清单中的元素为字段名清单中各属性的对应值(根据语句中的位置对应),写入字段名清单的时候,不允许为空值的字段必须在字段名清单中

若不使用字段名清单,则按常量清单顺序为每个属性列复制,即每个属性列上都应该有值

INTO可写可不写(我这么懒的一般不写)


插入多条记录

INSERT [ INTO ] <表名> [ (<字段名清单>) ] VALUES (<常量清单1>),(<常量清单2>),...,(<常量清单N>);


插入子查询结果

INSERT [ INTO ] <表名> [ (字段名清单) ] <子查询语句>;

-----------
--插入记录--
-----------

/*
插入单行记录
*/

--向student表中添加学号为2005010203,姓名为张静,性别为女,手机号码为01145141919,地址为蚌埠市蚌埠住协会,出生日期为1981年3月21日,班级为20070101的记录
INSERT student VALUES ('2005010203','张静','女',01145141919,'蚌埠市蚌埠住协会',19810321,'20070101',NULL,NULL);


/*
插入指定字段
但如果没有被指定的字段有NOT NULL约束则会插入失败
要么把NOT NULL约束的字段一起指定,要么把NOT NULL约束删了
*/

--向student表中的sno和sname列插入学号为2005010104,姓名为张三的记录
INSERT student(sno,sname) VALUES ('2005010104','张三');


/*
插入查询结果
*/

--把平均分大于80分的学生的学号和平均成绩存入另一个表s_grade中
INSERT s_grade(sno,avg_grade) SELECT sno,AVG(degree) FROM sc GROUP BY sno HAVING AVG(degree)>80;


/*
插入多行记录
*/

--向sc表中添加学号为2005020202的三条记录
INSERT SC VALUES ('2005020202','C01',78),('2005020202','C02',91),('2005020202','C03',83);

修改记录

语句格式:

UPDATE <表名> SET <字段名1>=<数据1> [,<字段名2>=<数据2>] [,...]

[ <WHERE 条件表达式> ];

若有WHERE字句,修改表名的字段里符合条件表达式的数据为指定数据

若没有WHERE字句,则修改该列全部数据为指定数据

修改多个字段要用逗号 “ , ” 分隔

-----------
--修改记录--
-----------

--将student表中李扬同学的性别修改为女
UPDATE student SET ssex='女' WHERE sname='李扬';

--将sc表中不及格的成绩修改为60分
UPDATE sc SET degree=60 WHERE degree<60;

--修改sc表中专业名字以计算机为开头的同学的成绩为0
UPDATE sc SET degree=0 WHERE sno IN (SELECT sno FROM student WHERE classno IN (SELECT classno FROM class WHERE speciality LIKE '计算机%' ));

删除记录

语句格式:

DELETE FROM <表名> [ <WHERE 条件表达式> ];

若有WHERE字句,则删除所有符合条件表达式的记录

若没有WHERE字句,则删除表中所有记录

-----------
--删除记录--
-----------

--删除学号为2005030301的学生记录
DELETE FROM student WHERE sno='2005030331';

--删除sc表的所有内容
DELETE FROM sc;

--删除sc表中专业名字带有游戏的同学的信息
DELETE FROM sc WHERE sno IN (SELECT sno FROM student WHERE classno IN (SELECT classno FROM class WHERE speciality LIKE '%游戏%' ));

上一篇入口:

        MySQL数据库前置工作

下一篇入口:

        MySQL数据库查询数据表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值