MySQL基础-DDL语句

MySQL基础-DDL语句 -- pd的MySQL笔记

文章目录

SQL语言分类

  1. 数据查询语言(DQL:Data Query Language)其语句,也称为"数据检索语句",用以从表中获得数据,确定数据怎样在应用程序给出。关键字 SELECT 是 DQL(也是所有 SQL)用得最多的动词。
    • SELECT
    • FROM
    • WHERE
    • ORDER BY
    • HAVING
  2. 数据操作语言(DML:Data Manipulation Language)其语句包括动词 INSERT,UPDATE 和 DELETE。它们分别用于添加,修改和删除表中的行。
    • INSERT:添加数据
    • UPDATE:更新数据
    • DELETE:删除数据
  3. 数据定义语言(DDL:Data Definition Language)定义数据库对象语言,其语句包括动词 CREATE 和 DROP 等。
    • CREATE:创建数据库对象
    • ALTER:修改数据库对象
    • DROP:删除数据库对象
  4. 数据控制语言(DCL:Data Control Language)它的语句通过 GRANT 或 REVOKE 获得许可,确定用户对数据库对象的访问。
    • GRANT:授予用户某种权限
    • REVOKE:回收授予的某种权限
  5. 事务控制语言(TCL :Transaction Control Language)它的语句能确保被 DML 语句影响的表的所有行及时得以更新。
    • COMMIT:提交事务
    • ROLLBACK:回滚事务
    • SAVEPOINT:设置回滚点

创建、删除、修改

数据库

使用DDL语言创建数据库:

sql 复制代码
CREATE DATABASE db_name
    DEFAULT CHARACTER SET = 'utf8mb4';

查看数据库

sql 复制代码
SHOW DATABASES;

使用某数据库

sql 复制代码
USE db_name;

使用DDL语言删除数据库:

sql 复制代码
DROP DATABASE db_name;

数据表

使用DDL语言创建数据表:

sql 复制代码
CREATE TABLE table_name (
    COLUMN_NAME1 DATA_TYPE1,
    column_name2 DATA_TYPE2,
)

举例创建一个employees表:包含雇员ID,雇员名字,雇员薪资

sql 复制代码
CREATE TABLE employees (
    employee_id INT,
    name VARCHAR(10),
    salary Float(8,2)
)

查看已创建的表

sql 复制代码
SHOW TABLES;

使用DDL语言删除数据表:

sql 复制代码
DROP TABLE table_name;
drop table employees;

使用DDL语言修改数据表:

sql 复制代码
-- 重命名表
ALTER TABLE table_name RENAME new_name;
alter table employees rename employees_new;
-- 修改字段 (修改列名、 修改数据类型)
ALTER TABLE table_name CHANGE COLUMN old_name new_name DATA_TYPE;
alter table employees change column name new_name VARCHAR(10);
  -- 只修改数据类型
ALTER TABLE table_name MODIFY COLUMN column_name DATA_TYPE;
alter table employees modify column salary Float(6,2);

使用DDL语句,添加新的列

sql 复制代码
ALTER TABLE table_name ADD COLUMN column_name DATA_TYPE;
-- 在employees表中添加一个新的佣金百分比列
alter table employees add column commission Float(5,3);

使用DDL语句,删除列

sql 复制代码
ALTER TABLE table_name DROP COLUMN column_name;
alter table employees drop column commission;

MySQL数据类型

整数类型

数据类型 描述
tinyint(m) 1字节,-128~127
smallint(m) 2字节,-32768~32767
mediumint(m) 3字节,-8388608~8388607
int(m) 4字节,-2147483648~2147483647
bigint(m) 8字节,-9223372036854775808~9223372036854775807

数值类型中的长度 m 是指显示长度,并不表示存储长度,只有字段指定 zerofill 时有用

  • 例如: int(3) ,如果实际值是 2 ,如果列指定了 zerofill ,查询结果就是 002 ,左边用 0 来 填充

浮点类型

数据类型 描述
float(m,d) 单精度浮点型 8位精度(4字节) m 表示总长度,d 表示小数长度
double(m,d) 双精度浮点型 16位精度(8字节) m 表示总长度,d 表示小数长度
  • 单精度浮点型存储约6-9位有效数字,双精度浮点型存储约15-17位有效数字;
  • double占用空间是float的两倍
  • 科学计算、金融等需要高精度时用double;图形处理、机器学习等大规模数据且精度要求不高时常用float。

字符串类型

数据类型 描述
char(m) 固定长度字符串,m 表示长度,最大长度为255字节
tinytext 可变长度,255字节长度的字符串
varchar(n) 可变长度,最多65535字节长度的字符串
text 可变长度,65535字节长度的字符串
mediumtext 可变长度,2^24-1字节长度的字符串
longtext 可变长度,2^32-1字节长度的字符串

char和varchar:

  • char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
  • varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
  • text不设置长度, 当不知道属性的最大长度时,适合用text。

按照查询速度: char最快, varchar次之,text最慢。

日期类型

数据类型 描述
date 日期类型,格式为 yyyy-mm-dd
time 时间类型,格式为 hh:mm:ss
datetime 日期时间类型,格式为 yyyy-mm-dd hh:mm:ss
timestamp 时间戳类型,格式为 yyyymmdd hhmmss

如果项目是跨时区的,使用timestamp,因为datetime不支持时区处理,而timestamp可以处理时区。

二进制数据(BLOB)

  • BLOB和TEXT存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写。
  • BLOB存储的数据只能整体读出。
  • TEXT可以指定字符集,BLOB不用指定字符集。

