首页 > 数据库 >SQL语句——DDL数据定义语言

SQL语句——DDL数据定义语言

时间:2024-07-19 20:54:19浏览次数:16  
标签:varchar DEFAULT DDL 定义语言 外键 约束 stu SQL table

1.sql语言不区分大小写
2._(下划线)进行名字的分割,不适用驼峰命名
3.;  语句sql结尾处加一个;来表示结束
4.一般关键词建议用大写
5.所有名称不能用中文

1.创建数据库

CREATE DATABASE [IF NOT EXISTS] 库名

-- 库
#创建库
#create database xiaozhao;
#create database teacher;

2.删除数据库

DROP DATABASE [IF EXISTS] 库名

#删除库
#drop database teacher;

•“[IF EXISTS] ”内容可以省略;

3.查看数据库

SHOW DATABASES

#查看所有的库
#show DATABASES;

其中:

• 注意不要省略“s” 

4.使用数据库

USE xiaozhao

#库
-- 使用库
use xiaozhao;

其中: •“xiaozhao”是创建的数据库名称。 

5.数据库表的字段类型

1.字符串类型

类型说明取值范围
char[(M)]固定长度字符串,M即固定是长度M字符
varchar[(M)]可变字符串变长度
tinytext微型文本串16777215长度+3个字节
text文本串(4个G左右大小)4294967295长度+4个字节

char和varchar比较

类型特点空间上时间上适用场景
char[(M)]固定长度浪费存储空间效率高存储不大,速度要求高
varchar[(M)]可变长度节省存储空间效率低非CHAR的情况

数值类型 

 

日期和事件类型

6.DDL创建数据库表

CREATE TABLE [ IF NOT EXISTS ] `表名` (

        `字段名1` 字段类型 [ 属性] [ 索引] [注释] ,

        `字段名2` 字段类型 [属性] [索引] [注释] ,

         … …

        `字段名n` 字段类型 [属性] [ 索引] [注释] )

         [ 表类型 ] [ 表字符集 ] ;

CREATE TABLE [ IF NOT EXISTS ]  表名(
     字段名  类型  属性,
     字段名  类型  属性,
     ……
     字段名  类型  属性
);

create table student(
    stu_name varchar(10),
    stu_age tinyint,
    stu_birthday datetime,
    stu_id char(18),
    stu_score decimal(4,1)
); 

其中:

•“[]” 包含的内容可以省略;

