[数据库]SQL语言介绍&DDL数据定义语言&DML数据操作语言&数据类型&约束条件(二)

本文介绍了SQL语言的基础知识,包括SQL的分类如DDL和DML,以及如何操作数据库和表,如创建、修改和删除。详细讨论了数据类型,如数字、浮点、字符和日期类型,并解释了主键约束、非空约束和唯一性约束等约束条件。
摘要由CSDN通过智能技术生成

目录

SQL语言介绍

SQL的分类

DDL语言 - 数据定义语言

对数据库的操作

 表的操作

 修改表结构

注意事项

 DML语言 -数据操作语言

INSERT语句-插入数据

UPDATE语句-修改数据

DELETE语句-删除数据

数据类型

数字类型

浮点数类型

字符类型

 日期类型

约束条件

主键约束(PRIMARY KEY)

自增

非空约束(NOT NULL)

唯一性约束(UNIQUE)

外键约束


SQL语言介绍

SQL:全称Structured Query Language 翻译为结构化语言

SQL是用来对数据库进行操作的语言

SQL的分类

  • DDL语言 数据定义语言,是用来对数据库对象进行操作的语言,数据库对象(库,表,视图,索引,序列等)
  • DML语言 数据操作语言,是对表中数据进行操作的语言(增,删,改)
  • DQL语言 数据查询语言,是对表中数据查询的语言
  • DCL语言 数据控制语言,对数据库权限的管理(DBA需要了解的)
  • TCL语言 事务控制语言,对事务进行操作(COMMIT,ROLLBACK)

DDL语言 - 数据定义语言

DDL是用来对数据库对象进行操作的语言,数据库对象(库,表,视图,索引,序列等)

涉及到的关键字:

CREATE,ALTER,DEOP

对数据库的操作

新建数据库

CREATE DATABASE  数据库名 CHARSET=字符集名称

CREATE DATABASE mydb       创建一个名为mydb的数据库

CREATE DATABASE mydb CHARSET=utf8     

 创建一个名为mydb的数据库并设置字符集为utf8

 注:SQL语句本身是不区分大小写的,但在行业中的规范关键字大写,非关键字小写的。

查询DBMS中已有的数据库

SHOW DATABASES

查看创建数据库的信息 

SHOW CREATE DATABASE

 删除数据库

DROP DATABASE 数据库名

切换数据库 

USE 数据库名

 表的操作

创建表

CREATE TABLE 表名(

       字段1名字  类型 [默认值,约束]

       字段2名字  类型 [默认值,约束]                             

             ……

)[CHARSET=字符集名字]             

(字符串类型为VARCHAR,()中指定的是长度信息,表示占用的字节数.例如utf-8编码如果长度为30只能保存10个汉字。) 

查看表的结构

DESC 表名

 查看创建表时的详细信息

SHOW CREATE TABLE 表名

 查看当前库中已经创建的表

SHOW TABLES

 修改表名

RENAME TABLE 原表名 TO 新表名

 删除表

DROP TABLE 表名

 修改表结构

添加字段

在表的末尾追加新字段

ALTER TABLE 表名 ADD 字段名 类型

 在表的最开始插入新字段

ALTER TABLE 表名 ADD 字段名 类型 FIRST

 在表中插入一个字段——将指定的字段插入到表中某字段之后

ALTER TABLE 表名 ADD 字段名 类型 AFTER 表中某字段

删除字段 

ALTER TABLE 表名 DROP 字段名

修改字段 

ALTER TABLE 表名 CHANGE 原字段名 新字段名 类型[默认值,约束]

注意事项

修改表结构时,最好表中不要有数据

如果表中包含数据,修改表结构的注意事项

  1. 尽量不要改变字段的类型,因为有可能当前字段原数据类型与修改的类型不匹配。
  2. 如果修改类型的长度尽量不要缩短,因为现有数据长度违背修改后的长度。
  3. 如果添加新的约束,表中现有数据不能违背该约束。

 DML语言 -数据操作语言

