当前位置:网站首页>数据库DDL(Data Definition Language,数据定义语言)知识点
数据库DDL(Data Definition Language,数据定义语言)知识点
2022-07-01 03:14:00 【苡荏】
数据库学习整理
- 数据库-DDL
- 01. 查看所有数据库
- 02. 创建数据库
- 03. 选择使用数据库
- 04. 删除数据库
- 05. 修改数据库编码
- 06. 数据库中创建表
- 07. 数值类型
- 08. 字符串类型
- 09. 日期类型
- 10. 查看当前数据库所有的表
- 11. 查看指定表
- 12. 查看表结构
- 13. 删除指定表
- 14. 表中添加一列
- 15. 修改列名和类型
- 16. 删除列
- 17. 修改表名
- 18. 表中数据插入
- 19. 表中数据修改
- 20. 表中数据删除
- 21. 删除表中所有数据
- 22. 清空表数据
- 23. SQL约束
- 24. 主键约束
- 25. 添加单列主键
- 26. 添加联合主键
- 27. 通过修改表结构添加主键
- 28. 删除主键约束
- 29. 自增长约束
- 30. 指定自增字段初始值
- 31. 取消自增长
- 32. 非空约束
- 33. 删除非空约束
- 34. 唯一约束
- 35. 删除唯一约束
- 36. 默认约束
- 37. 删除默认约束
- 38. zerofill
数据库-DDL
01. 查看所有数据库
-- 查看所有数据库
SHOW DATABASES;
02. 创建数据库
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mydb;
03. 选择使用数据库
-- 选择使用哪一个数据库
USE mydb;
04. 删除数据库
-- 删除数据库
DROP DATABASE mydb1;
DROP DATABASE if EXISTS mydb2;
05. 修改数据库编码
-- 修改数据库编码
ALTER DATABASE mydb_1 CHARACTER SET utf8;
06. 数据库中创建表
-- 选择mydb
USE mydb;
-- 创建表
CREATE TABLE if NOT EXISTS student(
sid int unsigned, # 无符号整型
name VARCHAR(20),
gender VARCHAR(2),
age INT,
birth date,
address VARCHAR(20),
score DOUBLE
);
07. 数值类型
TINYINT
SMALLINT
MEDIUMINT
INT OR INTEGER
BIGINT
FLOAT
DOUBLE
DECIMAL # decimal(M,D) decimal(5,2) == 123.45
08. 字符串类型
CHAR
VARCHAR varchar(20)
TINYBLOB
TINYTEXT
BLOB
TEXT
MEDIUMBLOB
MEDIUMTEXT
LONGBLOB
LONGTEXT
09. 日期类型
DATE # YYYY-MM-DD
TIME # HH:MM:SS
YEAR # YYYY
DATETIME # YYYY-MM-DD HH:MM:sS
TIMESTAMP # YYYYMMDD HHMMSS
10. 查看当前数据库所有的表
-- 查看当前数据库所有的表
SHOW TABLES;
11. 查看指定表
-- 查看指定表
SHOW CREATE TABLE tablename;
12. 查看表结构
-- 查看表结构
DESC tablename;
13. 删除指定表
-- 删除表
DROP TABLE tablename;
14. 表中添加一列
-- 添加列
ALTER TABLE tablename ADD 列名 数据类型;
15. 修改列名和类型
-- 修改列名和类型
ALTER TABLE tablename CHANGE 原列名 修改列名 修改后的数据类型;
16. 删除列
-- 删除列
ALTER TABLE 表名 DROP 列名;
17. 修改表名
-- 修改表名
RENAME TABLE 原表名 TO 修改后的表名;
18. 表中数据插入
- 格式:INSERT INTO 表 (列名1,列名2,列名3...) VALUES (值1,值2,值3...);
- 格式:INSERT INTO 表 VALUES (值1,值2,值3...); # 向表中插入所有列
INSERT INTO student (sid,name,gender,age,birth,address,score,dept) VALUES (1,'张三','男',18,'2001-12-23','河北',85.94,'dept'),(2,'张三','男',18,'2001-12-23','河北',85.94,'dept'),(3,'张三','男',18,'2001-12-23','河北',85.94,'dept'); # 可一次插入多行
INSERT INTO student VALUES (1004,'李四','男',18,'0201-12-23','河北',85.924,'dept');
INSERT INTO student (sid) VALUES (177);
INSERT INTO student (dept) VALUES ('dept_1');
INSERT INTO student (name,age) VALUES('王五',23);
19. 表中数据修改
- 格式:UPDATE 表名 SET 字段名 = 值,字段名 = 值...;
- 格式:UPDATE 表名 SET 字段名 = 值,字段名 = 值... WHERE 条件;
-- 将所有学生的地址修改为重庆
UPDATE student SET address = '重庆';
-- 将所有学生id大于3的地址改为河北
UPDATE student SET address = '河北' where sid >= 3;
-- 将id为4的学生的地址修改为广州,成绩修改为100,id改为6
update student SET address = '广州',score=100,sid = 6 where sid = 5;
update student SET score = score + 100 where sid = 3;
20. 表中数据删除
- 格式:DELETE FROM 表名 [WHERE 条件];
- 格式:TRUNCATE TABLE 表名 或 TRUNCATE 表名;
DELETE FROM student WHERE name = '王五';
21. 删除表中所有数据
-- 删除表中的所有数据
DELETE FROM tablename;
22. 清空表数据
-- 清空表数据
TRUNCATE TABLE tablename;
TRUNCATE tablename;
注意:delete和truncate原理不同,delete是只删除内容,而truncate类似于drop table,可以理解为是将整个表删除然后再创建该表。
23. SQL约束
约束英文:constraint 将某一列作为唯一标识某一行
约束实际上就是表中数据的限制条件
表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。
主键约束(primary key) PK
自增长约束(auto_increment)
非空约束(not null)
唯一性约束(unique)
默认约束(default)
零填充约束(zerofill)
外键约束(foreign key) FK
24. 主键约束
MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行。
主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键
主键约束的关键字是:primary key
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
25. 添加单列主键
- 创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
- 方式1-语法:
create table 表名(
...
<字段名> <数据类型> primary key
...
)
create table tablename(
eid INT PRIMARY KEY,
name VARCHAR(20),
deptId INT,
salary DOUBLE
);
- 方式2-语法:
create table 表名(
...
[constraint <约束名>] primary key (字段名)
);
create table tablename(
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
CONSTRAINT pk1 primary key (eid) # pk1为主键名 CONSTRAINT pk1可省略
);
- 主键的作用:唯一标识一行数据
- 主键约束的列非空且唯一
INSERT INTO tablename (eid,name,deptId,salary) VALUES(1,'张三',10,5000);
# INSERT INTO tablename (eid,name,deptId,salary) VALUES(1,'张三',10,5000); 报错 主键eid必须唯一
INSERT INTO tablename (eid,name,deptId,salary) VALUES(2,' ',10,5000);
# INSERT INTO tablename (eid,name,deptId,salary) VALUES(NULL,'王五',10,5000); 报错 主键eid不能为空
26. 添加联合主键
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:
1. 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
2. 一张表只能有一个主键,联合主键也是一个主键
3. 主键唯一 只要两个联合主键不是完全一样即可
4. 作为联合主键时 任意一个都不能为空
- 语法:
create table 表名(
...
primary key (字段1,字段2,…,字段n)
);
create table tablename(
name varchar(20),
deptId int,
salary double,
primary key (name,deptId) # CONSTRAINT pk2
);
INSERT INTO emp_3 VALUES ('张三',10,5000);
# INSERT INTO emp_3 VALUES ('张三',10,5000);
-- 报错 主键唯一 只要两个联合主键不是完全一样即可
INSERT INTO emp_3 VALUES ('张三',20,5000);
INSERT INTO emp_3 VALUES ('李四',10,5000);
-- 作为联合主键时 任意一个都不能为空
INSERT INTO emp_3 VALUES (NULL,10,5000);
INSERT INTO emp_3 VALUES ('张三',NULL,5000);
INSERT INTO emp_3 VALUES (NULL,NULL,5000);
27. 通过修改表结构添加主键
create table 表名(
...
);
alter table <表名> add primary key(字段列表);
-- 添加单列主键
create table tablename(
eid int,
name varchar(20),
deptId int,
salary double
);
alter table tablename add primary key(eid);
-- 添加多列主键
CREATE TABLE tablename(
eid INT,
name VARCHAR(20),
deptId INT,
salary DOUBLE
);
ALTER TABLE tablename ADD PRIMARY KEY (name,deptId);
28. 删除主键约束
- 一个表中不需要主键约束时,就需要从表中将其删除。
alter table <数据表名> drop primary key;
29. 自增长约束
- 在MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
- 通过给字段添加 auto_increment 属性来实现主键自增长
字段名 数据类型 auto_increment;
create table tablename(
id int primary key auto_increment,
name varchar(20)
);
INSERT INTO tablename VALUES (NULL,'张三');
INSERT INTO tablename (name) VALUES ('李四');
- 特点:
- 默认情况下,auto_increment的初始值是1,每新增一条记录,字段值自动加1。
- 一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
- auto_increment约束的字段必须具备 NOT NULL 属性。
- auto_increment约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等。
- auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。
30. 指定自增字段初始值
- 如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。
- 方式1,创建表时指定:
create table tablename (
id int primary key auto_increment,
name varchar(20)
) auto_increment=100;
- 方式2,创建表后指定:
create table tablename (
id int primary key auto_increment,
name varchar(20)
);
alter table tablename auto_increment = 1000;
delete和truncate在删除后自增列的变化:
- delete数据之后自动增长从断点开始
- truncate数据之后自动增长从默认起始值开始
DELETE FROM tablename;
INSERT INTO tablename VALUES (NULL,'张三');
# DELETE删除数据之后,自增长还是在最后一个值的基础上+1
TRUNCATE tablename;
INSERT INTO tablename VALUES (NULL,'张三');
# TRUNCATE删除数据后,自增长从1开始,有初始值也是从1开始
DELETE from tablename WHERE id = 10; # 删除最后一个数据后,再次添加数据仍从最后一个开始
31. 取消自增长
-- 删除主键(删除主键之前如果有自增约束,需要先删除自增约束):
alter table 表名 drop primary key;
-- 取消自增长(取消自增长可以修改表字段,不再加自增约束即可):
alter table 表名 change 字段名 字段名 数据类型;
- 在新增自增长之前,也需要先添加主键,否则直接新增自增长,执行语法时会报错。
-- 修改id为主键
alter table 表名 change 字段名 字段名 数据类型 primary key;
-- 修改主键id为自增长
alter table 表名 change 字段名 字段名 数据类型 auto_increment;
32. 非空约束
- 非空约束(notnull)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
- 方式1,创建表时指定:
<字段名><数据类型> not null;
create table tablename (
id int,
name varchar(20) not null,
address varchar(20) not null
);
INSERT INTO tablename(id) VALUES (1); -- 不可以
INSERT INTO tablename(id,name,address) VALUES(1,NULL,NULL); -- 不可以
INSERT INTO tablename(id,name,address) VALUES(1,'NULL','NULL'); -- 可以(字符串:NULL)
INSERT INTO tablename(id,name,address) VALUES(2,'',''); -- 可以(空字符串)
- 方式2,创建表后指定:
alter table 表名 modify 字段 数据类型 not null;
create table tablename (
id int ,
name varchar(20) , -- 指定非空约束
address varchar(20) -- 指定非空约束
);
alter table tablename modify name varchar(20) not null;
alter table tablename modify address varchar(20) not null;
33. 删除非空约束
alter table 表名 modify 字段 类型
alter table tablename modify name varchar(20) ;
alter table tablename modify address varchar(20) ;
34. 唯一约束
- 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。
- 方式1,创建表时指定:
<字段名> <数据类型> unique
create table tablename (
id int ,
name varchar(20) ,
phone_number varchar(20) unique -- 指定唯一约束
);
INSERT into tablename VALUES(1,'张三','138');
INSERT into tablename VALUES(1,'张三','139');
INSERT into tablename VALUES(1,'张三',NULL);
INSERT into tablename VALUES(1,'张三',NULL);
mysql中NULL和任何值都不相同,包括和自己不同
方式2,创建表后指定:
alter table 表名 add constraint 约束名 unique (列);
create table tablename (
id int ,
name varchar(20) ,
phone_number varchar(20) -- 指定唯一约束
);
alter table tablename add constraint unique_ph unique(phone_number);
35. 删除唯一约束
alter table <表名> drop index <唯一约束名>;
alter table tablename drop index unique_ph;
使用约束方式一时,默认将列名作为唯一约束名
36. 默认约束
- MySQL 默认值约束用来指定某列的默认值。
- 方式,1,创建表时指定:
<字段名> <数据类型> default <默认值>;
create table tablename (
id int ,
name varchar(20) ,
address varchar(20) default '北京' -- 指定默认约束
);
INSERT INTO tablename(id,name) VALUES(1,'张三'); -- 默认address张三
INSERT INTO tablename VALUES(2,'李四',NULL); -- 赋值为NULL空
INSERT INTO tablename (id,name,address) VALUES(3,'王五','河北'); -- 使用给定值
- 方式2,创建表后指定:
alter table 表名 modify 列名 类型 default 默认值;
create table tablename (
id int ,
name varchar(20) ,
address varchar(20)
);
alter table tablename modify address varchar(20) default ‘北京’;
37. 删除默认约束
alter table <表名> modify column <字段名> <类型> default null;
alter table tablename modify column address varchar(20) default null;
38. zerofill
- 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
- zerofill默认为int(10)
- 当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128 ~ +127,无符号为0 ~ 256。
create table tablename (
id int(3) zerofill , -- 零填充约束 3位
name varchar(20)
);
INSERT INTO t_user12 VALUES(1,'张三');
INSERT INTO t_user12 VALUES(10101,'张三');
- 删除:
alter table tablename modify id int -- 删除后原有数据也不会补0
2022-06-04
边栏推荐
- HTB-Lame
- Huawei operator level router configuration example | BGP VPLS configuration example
- Detailed list of errors related to twincat3 ads of Beifu
- 伺服第二编码器数值链接到倍福PLC的NC虚拟轴做显示
- leetcode 1818 绝对值,排序,二分法,最大值
- Design of serial port receiving data scheme
- Stop saying that you can't solve the "cross domain" problem
- Clion and C language
- 限流组件设计实战
- VMware vSphere 6.7虚拟化云管理之12、VCSA6.7更新vCenter Server许可
猜你喜欢
HTB-Lame
Cloud native annual technology inventory is released! Ride the wind and waves at the right time
几行事务代码,让我赔了16万
How to verify whether the contents of two files are the same
[linear DP] shortest editing distance
Example of Huawei operator level router configuration | example of configuring optionc mode cross domain LDP VPLS
Thread data sharing and security -threadlocal
Redis分布式锁的8大坑
终极套娃 2.0 | 云原生交付的封装
Introduction and basic knowledge of machine learning
随机推荐
完全背包问题
Let's just say I can use thousands of expression packs
C#实现图的深度优先遍历--非递归代码
如何校验两个文件内容是否相同
访问url 404 的错误
不用加减乘除实现加法
CX5120控制汇川IS620N伺服报错E15解决方案
Example of Huawei operator level router configuration | example of configuring optionc mode cross domain LDP VPLS
网页不能右键 F12 查看源代码解决方案
Hal library operation STM32 serial port
GCC usage, makefile summary
咱就是说 随便整几千个表情包为我所用一下
Cookie&Session
How to verify whether the contents of two files are the same
EtherCAT简介
Nacos
POI exports excel and displays hierarchically according to parent-child nodes
C language EXECL function
Completely solve the lost connection to MySQL server at 'reading initial communication packet
力扣-两数之和