•“`” 当前符号为反引号,用于区别MySQL保留字与普通字符而引入的。

7.查看表结构

方式1

desc  表名

方式2  

create table 表名

desc student;
-- 出现表后,全选->复制-.>粘贴,既可以显示执行语句的具体实现方式
show create table student;
/*
CREATE TABLE `student` (
  `stu_name` varchar(10) DEFAULT NULL,
  `stu_age` tinyint(4) DEFAULT NULL,
  `stu_birthday` datetime DEFAULT NULL,
  `stu_id` char(18) DEFAULT NULL,
  `stu_score` decimal(4,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
        
反引号:取消特殊性,即`table`也可以做表名
DEFAULT NULL:默认为空,可以不写值
DEFAULT CHARSET:默认字符集utf8mb4
COLLATE=utf8mb4_0900_ai_ci:字符排序
ENGINE=InnoDB:存储引擎
    存储:
    引擎:搜索引擎、游戏引擎、(物理碰撞)物理引擎,根据制定好的规则,
*/

 出现表后,全选->复制-.>粘贴,既可以显示执行语句的具体实现方式

CREATE TABLE `student` (
  `stu_name` varchar(10) DEFAULT NULL,
  `stu_age` tinyint(4) DEFAULT NULL,
  `stu_birthday` datetime DEFAULT NULL,
  `stu_id` char(18) DEFAULT NULL,
  `stu_score` decimal(4,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
        
(` `)反引号:取消特殊性,即`table`也可以做表名
DEFAULT NULL:默认为空,可以不写值
DEFAULT CHARSET:默认字符集utf8mb4
COLLATE=utf8mb4_0900_ai_ci:字符排序
ENGINE=InnoDB:存储引擎
    存储:
    引擎:搜索引擎、游戏引擎、(物理碰撞)物理引擎,根据制定好的规则,
 

8.外键约束

约束实际上就是表中数据的限制条件

作用:表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效

约束种类:

  • 非空约束(not null)
  • 唯一性约束(unique)
  • 主键约束(primary key) PK
  • 外键约束(foreign key) FK
  • 检查约束(目前MySQL不支持、Oracle支持)

添加非空约束

alter table 表名 modify test_student char(10) not null;

#非空约束(设置默认值)
create table tb(
	username varchar(10) not null default "无名",
	userage int
);

 添加唯一性约束(unique)

alter table 表名 add unique(表字段名,字段,字段,字段);

#唯一约束
-- 可以为null,并且可以有多个null,因为null是一个类型
#行级约束:每个字段各是各的约束
create table tb1(
	username varchar(10) unique,
	userage int
);
#表级约束(联合唯一约束),可同时约束多个字段unique(username,userage)
create table tb2(
	username varchar(10),
	userage int,
	unique(username,userage)
#当表级约束的所有字段完全一样时,才会出现错误(字段之间是有关联的,必须每个字段的值都相同时)
);

添加主键约束 

alter table 表名 add primary key(表的字段名,字段,字段);

#主键约束
-- 主键的值是唯一的
-- 主键值不可以为空
create table tb4(
	username varchar(10) primary key ,
	userage int
);
create table tb5(
	username varchar(10),
	userage int,
	primary key(username,userage)
#联合主键,联合约束
#只有当两个值都一样时才会触发约束
);

#一般主键的创建方式
-- int bitint 自增
-- 主键的值是不会回补的(关系型数据库,表与表之间有关系)
create table tb6(
	tid int primary key auto_increment,
	username varchar(10),
	userage int
);

添加外键约束

alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);

只能选主表已有的
保留外键关系,但不写外键约束
外键关系:只是存在外键关系,但没有实际约束
外键约束:对从表中的外键有一定的约束

1.外键的值可以重复
2.外键的值可以为null
3.外键必须要写父表中有的数据
4.父表中的关联字段必须是一个具有唯一性的数据
5.父表的字段名和从表的字段名不一定相同,但数据类型必须一致
6.一个表中可以有多个外键,也可以有多个外键约束,但只能有一个外键

7.删除时先删除子表数据,再删除父表数据

#外键约束:只能选主表已有的
/*保留外键关系,但不写外键约束
外键关系:只是存在外键关系,但没有实际约束
外键约束:对从表中的外键有一定的约束
create table a(
	aid int primary key auto_increment,
	aname varchar(10)
);
drop table b;
create table b(
	bid int primary key auto_increment,
	bname varchar(10),
	aid int,
	foreign key(aid) references a(aid)
);

 删除约束

删除not null约束

alter table 表名 modify 列名 类型;

删除unique约束

alter table 表名 drop index 唯一约束名;

删除primary key约束

alter table 表名 drop primary key;

删除foreign key约束

alter table 表名 drop foreign key 外键名;

标签:varchar,DEFAULT,DDL,定义语言,外键,约束,stu,SQL,table
From: https://blog.csdn.net/2401_82742105/article/details/140556613

相关文章

  • WebKit 的 Web SQL 数据库:现代浏览器的本地存储解决方案
    WebKit的WebSQL数据库:现代浏览器的本地存储解决方案随着Web应用的不断发展,对本地存储的需求也日益增加。WebKit作为许多现代浏览器的核心引擎,提供了一种强大的本地存储解决方案:WebSQL数据库。本文将详细探讨WebSQL数据库的工作原理、支持情况以及如何利用它进行数......
  • sql server2008出现set 选项的设置不正确:"ARITHABORT”
    (SELECTSTUFF((SELECT'',''+CODEFROMINVNEWSAL11WHERE(MASTERI=BILRCV.SRCERI)OR(LINKERIIN(SELECTLINKERIFROMINVPROLOGWHEREDTYPE=0ANDPEERVERI=0ANDMERI=BILRCV.SRCERI))FORXMLPATH('''&......
  • paddleocr识别并按行输出结果
    frompaddleocrimportPaddleOCR#初始化OCR引擎ocr=PaddleOCR(use_angle_cls=True,lang="ch")#使用中文模型#对图像进行OCR识别img_path='./imgs/img_3.png'result=ocr.ocr(img_path,cls=True)#按y坐标对文本块进行排序sorted_result=sorted(result,......
  • MySQL Online DDL详解
    一、OnlineDDL的发展历史MySQLOnlineDDL功能从5.6版本开始正式引入,发展到现在的8.0版本,经历了多次的调整和完善。本文主要就OnlineDDL的发展过程,以及各版本的区别进行总结。其实早在MySQL5.5版本中就加入了INPLACEDDL方式,但是因为实现的问题,依然会阻塞INSERT、U......
  • 【笔记】从0开始的sql注入漏洞学习
    【笔记】从0开始的sql注入漏洞学习SQL数据库操作基础第一部分:MYSQL(MariaDB)基础操作1.连接数据库:mysql-uroot-p-u 输入登录用户名-p 输入密码(这个没有密码)2.显示系统中所有数据库的名称showdatabases;3.新建数据库studentcreatedatabasestudent;使用以下命令......
  • 【SQL】晨光咖啡馆,过滤聚合的微妙碰撞
    【SQL】晨光咖啡馆,过滤聚合的微妙碰撞  这天,小悦懒洋洋地步入办公楼下的咖啡馆,意外地与一位男子不期而遇。他显然因前一晚的辛勤工作而略显疲惫,却仍选择早到此地,寻找一丝宁静与放松。他叫逸尘,身姿挺拔,衣着简约而不失格调,晨光下更显英俊不凡,吸引了周遭的目光。两人仿佛心有灵......
  • mysql联合索引优化
    【MySQL】之联合索引与最左匹配原则王廷云的博客已于2023-12-1009:48:32修改阅读量2k收藏24点赞数28分类专栏:MySQL文章标签:mysql数据库版权MySQL专栏收录该内容27篇文章3订阅订阅专栏前言:最左匹配原则在我们MySQL开发过程中和面试过程中经常遇到,为了加深印象和......
  • 基于Java和MySQL的数据库优化技术
    基于Java和MySQL的数据库优化技术大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何基于Java和MySQL进行数据库优化,提升系统的性能和稳定性。我们将从查询优化、索引使用、事务管理以及连接池配置几个方面来介绍具体的优化技术。1.查询......
  • java比较mysql两个数据库中差异
    java对比两个库之间差异packagecom.ruoyi.shht;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.tex......
  • SQL Prompt安装不上(报错:1603)
     一开始一直跟踪服务看到是RedGateClient运行不起来(报错信息代码是这个1603),后面查询到官网:https://productsupport.red-gate.com/hc/en-us/articles/360015772598-Redgate-Client-Service-fails-to-start使用管理员运行CMD执行:netshhttpaddiplisten127.0.0.1 之后再......