DML就是对表中的数据进行操作的语言,涉及的具体操作:

  • 增(INSERT):用于向表中插入新记录的操作
  • 删(DELETE):用于删除表中记录的操作
  • 改(UPDATE):用于修改表中记录的操作

 查询表中数据的基本语法

SELECT*FROM 表名

INSERT语句-插入数据

INSERT INTO 表名  [(字段名一,字段名二,……)]  VALUES (字段名一,字段名二,……)

 例:INSERT INTO person (age,name) VALUES (22,'李四');

  • 在数据库中,字符串的字面量使用单引号('')括起来的,并且字符串的内容是区分大小写的
  • 在INSERT语句中指定字段时,字段的顺序,个数可以与表定义时的不同,但是VALUES后面指定的值必须与前面自定的字段顺序、个数、类型完全一致

插入默认值

在INSERT语句中若某个字段没有指定时,该字段就会插入默认值。如果表中该字段没有明确指定默认值时,那么默认值为NULL

例:INSERT INTO person (name) VALUES ('王五');
插入后,该条记录中age字段就会被插入默认值NULL

默认值的指定

注:这属于DDL语句的范畴,我们可以在创建表或修改表字段时为字段指定默认值

ALTER TABLE  表名 CHANGE 原字段名 新字段名 类型 DEFAULT 参数

全列插入

在INSERT语句中不指定字段名时,则为全列插入。

此时要求VALUES子句中指定的字段值必须与表中定义的字段的顺序、类型、个数完全一致

注:

子句:在SQL语句中一个关键字后跟的内容为一个子句

例:INSERT INTO person (name,age)   INSERT子句

        VALUES ('张三',22)           VALUES子句

全列插入案例

  • INSERT INTO person VALUES('钱七',32);
  • 在全列插入时,可以使用字段的默认值,此时使用关键字DEFAULT代替指定的值即可
  • INSERT INTO person VALUES('孙八',DEFAULT);
  • 插入时还可以使用关键字NULL来显示的为字段插入默认值
  • INSERT INTO person VALUES('周九',NULL);
  • 下面是错误示范
  • INSERT INTO person VALUES('老十');        //缺少字段值
  • INSERT INTO person VALUES(25,'老十')      //值的顺序与表中字段顺序不一致

UPDATE语句-修改数据

UPDATE 表名

SET 字段1名=字段1值,字段2名=字段2值,……

[WHERE 过滤条件]

例:

UPDATE person SET age=40
执行上述SQL后,person表中每条记录的age字段值都会被改为40!

注:

当UPDATE语句不添加WHERE子句时会将表中所有记录进行修改,这种操作比较少见

WHERE子句在UPDATE中的应用

WHERE在UPDATE中可以限制修改表中的记录,只有满足WHERE子句条件要求的记录才会被修改

例:

将张三的年龄改为22
UPDATE person
SET age=22
WHERE name='张三';   person表中只有对应记录中name字段值为'张三'时,才会修改age字段值

数据库在修改表数据时,是逐行扫描的,每一行记录是否被修改,取决于该条记录是否满足WHERE子句的条件要求,只有满足要求的记录才会进行响应的修改工作.


将年龄为40岁的人改为年龄36岁
UPDATE person
SET age=36
WHERE age=40    只要该条记录age为40的,那么age字段的值就会被修改为36

WHERE子句中的条件

可以使用:>,>=,<,<=,<>(不等于建议使用"<>",而"!="不是所有数据库都支持)

例:

将年龄高于30岁的人,改为年龄29
UPDATE person
SET age=29
WHERE age>30

使用表达式进行修改

将person表中每个人的年龄涨一岁
UPDATE person
SET age=age+1

修改多个字段

修改person中名为李四的记录,将其名字改为李老四,年龄改为55
UPDATE person
SET name='李老四',age=55
WHERE name='李四'

