当前位置: 代码迷 >> 综合 >> DDL(data definition language)语言学习
  详细解决方案

DDL(data definition language)语言学习

热度:33   发布时间:2023-11-21 17:44:28.0

目录

一、库的管理

1、库的创建

2、库的修改

3、库的删除

4、库的查询

5、库的使用

二、表的管理

1、表的创建

2、表的修改

3、表的删除

4、表的复制


一、库的管理

1、库的创建

语法:

创建数据库

CREATE DATABASE 库名;

创建数据库,判断该库存不存在,再来创建

CREATE DATABASE IF NOT EXISTS 库名;

2、库的修改

RENAME DATABASE     库名    TO   新库名(一般不用,容易造成错误)

更改库的字符集

ALTER DATABASE   库名   CHARACTER SET    gdk(新字符集)

3、库的删除

DROP DATABASE 库名

删除数据库,判断该库存在不存,再来删除

DROP DATABASE  IF NOT EXISTS    库名

4、库的查询

SHOW DATABASE 

5、库的使用

USE  库名

二、表的管理

1、表的创建

语法: CREATE TABLE 表名(
列名,列的数据类型【(长度)  约束】

列名,列的数据类型【(长度)  约束】

列名,列的数据类型【(长度)  约束】

...);

常见的数据类型

①数值型(整型)

TINTINT(size):  1个字节  -128 到 127 有符号。0 到 255 无符号。在括号中规定最大位数。

SMALLINT(size): 2个字节   -32768 到 32767 有符号。0 到 65535 无符号。在括号中规定最大位数。

MEDIUMINT(size): 3个字节    -8388608 到 8388607 有符号。0 to 16777215 无符号。在括号中规定最大位数。

INT(size): 4个字节  -2147483648 到 2147483647 有符号。0 到 4294967295 无符号。在括号中规定最大位数。

BIGINT(size):8个字节   -9223372036854775808 到 9223372036854775807 有符号。0 到 18446744073709551615 无符号。在括号中规定最大位数。

特点:1、如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字

           2、如果插入的数值超过了整型的范围,会报out of range异常,并插入临界值

           3、如果不设置长度,会有默认长度

②数值型(小数)

浮点型:

FLOAT(M,D): 4个字节  带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

DOUBLE(M,D): 8个字节  带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

定点型

DECIMAL(M,D): M+2字节  作为字符串存储的 DOUBLE 类型,允许固定的小数点。

特点:1、M代表整数位数-小数位数;D代表小数位数

           2、M和D可以省略

             如果是decimal,则M默认为10,D默认为0

             如果是float、double,则会根据插入的数值的精度来决定精度

            3、定点型的精度较高,如果要求插入数据的精度较高,如货币运算则考虑定点型

③文本型

CHAR(M):最多M个字节  保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。(固定长度的字符,空间比较耗费,效率较高,如果不写M,默认为1)

VARCHAR(M): 最多M个字节  保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符(可变长度的字符,空间比较节省,效率较低)

BIT() :允许0,1或NULL

BINARY(n):固定长度的二进制数据。最多8000字节

VARBINARY(n):可变长度的二进制数据。最多8000字节

ENUM((x,y,z,etc.):允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。

注释:这些值是按照你输入的顺序存储的。

可以按照此格式输入可能的值:ENUM('X','Y','Z')

SET():与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

④日期型

DATE():只保存日期。格式:YYYY-MM-DD

TIMESTAMP():保存日期和时间。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS(4个字节,=,1970-2038,受时区影响)

DATETIME():保存日期和时间。格式:YYYY-MM-DD HH:MM:SS(8个字节,1000-9999,不受时区影响)

TIME():保存时间。格式:HH:MM:SS

YEAR():保存年。2 位或 4 位格式的年。

常见的约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性。

NOT NULL:非空约束,用于保证该字段的值不能为空。比如姓名、学号等。

DEFAULT:默认,用于保证该字段有默认值。比如性别。

PRIMARY KEY:主键,用于保证该字段的值具有唯一值,并且非空。比如学号、员工编号。(保证唯一性,不允许非空,一个表只有一个)

UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。比如座位号。(保证唯一性,允许非空,一个表允许多个)

CHECK:检查约束【mysql中不支持】

FOREIGN  KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。

外键约束的格式 :foreign key (列名) references 表名(列名) 

外键的特点:1、要求在从表设置外键关系

                      2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求

                      3、主要的关联列必须是一个key(一般是主键或唯一)

                       4、插入数据时,先插入主表,zai'cha在插入从表

                             删除数据时,先删除从表,在删除主表

添加约束的时机:

1、创建表时

2、修改表时

①添加列级约束

ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型 新约束

②添加表级约束

ALTER TABLE 表名 ADD 【CONSTRAINT 约束名】 约束类型(列名)【外键的引用】

约束的添加分类:

列级约束:在列的后面添加约束

只支持:默认default,非空not null,主键primary key,唯一unique

表级约束:在表的后面添加约束

除了非空not null,默认default,其他的都支持

语法: 

  【CONSTRAINT 约束名】 约束类型(字段名)

例子:CREATE TABLE 表名(

        列名 数据类型 约束,

        列名 数据类型 约束,

        ...

        表级约束

2、表的修改

语法:

ALTER TABLE 表名   CHANGE/MODIFY/ADD/DROP COLUMN】  列名  列数据类型   约束;

①修改列名

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

②修改列的类型和约束

ALTER TABLE 表名 MODIFY 【COLUMN】 列名 新数据类型

③添加新列

ALTER TABLE 表名 ADD 【COLUMN】 列名 数据类型

④删除列

ALTER TABLE 表名 DROP 【COLUMN】 列名

⑤修改表名

ALTER TABLE 表名 RENAME TO 新表名

修改表时删除约束

①删除非空约束

ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型 NULL

②删除默认约束

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

③删除主键

ALTER TABLE 表名  DROP PRIMARY KEY

④删除唯一

ALTER TABLE 表名  DROP INDEX 列名

⑤删除外键

ALTER TABLE 表名   DROP FOREIGN KEY  外键约束名

3、表的删除

DROP TABLE 表名

 

4、表的复制

①仅仅复制表的结构

语法:CREATE TABLE 新建表名 LIKE 要复制的表名

②复制表的结构和数据

CREATE TABLE 新建表名

SELECT * FROM 要复制的表名

复制部分内容

CREATE TABLE 新建表名

SELECT 列名1,列名2,.. 

FROM 要复制的表名

WHERE 筛选条件

仅仅复制某些字段

CREATE TABLE 新建表名

SELECT 列名1,列名2,..

FROM 要复制的表名

WHERE 1/0;

标识列(自增长列)

含义:可以不用手动的插入值,系统提供默认的序列值

1、创建表时设置标识列

在需要增长的列名后面加上:AUTO_INCREAMENT

再插入的数据中列名对应的值填上null

 

文章部分来源:https://www.w3school.com.cn/sql/index.asp

该网站巨强

 

 

  相关解决方案