关系型数据库的约束

数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。

  1. 主键约束(Primary Key) PK
    1. 不允许为空
    2. 不允许重复
    3. 保证数据的唯一性
  2. 外键约束(Foreign Key) FK
    1. 允许为空
    2. 允许重复
    3. 值必须是参照表的参照列中所包含的值
    4. 保证数据参照完整性
  3. 唯一约束(Unique)
    1. 相同值只能出现一次
    2. 允许为多个列添加唯一约束
    3. 保证数据的唯一性
  4. 非空约束(Not Null)
    1. 列中不能有空值
    2. 允许重复值
    3. 允许为多个列添加非空约束
    4. 保证数据没有空值
  5. 检查约束(Check) --当前MySQL不支持
    1. 用户自定义检查条件
    2. 保证数据满足自定义的条件约束

主键约束

  1. 单一主键:使用一个列作为主键列,当该列的值有重复时,则违反主键约束。
  2. 联合主键:使用多个列作为主键列,当这些列的值有重复时,则违反主键约束。

使用DDL语句添加主键约束

sql 复制代码
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
alter table employees add primary key (employee_id);

主键自增长:

  • 一个表中只允许有一个自增列
  • 自动增长的列的类型必须是整数类型
  • 自动增长只能添加到具备主键约束与唯一性约束的列上
  • 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长,然后才能删除主键约束或唯一性约束

使用DDL语句添加自增列:

sql 复制代码
ALTER TABLE table_name MODIFY column_name DATA_TYPE AUTO_INCREMENT;
alter table employees modify employee_id int auto_increment;

使用DDL语句删除主键约束:

sql 复制代码
ALTER TABLE table_name DROP PRIMARY KEY;
-- 先去掉自动增长
alter table employees modify employee_id int;
alter table employees drop primary key;

外键约束(Foreign Key)

使用DDL语句添加外键约束:

sql 复制代码
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table_name (referenced_column_name);
-- 在employee表中加入对应部门列,先新建部门表
create table departments(
    department_id int primary key auto_increment,
    department_name varchar(20) not null,
    location varchar(20) not null,
)
-- 给employee表添加外键约束
alter table employees add constraint emp_dep foreign key (department_id) references departments(department_id);

使用DDL语句删除外键约束:

sql 复制代码
ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
-- 删除employee表中的外键约束
alter table employees drop foreign key emp_dep;

唯一约束(Unique)

使用DDL语句添加唯一约束:

sql 复制代码
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);
-- 给name列添加唯一约束
alter table employees add constraint emp_name unique (name);

使用DDL语句删除唯一约束:

sql 复制代码
ALTER TABLE table_name DROP KEY constraint_name;
-- 删除name列的唯一约束
alter table employees drop key emp_name;

非空约束(Not Null)

使用DDL语句添加非空约束:

sql 复制代码
ALTER TABLE table_name MODIFY column_name DATA_TYPE NOT NULL;
-- 向employee表中的salary添加非空约束
alter table employees modify salary float(10,2) not null;

使用DDL语句删除非空约束:

sql 复制代码
ALTER TABLE table_name MODIFY column_name DATA_TYPE NULL;
-- 删除salary列的非空约束
alter table employees modify salary float(10,2) null;

创建表时添加约束

要求: 创建 depts 表包含 department_id 该列为主键且自动增长,department_name 列不 允许重复,location_id 列不允含有空值。

sql 复制代码
create table depts(
    department_id int primary key auto_increment,
    department_name varchar(30) not null unique,
    location_id int not null,
)

默认值处理

在 MySQL 中可以使用 DEFAULT 为列设定一个默认值。如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中

要求:创建 emp3 表,该表包含 emp_id 主键且自动增长,包含 name ,包含 address 该列默认值为"Unkown"

sql 复制代码
create table emp3(
   emp_id int primary key auto_increment,
   name varchar(20) not null,
   address varchar(20) default 'Unkown'
)

修改表添加新列并指定默认值

sql 复制代码
ALTER TABLE table_name ADD COLUMN column_name DATA_TYPE DEFAULT value;
-- 修改 emp3 表,添加job_id 该列默认值为 0
alter table emp3 add column job_id int default 0;
相关推荐
我就是你毛毛哥2 小时前
Spring Boot 项目使用 EasyExcel 实现导出功能
数据库·spring boot·oracle
BD同步2 小时前
铷原子频率标准设备存在的意义是什么
大数据·数据库·人工智能
白山云北诗2 小时前
一文读懂什么是CC攻击
网络·数据库·tcp/ip·网络安全·cc·cc攻击·请求数
L1624762 小时前
MySQL 8.0+ MHA 高可用集群搭建(生产环境级・超详细)
数据库·mysql
2401_838472512 小时前
构建一个桌面版的天气预报应用
jvm·数据库·python
秦苒&2 小时前
【脉脉】AI 创作者 xAMA 知无不言:在浪潮里,做会发光的造浪者
大数据·c语言·数据库·c++·人工智能·ai·操作系统
码农水水2 小时前
美团Java面试被问:Netty的ByteBuf引用计数和内存释放
java·开发语言·数据库·mysql·算法·面试·职场和发展
a努力。2 小时前
国家电网Java面试被问:分布式Top K问题的解决方案
java·开发语言·分布式·oracle·面试·职场和发展·kafka
码农水水2 小时前
浅谈 MySQL InnoDB 的内存组件
java·开发语言·数据库·后端·mysql·面试