DELETE语句-删除数据

DELETE FROM 表名

[WHERE 过滤条件]

通常DELETE语句都要伴随WHERE子句,如果不添加WHERE子句则是清空表操作!!

例:

删除person表的中'李老四'
DELETE FROM person
WHERE name='李老四'        仅删除person表中满足WHERE条件的记录

删除person表中年龄小于25的人
DELETE FROM person
WHERE age<25

清空表操作

DELETE FROM person

数据类型

不同的数据库类型的名字可能不一致

数字类型

整数类型

  • INT(m)
  • BIGINT(m)

注:m表达长度

INT(5):整数最大5位,如果插入的数据不足5位时,前面会自动补0.例如:18实际保存时00018

浮点数类型

DOUBLE(m,n)

  • m表单数字的位数(包含整数与小数位)
  • n表达其中小数的位数

例:

money DOUBLE(7,2)

money字段总共有7位数字,其中有2位小数.整数为5位.

money最大可以保存的数字:99999.99

如果指定的数字精度大于可以保存的精度时会进行四舍五入

INSERT INTO person (money) VALUES (1234.867)
                                                                               ^7会进行四舍五入
实际插入后,这条记录的money字段值为1234.87

如果指定的数字已经达到可保存的最大值并且精度仍然超过且需要四舍五入会报错

INSERT INTO person (money) VALUES (99999.996)
当四舍五入后的数字超过了money可以保存的最大值则会报错

注:插入DOUBLE类型数据时,精度超出部分会进行四舍五入,但是整数部分超过则会直接报错

INSERT INTO userinfo (id,username,gender,birth,salary)
VALUES (3,'王五','男','1993-08-03',100000)

                                                               ^整数部分超出,报错

字符类型

定长字符:CHAR(n)

  • n表示长度,单位是字符
  • n的最大值为255,CHAR类型最多可以保存255个字符
  • 定长字符串,每条记录该字段的值在磁盘上创建的空间是固定的,无论实际保存的数据是多大,总是会占用指定长度的空间,不足的部分会补充空格。
  • name CHAR(10):name字段最多可以保存10个字符,,如果实际保存数据时:'张三':后面会补充8个空格占够空间
  • 优点:占用的磁盘空间是固定的,因此查询速度快
  • 缺点:磁盘空间占用是固定的,因此会出现浪费

变长字符:

VARCHAR(n)

  • n表示长度,单位是字节
  • n的最大值为65535
  • 实际占用磁盘空间取决于保存的数据(name VARCHAR(30):name保存的字符串最多占30个字节。以UTF-8编码为例,如果保存'张三',实际仅占用6个字节。)
  • 优点:不会造成磁盘的浪费
  • 缺点:每条记录占用的磁盘空间不定,因此查询稍慢

TEXT(n)

  • n表示长度,单位是字符
  • n的最大值为65535

 日期类型

  • DATE:保存年月日
  • TIME:保存时分秒
  • DATETIME:保存年月日时分秒
  • TIMESTAMP:时间戳,保存UTC(世界调整时)时间.记录自1970年元旦到表达的时间所经过的毫秒

插入日期类型数据时,如果字段为DATETIME类型,我们可以使用字符串来表达日期,但是格式必须为"yyyy-MM-dd hh:mm:ss" 注:MM为2位数字的月 mm为两位数字的分

INSERT INTO userinfo (id,username,gender,birth,salary)
VALUES (1,'张三','男','1995-12-21 20:08:23',5000)

插入日期类型时,如果字段为DATETIME**,字符串指定日期内容可以忽略时分秒**,但不能忽略年月日

INSERT INTO userinfo (id,username,gender,birth,salary)
VALUES (2,'李四','女','1996-7-16',10000.56)

约束条件

我们为我们的表添加某些特定的约束条件,这样一来可以限制对表的相关操作。只有满足相应约束条件的操作才可以进行,否则会被数据库拒绝。

