MySQL基础-- [SQL(结构化查询语言), DDL(数据定义语言)]

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础-- [SQL(结构化查询语言), DDL(数据定义语言)]相关的知识,希望对你有一定的参考价值。


Sql(结构化查询语言)


几个概念的区分:

sql: 结构化查询语言
mysql: 是数据库软件的名称
SQLyog: 一款可视化工具

关于SQL的语法和注释

SQL语法

  • 不区分大小写,建议关键字大写,表名、列名小写
  • 每句话用;结束

注释

  • 单行注释:#注释文字

  • 单行注释:-- 注释文字(这里要有空格)

  • 多行注释:/* 注释文字 */


在可视化工具内,写了文件后,可以直接Ctrl+S保存到任意位置;实际上可用记事本打开就是个文本文件


sql的概念以及特点


结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统.

SQL的好处:

  • 不是某个特定数据库供应商专有的语言,几乎所有关系类型数据库(RDBMS)都支持SQL

  • 实际上强有力的语言,灵活使用可以进行非常复杂和高级的数据库操作

分类
按照功能;SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。


DDL(数据定义语言)

DDL(Data Definition Language)数据定义语言;用来创建和修改数据的数据库的表结构.

常用的语句create ,alter,drop,rename.


创建,删除,修改数据库.


创建数据库

注意:数据库的名字定义之后,就不能再去更改了

CREATE DATABASE [if not exists] 数据库名
(这里的 if not exists 只是判断是否存在要创建的库;可以省略不写)



创建数据库时也可以设置字符编码;例如utf8;
CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8]

建议创建数据库时,库名后加 _db(表示datebase)

-- 创建数据库;
#这里可以直接选中语句执行查询语句;然后点击连接;再刷新对象浏览器;
#这里加入 if not exits 判断要创建的库是否存在;
create database if not exists studentmessage_db;

删除数据库

DROP DATABASE 数据库名 / [IF EXISTS数据库名];
这里的IF EXISTS 判断数据库是否存在;也可省略;

修改数据库的字符编码

ALTER DATABASE 数据库名 CHARSET gbk;


数据库存储数据的特点

  • 将数据放到表中,表再放到库中

  • 一个数据库中可以有多个表,每个表都有名字,用来标识自己。表名具有唯一性。

  • 表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中“类”的设计。

  • 表由列组成,我们也称列为字段。所有表都是由一个或多个列组成的,每一列类似java中的”属性”

  • 表中的数据是按行存储的,每一行类似于Java中的“对象”。


数据库表


1.数据表
表(table)是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。表的最简单形式是由行和列组成,分别都包含着数据。 每个表都有一个表头和表体,表头定义表名和列名 .表中的行被看作是文件中的记录,表中的列被看作是这些记录的字段。在一个数据库中,表名不能重复.

2.记录(表的行数据)
记录也被称为一行数据,是表里的一行。在关系型数据库的表里,一行数据是指一条完整的记录。

3.字段(表的列数据)
字段是表里的一列,用于保存每条记录的特定信息。数据表的一列包含了特定字段的全部信息。


设计表
在设计表时,首先要确定表的一些组成部分;
表名(存储的信息,一个表中存储一类信息);表中的字段(列);数据类型以及数据长度;需要哪些约束;(不能为空/主键,外键);


数据库表中数据的数据类型


定长字符串和可变定长字符串

char(n) 长度为n的定长字符串 ;这是固定长度的;

varchar(n) 最大长度为n的可变长字符串
这是固定一个最大长度,里面可以写入低于这个长度的;n 最大值65535

日期和时间

date 日期;格式为: 年月日
datetime 时间;格式为: 年月日 时分秒

整数类型

类型字节最小值最大值
TINYINT1-128127
SMALLINT2-3276832767
MEDIUMINT3-83886088388607
INT4-21474836482147483647
BIGINT8-92233720368547758089223372036854775807

浮点数类型

类型说明
float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d)双精度浮点型 16位精度(8字节) m总个数,d小数位

数据类型(M,D)

类型含义
M精度,数据的总长度;
D标度,小数点后的长度

例如;使用double(8,3)来作为某个数据属性的数据类型;即表示在存入数据时,数据总长度为8,小数点后仅保留3位.


BLOB是一个二进制大对象,可以容纳可变数量的数据,用于存储图片视频信息.在数据库管理系统中,将二进制数据存储为一个单一个体的集合。Blob 对象表示一个不可变、原始数据的类文件对象。

类型最大长度
TINYBLOB最大长度255个字符(2^8-1)
BLOB最大长度65535(2^16-1)
MEDIUMBLOB最大长度16777215(2^24-1)
LONGBLOB最大长度4294967295(2^32-1)

TEXT字符串

