Java阶段二Day08
文章目录
- Java阶段二Day08
- DML语言-数据操作语言
- INSERT
- UPDATE
- DELETE
- 数据类型
- 整数类型
- 浮点类型
- 字符类型
- 日期类型
- 约束条件
- 主键约束(PRIMARY KEY)
- 非空约束(NOT NULL)
- 唯一性约束(UNIQUE)
- 检查约束(CHECK)
- 外键约束(FOREIGN KEY)
- DQL语言-数据查询语言
- SELECT
- 教师总结
- DML语言-数据操作语言
- 数据类型
- 数字类型
- 整数类型
- INT类型:占用4个字节,保存范围+-21亿
- BIGINT类型:占用8个字节
- 浮点数类型
- DOUBLE(M,N)
- 例
- 字符类型
- 定长字符串
- **CHAR类型是定长字符串**
- 变长字符串
- VARCHAR类型
- TEXT类型
- 日期类型
- 例
- 约束条件
- 主键约束PrimaryKey
- 例
- 自增
- 例
- 非空约束(NOT NULL)
- 例
- 唯一性约束(UNIQUE)
- 例
- 检查约束(CHECK)
- 例
- 外键约束
- DQL语言-数据查询语言
- 语法
- 基础查询
- 语法
- 例
DML语言-数据操作语言
DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE
INSERT
:向表中插入新数据的语句UPDATE
:修改表中数据的语句DELETE
:删除表中数据的语句
INSERT
-
向表中插入数据:
- 在数据库中,字符串的字面量是使用单引号括起来的,需要注意
- 在
INSERT
语句中指定的字段与VALUES
后面指定的值的顺序,个数,类型要完全一致 - 在
INSERT
语句中字段指定时的顺序和个数可以与表结构定义时不一致
INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2...)
-
插入默认值:
INSERT
语句中指定字段时,忽略的字段会被插入默认值。当表中字段没有被明确指定默认值时,默认值一律为NULL
- 默认值的指定:属于
DDL
语句范畴,使用DEFAULT关键字来为字段指定默认值,可以在创建表时,也可以在修改表时指定
-
创建表时字段指定默认值:
CREATE TABLE 表名( 字段名1 类型[(长度)][DEFALUT 默认值][约束], 字段名2 类型[(长度)][DEFALUT 默认值][约束], ) [charset = 字符集]
-
修改表时字段指定默认值:
ALTER TABLE 表名 CHANGE 原字段名 新字段名 类型 [(长度) 默认值 约束]
-
批量插入:
INSERT INTO 表名(字段...) VALUES (第一组值...),(第二组值...), ...
-
全列插入:
- 在
INSERT
语句中不指定字段时,为全列插入,此时要求VALUES
子句后面指定的值的个数,顺序,类型必须与表结构中字段完全一致 - 子句:在SQL语句中一个关键字可以组成一个子句
INSERT INTO 表名 VALUES (值1,值2...) #此时要求VALUES子句中指定的值必须与表结构一致
- 在
UPDATE
-
修改表字段数据:
WHERE
子句在UPDATE
中的作用:当UPDATE
语句添加了WHERE
子句时,只有满足WHERE子句要求的记录才会被修改,逐行检查,WHERE
子句会在后面DQL
中详细展开介绍WHERE
子句基础条件- WHERE中基础条件:>、>=、<、<=、=、<>,(首先"=“在数据库中表达等于,”<>“在数据库中表达不等于。”!="也可以表达不等于,但不是SQL92标准)
UPDATE 表名 SET 字段名1 = 新值, 字段名2 = 新值,... [WHERE 过滤条件]
-
使用表达式修改:
UPDATE person SET age = age + 1
-
修改多字段:
UPDATE person SET age = 12,name = '张三' WHERE name = '李四';
DELETE
DELETE
语句通常不会忽略WHERE
子句,否则是清空表操作
-
删除表字段数据:
DELETE FROM 表名 [WHERE 过滤条件]
-
清空表:
DELETE FROM person
总结:
INSERT
语句,向表中插入数据的语言INSERT
语句指定的字段顺序,个数可以与表结构不一致,但是VALUES
子句后指定的值必须与指定的字段顺序,类型,个数完全一致INSERT
语句在指定字段时,可以忽略某些字段,此时插入数据时被忽略的字段会插入默认值INSERT
语句中可以使用关键字DEFAULT
显示声明插入默认值INSERT
语句中可以使用关键字NULL
显示声明插入NULL
值INSERT
语句中不指定字段时为全列插入,此时VALUES
后指定的值的顺序,个数,类型要与表结构完全致。实际开发中不推荐这样的写法。
UPDATE
语句,修改表中记录的语言UPDATE
语句通常要指定WHERE
子句,如果不指定则为全表修改
DELETE
语句,删除表中记录的语言DELETE
语句通常要指定WHERE
子句,否则是清空表操作
数据类型
整数类型
INT
类型:占用4字节,保存范围:± 21亿- INT(M):M表示位数
BIGINT
类型:占用8字节
浮点类型
DOUBLE
(M,N):- M表示数字位,N表示小数位,( M包含N位 )
- 如果小数位的精度超过了允许精度,会进行四舍五入
- 如果四舍五入后得到的值超过了该字段可以保存的最大值时会报错:
Out of range value for column ...
字符类型
-
定长字符串:
CHAR
- CHAR(m):m是一个数字,表示长度,单位是字符。m最大可取255
- CHAR类型在磁盘中开辟的长度是固定的。例如:CHAR(3),若字符集为UTF-8,则固定开辟12字节。如果实际保存的数据不足则会补充若干个空格来填充长度
- 优点:在磁盘中保存每条记录的长度是固定的,因此读取速度快
- 缺点:在磁盘中占用空间固定,无论实际保存数据多少,都要占够空间,因此对磁盘空间有浪费
-
变长字符串:
VARCHAR
、TEXT
- VARCHAR(m):m是是一个数字,表示字符串的长度,单位是字节,最大65535
- 实际占用磁盘空间按照实际保存的数据而定,数据转换出来的字节是多少就保存多少。
- 优点:由于磁盘空间占用取决于实际保存的数据,因此不造成磁盘空间浪费
- 缺点:由于数据长度不一致,读取效率低
- TEXT(rn):m是一个数字,单位是字符,m最大值为65535
日期类型
DATE
:用于保存年月日TIME
:用于保存时分秒DATETIME
:用于保存年月日时分秒TIMESTAMP
(时间戳):保存UTC时间,记录自1970年元旦至表示的时间所经过的毫秒
插入一个日期类型的数据时,DATETIME类型为例(可以保存年月日时分秒),可以使用字符串来表示,但是格式必须为 “yyyy-MM-dd hh:mm:ss” (M表示月,m表示分)
约束条件
给表添加约束条件限制对表的操作符合施加的约束条件,否则数据库拒绝该操作
主键约束(PRIMARY KEY)
- 主键约束要求该字段的值必须非空且唯一
- 主键约束在一张标中只能为一个字段施加
- 主键约束会为表中第一个字段添加,并且通常该字段取名为"id"
- 主键不能插入重复值、不能插入
NULL
值 - 插入数据时不能忽略主键字段(会使用默认值
NULL
),如果主键字段有对应默认值生成机制可以忽略 - 修改表记录时,不可将重复的值修改到主键字段,不可将
NULL
值修改到主键 - 永远不应当更新主键字段
- 自增:具有主键约束的字段通常由系统完成,而自增就是其中一种方式,当主键是自增时插入数据可忽略主键字段
非空约束(NOT NULL)
- 被非空约束施加的字段,该字段的值不能为
NULL
- 不能向具有非空约束的字段中插入
NULL
,也不能修改NULL
到具有非空约束的字段中
唯一性约束(UNIQUE)
- 具有唯一性约束的字段值不允许重复,但是可以为
NULL
- 可以插入
NULL
值到唯一性约束字段中且可以多次 - 插入(修改)数据时,不可将重复的值插入(修改)到具有唯一性约束的字段中
检查约束(CHECK)
- 检查约束允许我们自定义约束条件,仅当满足指定的条件才可以进行操作
外键约束(FOREIGN KEY)
- 外键约束在实际开发中几乎不会用
DQL语言-数据查询语言
DQL语言用来检索表中数据的语言,涉及到的关键字SELECT
SELECT
-
执行顺序:
子句 执行顺序 SELECT 子句 6 FROM 子句 1 JOIN… ON…子句 2 WHERE 子句 3 GROUP BY 子句 4 HAVING 子句 5 ORDER BY 子句 7 LIMIT 子句 8 -
基础查询:
- SELECT 子句用于指定查询表中的字段
- FROM子句用于指定数据来自那张表
SELECT 字段1,字段2,... FROM 表名
-
全部查询:
SELECT * FROM 表名
教师总结
DML语言-数据操作语言
定义
DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE
- INSERT:向表中插入新数据的语句
- UPDATE:修改表中数据的语句
- DELETE:删除表中数据的语句
准备工作
USE mydb; 使用mydb库
CREATE TABLE person( 创建表person
name VARCHAR(30),
age INT(3)
)
INSERT语句-向表中插入数据
语法
INSERT INTO 表名 (字段1,字段2,字段3,...) VALUES (值1,值2,值3,...)
向表中插入一条记录,将值1插入的到字段1中,将值2插入到字段2中
例
向person表中插入记录
INSERT INTO person (name,age) VALUES ('张三',22);
INSERT INTO person (age,name) VALUES (33,'李四');
INSERT INTO person (name,age) VALUES (36,'王五'); 不可以,值的顺序与前面指定的字段不匹配
INSERT INTO person (name,age) VALUES ('王五') 不可以,值的个数与前面指定的字段不匹配
注:
- 在数据库中,字符串的字面量是使用单引号括起来的,需要注意
- 在INSERT语句中指定的字段与VALUES后面指定的值的顺序,个数,类型要完全一致
- 在INSERT语句中字段指定时的顺序和个数可以与表结构定义时不一致
补充
查询表中数据的语法
SELECT * FROM 表名
例
SELECT * FROM person
插入默认值
INSERT语句中指定字都时,忽略的字段会被插入默认值。当表中字段没有被明确指定默认值时,默认值一律为NULL
例
INSERT INTO person (name) VALUES ('王五')
此时该条记录插入后,age字段使用默认值NULL
默认值的指定
注:指定默认值是属于DDL语句的范畴
使用DEFAULT关键字来为字段指定默认值,可以在创建表时,也可以在修改表时指定
在创建表时为字段指定默认值
CREATE TABLE person(
name VARCHAR(30) DEFAULT '无名氏',
age INT(3) DEFAULT 30
)
修改表时为字段指定默认值
ALTER TABLE person CHANGE name name VARCHAR(30) DEFAULT '无名氏'
可以使用DESC 表名 在查看表结构时看到字段的默认值
此时向person表中插入数据时,若不指定name字段,该字段默认值插入’无名氏’
INSERT INTO person (age) VALUES (55)
全列插入
在INSERT语句中不指定字段时,为全列插入,此时要求VALUES子句后面指定的值的个数,顺序,类型必须与表结构中字段完全一致
补充说明
子句
在SQL语句中一个关键字可以组成一个子句
例
INSERT INTO person(name,age) INSERT子句
VALUES('张三',22) VALUES子句
这两个子句整体构成了INSERT语句
语法
INSERT INTO 表名 VALUES(值1,值2,...) 此时就要求VALUES子句中指定的值必须与表结构一致
例
INSERT INTO person VALUES('赵六',15)
插入默认值
INSERT INTO person VALUES(DEFAULT,15) 使用DEFAULT关键字表达该字段插入默认值
插入NULL值
INSERT INTO person VALUES(NULL,78) 使用NULL关键字表达该字段插入NULL值
下面是错误示范:
INSERT INTO person VALUES(15,'赵六') 不可以,与person表结构字段顺序不一致
INSERT INTO person VALUES('赵六') 不可以,与person表结构字段顺序不一致
批量插入
语法
INSERT INTO 表名(字段...) VALUES(第一组值...),(第二组值...),....
例
一次插入三条记录
INSERT INTO person(name,age) VALUES('阿猫',11),('阿狗',22),('阿三',33)
UPDATE语句-修改表数据
语法
UPDATE 表名
SET 字段1=新值,字段2=新值,...
[WHERE 过滤条件]
例
UPDATE person
SET age=40
此时该SQL执行后,person表中每条记录的age字段都会被改为40
注:当UPDATE语句中不添加WHERE子句时,会将表中所有记录进行修改,这种操作实际开发中很少见
WHERE子句在UPDATE中的作用
当UPDATE语句添加了WHERE子句时,只有满足WHERE子句要求的记录才会被修改
例
修改张三的年龄为22
UPDATE person
SET age=22
WHERE name='张三'
数据库在修改记录时对表是逐行进行的,每一行是否进行修改取决于该行记录是否满足WHERE子句的条件要求
将40岁的人改为36岁
UPDATE person
SET age=36
WHERE age=40
WHERE子句基础条件
WHERE子句会在后面DQL中详细展开介绍
WHERE中基础条件:>,>=,<,<=,=,<>(首先"=“在数据库中表达等于,”<>“在数据库中表达不等于。”!="也可以表达不等于,但不是SQL92标准)
例
将年龄高于30岁的人改为29
UPDATE person
SET age=29
WHERE age>30
使用表达式修改
将每个人的年龄涨一岁
UPDATE person
SET age=age+1
修改多字段
将李四的名字改为'李老四',年龄改为66
UPDATE person
SET name='李老四',age=66
WHERE name='李四'
DELETE语句-删除表中数据
语法
DELETE FROM 表名
[WHERE 过滤条件]
注:DELETE语句通常不会忽略WHERE子句,否则是清空表操作!
例
删除person表中'李老四'
DELETE FROM person
WHERE name='李老四' //仅删除person表中name字段为'李老四'的记录
删除年龄小于25岁的人
DELETE FROM person
WHERE age<25
清空表
DELETE FROM person
总结
- INSERT语句,向表中插入数据的语言
- INSERT语句指定的字段顺序,个数可以与表结构不一致,但是VALUES子句后指定的值必须与指定的字段顺序,类型,个数完全一致
- INSERT语句在指定字段时,可以忽略某些字段,此时插入数据时被忽略的字段会插入默认值
- INSERT语句中可以使用关键字DEFAULT显示声明插入默认值
- INSERT语句中可以使用关键字NULL显示声明插入NULL值
- INSERT语句中不指定字段时为全列插入,此时VALUES后指定的值的顺序,个数,类型要与表结构完全一致。实际开发中不推荐这样的写法。
- UPDATE语句,修改表中记录的语言
- UPDATE语句通常要指定WHERE子句,如果不指定则为全表修改
- DELETE语句,删除表中记录的语言
- DELETE语句通常要指定WHERE子句,否则是清空表操作
综合练习
题干
1.创建数据库day2db 字符集utf8并使用
2.创建t_hero表, 有name字段,字符集utf8
3.修改表名为hero
4.最后面添加价格字段money(整数类型,长度6), 最前面添加id字段(整数类型), name后面添加 age字段(整数类型,长度3)
5.表中添加以下数据: 1,李白,50,6888 2,赵云,30,13888 3,刘备,25,6888
6.修改刘备年龄为52岁
7.修改年龄小于等于50岁的价格为5000
8.删除价格为5000的信息
9.删除表, 删除数据库
答案
1.创建数据库day2db 字符集utf8并使用
CREATE DATABASE day2db CHARSET=UTF8
USE day2db
2.创建t_hero表, 有name字段,字符集utf8
CREATE TABLE t_hero(
name VARCHAR(30)
)
3.修改表名为hero
RENAME TABLE t_hero TO hero
4.最后面添加价格字段money(整数类型,长度6), 最前面添加id字段(整数类型), name后面添加 age字段(整数类型,长度3)
ALTER TABLE hero ADD money INT(6)
ALTER TABLE hero ADD id INT FIRST
ALTER TABLE hero ADD age INT(3) AFTER name
5.表中添加以下数据: 1,李白,50,6888 2,赵云,30,13888 3,刘备,25,6888
INSERT INTO hero(id,name,age,money)
VALUES (1,'李白',50,6888),(2,'赵云',30,13888),(3,'刘备',25,6888)
6.修改刘备年龄为52岁
UPDATE hero
SET age=52
WHERE name='刘备'
7.修改年龄小于等于50岁的价格为5000
UPDATE hero
SET money=5000
WHERE age<=50
8.删除价格为5000的信息
DELETE FROM hero
WHERE money=5000
9.删除表, 删除数据库
DROP TABLE hero
DROP DATABASE day2db
数据类型
设计一张表是,要为表中每一个字段指定类型以确保该字段可以保存正确类型的数据
注:类型本身属于方言,不同的数据库类型不完全一样。
数字类型
整数类型
INT类型:占用4个字节,保存范围±21亿
- INT(m):m是一个数字,可以指定保存的位数
BIGINT类型:占用8个字节
浮点数类型
DOUBLE(M,N)
- M是一个数字,表示数字的位数
- N是一个数字,表示小数的位数
- M是包含N的位数
- DOUBLE(7,2):可以保存一个7位数,其中2为是小数,整数5位
例
CREATE TABLE person1(
age INT(3), 最大999
salary DOUBLE(7,2) 最大99999.99
)
-
插入小数
INSERT INTO person1(salary) VALUES(99999.99)
-
如果小数位的精度超过了允许精度时,会进行四舍五入
INSERT INTO person1(salary) VALUES(1234.867) ^7会进行四舍五入 实际插入表中后,该记录salary字段的值位1234.87
-
如果四舍五入后得到的值超过了该字段可以保存的最大值时会报错
INSERT INTO person1(salary) VALUES(99999.997)
字符类型
定长字符串
CHAR类型是定长字符串
- CHAR(m):m是一个数字,表示长度,单位是字符。m最大可取255
- CHAR类型在磁盘中开辟的长度是固定的。例如:CHAR(3),若字符集为UTF-8,则固定开辟12字节。如果实际保存的数据不足则会补充若干个空格来填充长度
- 优点:在磁盘中保存每条记录的长度是固定的,因此读取速度快
- 缺点:在磁盘中占用空间固定,无论实际保存数据多少,都要占够空间,因此对磁盘空间有浪费
变长字符串
VARCHAR类型
- VARCHAR(m):m是一个数字,表示字符串的长度,单位是字节.最大65535
- 实际占用磁盘空间按照实际保存的数据而定,数据转换出来的字节是多少就保存多少。
- name VARCHAR(30):name字段保存的字符串转换的字节最多30字节。以UTF-8为例,保存"张三"实际需要6个字节,那么该记录实际开辟的磁盘空间也是6个字节
- 优点:由于磁盘空间占用取决于实际保存的数据,因此不造成磁盘空间浪费
- 缺点:由于数据长度不一致,会导致读取效率低
TEXT类型
- TEXT(m):m是一个数字,单位是字符,m最大值为65535
日期类型
- DATE用于保存年月日
- TIME用于保存时分秒
- DATETIME用于保存年月日时分秒
- TIMESTAMP(时间戳),保存UTC时间,记录自1970年元旦至表示的时间所经过的毫秒
例
CREATE TABLE userinfo(
id INT, id整数类型
name VARCHAR(30), name字符串类型,最多30字节
gender CHAR(1), gender字符串类型,最多1个字符
birth DATETIME, birth日期类型,保存年月日时分秒
salary DOUBLE(7,2) salary浮点数类型,最多保存99999.99
)
-
插入一个日期类型的数据时,DATETIME类型为例(可以保存年月日时分秒),可以使用字符串来表示,但是格式必须为"yyyy-MM-dd hh:mm:ss"(M表示月,m表示分)
INSERT INTO userinfo(id,name,gender,birth,salary) VALUES(1,'张三','男','1998-08-03 10:22:35',5000.65)
-
DATETIME类型可以忽略时分秒。时分秒默认为0。
INSERT INTO userinfo(id,name,gender,birth,salary) VALUES(2,'李四','女','2002-03-15',10000)
-
DATETIME类型不可以忽略年月日!
INSERT INTO userinfo(id,name,gender,birth,salary) VALUES(3,'王五','男','10:45:16',9995)
-
DOUBLE类型精度超出范围时会进行四舍五入,但是整数部分超出范围会报错
INSERT INTO userinfo(id,name,gender,birth,salary) VALUES(3,'王五','男','1996-06-27',100000)
约束条件
我们可以为表添加约束条件,可以限制对标的操作必须符合我们施加的约束条件,否则数据库会拒绝该操作
主键约束PrimaryKey
- 主键约束要求该字段的值必须非空且唯一
- 主键约束在一张标中只能为一个字段施加
- 主键约束会为表中第一个字段添加,并且通常该字段取名为"id"
例
CREATE TABLE user1(
id INT PRIMARY KEY, 为id字段添加主键约束
name VARCHAR(30),
age INT(3)
)
INSERT INTO user1 (id,name,age) VALUES(1,'张三',22),(2,'李四',33)
-
主键不能插入重复的值
INSERT INTO user1(id,name,age) VALUES(1,'王五',36)
-
主键不能插入NULL值
INSERT INTO user1(id,name,age) VALUES(NULL,'王五',36)
-
插入数据时不能忽略主键字段(会使用默认值NULL),如果主键字段有对应默认值生成机制可以忽略
INSERT INTO user1(name,age) VALUES('王五',36)
-
修改表记录时,不可以将重复的值修改到主键字段
UPDATE user1 SET id=1 WHERE name='李四' 由于user1表中'张三'记录的id为1,因此不能将'李四'记录的id也改为1
-
修改表记录时也不可以将NULL值修改到主键字段
UPDATE user1 SET id=NULL WHERE name='李四'
永远不应当更新主键字段!
自增
具有主键约束的字段通常主键的生成方式由系统完成,而自增就是其中一种方式
例
-
创建表时为主键字段添加自增
CREATE TABLE user2( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30), age INT(3) )
-
修改表时为主键字段添加自增
修改user1表时为id字段添加主键约束以及自增模式 ALTER TABLE user1 CHANGE id id INT PRIMARY KEY AUTO_INCREMENT 修改表时仅添加自增 ALTER TABLE user1 CHANGE id id INT AUTO_INCREMENT
-
当主键字段具有自增时,插入数据则可以忽略主键字段
INSERT INTO user2(name,age) VALUES('张三',33) INSERT INTO user2(name,age) VALUES('李四',26)
-
当主键字段具有自增时,可以显示的向主键中插入NULL值,但此时主键字段仍然使用自增(不推荐这样写)
INSERT INTO user2(id,name,age) VALUES(NULL,'王五',45)
非空约束(NOT NULL)
被非空约束施加的字段,该字段的值不能为NULL
例
-
创建表时为字段添加非空约束
CREATE TABLE user3( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30) NOT NULL, name字段施加非空约束 age INT(3) )
-
修改表时为字段添加非空约束
为user2表的name字段添加非空约束 ALTER TABLE user2 CHANGE name name VARCHAR(30) NOT NULL
-
插入数据时,不能向具有非空约束的字段中插入NULL值
INSERT INTO user3(name,age) VALUES(NULL,22) 不可以将NULL值插入name字段
-
也不可以修改NULL值到具有非空约束的字段中
UPDATE user2 SET name=NULL 不能将NULL值修改到具有非空约束的字段中 WHERE id=1
唯一性约束(UNIQUE)
具有唯一性约束的字段值不允许重复,但是可以为NULL。
例
-
创建表时为字段添加唯一性约束
CREATE TABLE user4( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30) UNIQUE, age INT(3) )
-
修改表时也可以为字段添加唯一性约束
注意:user3的name本身具有非空约束,但是如果此时添加唯一性约束时会取消非空约束 ALTER TABLE user3 CHANGE name name VARCHAR(30) UNIQUE 如果不希望取消非空约束则需要一并声明 ALTER TABLE user3 CHANGE name name VARCHAR(30) NOT NULL UNIQUE
-
插入数据时,不可以将重复的值插入到具有唯一性约束的字段中
INSERT INTO user4(name,age) VALUES('张三',22) 可以 INSERT INTO user4(name,age) VALUES('张三',45) 不可以再次插入'张三'到name字段
-
可以插入NULL值到具有唯一性约束的字段中,且可以多次
INSERT INTO user4(name,age) VALUE(NULL,36) 成功 INSERT INTO user4(name,age) VALUE(NULL,47) 成功
-
修改记录,也不能将重复的值修改到具有唯一性约束的字段中
UPDATE user4 SET name='王五' WHERE id=3 可以,因为'王五'在user4的name字段中不存在 UPDATE user4 SET name='张三' WHERE id=3 不可以,因为'张三'在user4的name字段中已有
检查约束(CHECK)
检查约束允许我们自定义约束条件,仅当满足我们指定的条件才可以进行操作
例
-
创建表时添加CHECK约束
CREATE TABLE user5( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30), age INT(3) CHECK(age>0 AND age<120) 要求age字段的值>0且<120 )
-
插入数据时,age字段的取值必须符合CHECK约束
INSERT INTO user5(name,age) VALUES('张三',22) 成功 INSERT INTO user5(name,age) VALUES('李四',160) 失败
-
更新表数据时,也不能违反CHECK约束
UPDATE user5 SET age=0 WHERE id=1
外键约束
外键约束在实际开发中几乎不会用
DQL语言-数据查询语言
DQL语言用来检索表中数据的语言,涉及到的关键字SELECT
语法
执行顺序
SELECT 子句 6
FROM 子句 1
JOIN... ON...子句 2
WHERE 子句 3
GROUP BY 子句 4
HAVING 子句 5
ORDER BY 子句 7
LIMIT 子句 8
基础查询
语法
SELECT 字段1,字段2,... FROM 表名
- SELECT 子句用于指定查询表中的字段
- FROM子句用于指定数据来自那张表
例
-
使用SELECT * FROM 表名,可以从指定的表中查询所有字段
USE tedu 检索teacher表中的所有字段的所有记录 SELECT * FROM teacher