主键约束(PRIMARY KEY)

  • 主键约束每张表只能有一个
  • 主键约束的特点:该字段的值在整张表中每条记录都是非空且唯一
  • 一般情况下一张表的第一个字段会被施加主键约束,一般名字用"id"
CREATE TABLE user1(
    id INT PRIMARY KEY,        为id字段添加主键约束
    name VARCHAR(30),
    age INT(3)
);

主键字段不能插入重复的值

INSERT INTO user1 (id,name,age) VALUES (1,'王五',34);

                                                                          ^报错

不能将NULL值插入到主键字段

INSERT INTO user1 (id,name,age) VALUES (NULL,'王五',34);

                                                                            ^报错
忽略主键字段时,如果主键字段没有默认值也会将NULL值插入,这是也会报错。

INSERT INTO user1 (name,age) VALUES ('王五',34);

                                   ^报错

修改表记录时,也不能将NULL或重复的值修改到主键字段上

UPDATE user1
SET id=1    <报错
WHERE name='李四'

UPDATE user1
SET id=NULL     <报错
WHERE id=1

自增

具有主键约束的字段会添加自增,让数据库自行维护该字段的值AUTO_INCREMENT

  • 创建表时为主键字段添加自增

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 ('张三',22);
INSERT INTO user2 (name,age) VALUES ('李四',33);

  • 当字段具有自增时,显示的插入NULL值是无效的,该字段仍然会自增(不推荐)

INSERT INTO user2 (id,name,age) VALUES(NULL,'王五',56)

非空约束(NOT NULL)

被非空约束修饰的字段,表中每条记录该字段的值都不允许为NULL

  • 创建表时指定非空约束

CREATE TABLE user3(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,                为name字段添加非空约束
    age INT(3)
)

  • 修改表时,为某字段指定非空约束

ALTER TABLE user2 CHANGE name name VARCHAR(30) NOT NULL

  • 非空约束可以在查看表结构时体现出来

DESC user3;

  • 不能将NULL值插入到具有非空约束的字段上

INSERT INTO user3 (name,age) VALUES (NULL,22); 不能显示的将NULL值插入

  • 插入数据时,不能忽略具有非空约束的字段

INSERT INTO user3 (age) VALUES (22);           name没有默认值,不能为NULL

  • 修改表中记录时,也不能将NULL值修改到具有非空约束的字段上

如果user2的name字段具有非空约束:
UPDATE user2
SET name=NULL
WHERE id=1

唯一性约束(UNIQUE)

具有唯一性约束的字段在整张表中每条记录中该字段的值都不允许重复

唯一性约束允许NULL值,并且每条记录都可以为NULL。

例:

  • 创建表时为字段指定唯一性约束

CREATE TABLE user4(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30) UNIQUE,
    age INT(3)
)

  • 修改表时可以为字段添加唯一性约束

注意:如果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('张三',52);    失败

  • NULL值可以被插入到具有唯一性约束的字段中,且可以多次

INSERT INTO user4(name,age) VALUES(NULL,33);    成功
INSERT INTO user4(name,age) VALUES(NULL,45);    成功

  • 修改记录时也不能将重复的值修改到该字段中,NULL除外

UPDATE user4
SET name='王五'
id=2
上述SQL可以修改

UPDATE user4
SET name='张三'
id=2
上述SQL会报错,因为张三是重复的值

外键约束

外键约束是配合主键字段进行多表关联关系中使用的约束。

  • 具有外键约束的字段的值只能是其关联的主键字段中含有的值或NULL
  • 删除主键字段记录时,除非该条记录主键字段的值在外键字段中没有对应,否则无法删除

实际开发中外键约束会无形中增加多次不必要的DML操作才能保证数据完整性,这对项目来说是不必要的操作,会带来额外的开销和对应的逻辑代码维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值