类型最大长度
TINYTEXT最大长度255个字符(2^8-1)
TEXT最大长度65535(2^16-1)
MEDIUMTEXT最大长度16777215(2^24-1)
LONGTEXT最大长度4294967295(2^32-1)

数据库表中数据的约束


约束
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)


主键
关系型数据库中的一条记录中有若干个属性,若其中某一列能唯一标识一条记录,该列就是一个主键.不能为空值,不能重复

主键是能确定一条记录的唯一标识,主键是用来保持数据完整性,主键只有一个

外键
外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系外键可以是空值,也可以重复

外键是用来建立与其他表联系用的;外键可以有多个


几种约束

  • PRIMARY KEY (设置主键约束 )

  • NOT NULL (设置不能为空约束)

  • UNIQUE (唯一性约束)

  • 检查约束 CHECK (设置约束条件注意是:mysql8版本时)

  • 外键约束 FOREIGN KEY(设置外键约束)在多个表之间有关系时使用

  • 主键自动增长
    AUTO_INCREMENT 注意:mysql数据库的数据主键可以设置自动增长,数据类型只能是整数

  • 默认值
    DEFAULT default_value 设置该列的数据默认值


字段注释
comment ‘注释’


创建表


CREATE TABLE 表名(列名 数据类型 [约束] [默认值] [ 注释],…)

在刚才的数据库中放入一个表:

建议创建表时加t_(table)表示一个表

#创建学生表;
  #列:  学号;姓名,性别,生日,年级,成绩,手机号,注册时间,
  #添加数据类型:
  #设置约束:
CREATE TABLE t_student(
         #学号:int类型,设置主键;
         id INT PRIMARY KEY COMMENT '主键,学号',
         #姓名:最大长度为5的可定长字符串,设置不能为空约束,
         name VARCHAR(5) NOT NULL COMMENT '姓名',
         #性别:长度为1的定长字符串,设置默认值为女;
         sex  CHAR(1)DEFAULT '女' COMMENT '性别' ,
         #生日:日期类型;
         birthday DATE COMMENT '生日',
         #年级:长度为3的定长字符串,
         grade CHAR(3) COMMENT '年级',
         #成绩:double类型,数值总长度为3,保留小数后1位,且成绩在0-120之间;
         score DOUBLE(3,1) CHECK(score>=0 AND score<=120) COMMENT '成绩',
         #手机号:长度为11位定长字符串,设置唯一约束;
         phone CHAR(11) UNIQUE COMMENT '手机号',
         #注册时间:时间类型,
         registertime DATETIME COMMENT '注册时间' 
)

在这里插入图片描述


测试输入数据得知:
主键:一个表中只能有一个主键,不能为空值,不能重复;
唯一约束:一个表可以有多个,字段可以为空值,但是不能重复;
不能为空的约束:一个表可以有多个,可以重复,但是不能为空.


设置修改表的结构


添加主键约束

ALTER TABLE 表名 ADD PRIMARY KEY(列名)

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY


设置自动增长

ALTER TABLE 表名 MODIFY 列名 类型 AUTO_INCREMENT;

删除自动增长

ALTER TABLE 表名 MODIFY 列名 类型 ;


设置不能为空

ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL;

设置可以为空

ALTER TABLE 表名 MODIFY 列名 类型 NULL;


添加唯一约束

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名)

删除唯一约束

ALTER TABLE 表名 DROP INDEX 约束名;


添加检查约束

ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(条件)

删除检查约束

ALTER TABLE 表名 DROP CHECK 约束名;


添加列

ALTER TABLE 表名 ADD 列名 数据类型
ALTER TABLE 表名 ADD 列名 数据类型 FIRST 将指定列放在第一列
ALTER TABLE 表名 ADD 列名 数据类型 AFTER 列名 将指定列放在指定的某个列后面

删除列

ALTER TABLE 表名 DROP 列名


修改列名

ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型


修改列的数据类型

ALTER TABLE 表名 MODIFY 列名 新数据类型


修改表前面都是ALTER TABLE 表名;
在删除时使用DROP,后面不需要注明数据类型;添加用ADD;修改大部分用MODIFY


删除表


DROP TABLE [if exists ] 表名
这里if exists 判断表是否存在.

修改表名


RENAME TABLE 旧表名 TO 新表名
或者: ALTER TABLE 旧的表名 RENAME 新的表名;


复制表结构


只是复制表的结构(列名,数据类型,约束…);而不是复制表的数据

CREATE TABLE 新表名 LIKE 被复制表名;


以上是关于MySQL基础-- [SQL(结构化查询语言), DDL(数据定义语言)]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础语法学习

MySQL基础语法学习

初识MySQL之——SQL语言基础

day06-python数据库-mysql之基础

SQL基础入门

专职DBA-MySQL-SQL基础应用