目录
数据表
-
命名
- 可采用字母,自然数,' _ ' 和 ' $ ' 两个符号来命名
- 最长为64个字符,但长度会受操作系统限制
- 大小写敏感,如果文件系统对大小写敏感(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) | 值的长度+1 | 0~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 | 极大长度文本数据 | |
enum | 1字节或2字节 | 枚举,该类型的列只可以容纳所列值之一或空值 | ||
set | 1~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 | ||
tinyblob | 2的8次方-1字节 | 主要存储图片、音频等信息 | ||
blob | 2的16次方-1字节 | |||
mediumblob | 2的24次方-1字节 | |||
longblob | 2的32次方-1字节 | |||
日期 时间 | year | 1字节 | 1901~2155 | 存储年份,格式YYYY |
date | 3字节 | 1000-01-01~9999-12-31 | 存储日期 格式YYYY-MM--DD | |
time | 3字节 | -838:59:59~838:59:59 | 存储时间 格式HH:MM:SS | |
timestamp | 4字节 | 1970-01-01 00:00:01 UTC~2038-01-19 23:59:59 UTC | 存储日期和UTC时间 格式 YYYY-MM-DD HH:MM:SS | |
datetime | 8字节 | 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语法格式
约定符号
- 尖括号 “ < > ” 中的内容为必选项
- 中括号 “ [ ] ” 中的内容为任选项
- “ [,...] ” 意思是 “等等” ,即前一项中的内容可以重复
- 大括号 “ { } ” 与竖线 “ | ” 意思是此处为选择项,在所列出的各项中仅需选择一项
- 字段、表、视图之类的分隔符为逗号 “ , ” ,字符串常量定界符为单引号“ ' ”
书写准则
- 大小写不敏感,通常大写的内容是为了提高阅读性(关键字)
- 一条句子可以写成单行或多行,习惯每个子句占用一行
- 关键字不能在行与行之间分开,比如NULL不能打成NU(按下回车)LL
- 语句结束符为分号 “ ; ” ,分号必须放在最后面
创建数据表
语句格式:
CREATE TABLE <表名>
( <字段1> <数据类型1> [ <列级完整性约束条件1> ]
[ , <字段2> <数据类型2> [ <列级完整性约束条件>] ] [,...]
[ , <表级完整性约束条件1> ]
[ , <表级完整性约束条件2> ] [,...]
) ;
查看表结构
语句格式:
DESCRIBE <表名>
DESCRIBE可以简写成DESC
该语句可以查看表的字段信息,包括字段名,是否为主键,是否有默认值,是否允许空值等
完整性约束条件
-
列级
- PRIMARY KEY:指定字段为主键
- NULL/NOT NULL:指定字段允许为空值/不允许为空值,如果没有指定约束条件,默认NULL
- UNIQUE:指定字段取值唯一,每一行在指定的列取值不能重复
- DEFAULT <默认值>:指定字段默认值
- AUTO_INCREMENT:指定字段的值自动增加,即自动增长列
- 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天)
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 '%游戏%' ));
上一篇入口:
下一篇入口: