草庐IT

DDL-(Data Definition Language)

yellow-mokey 2023-03-28 原文

DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库,表,字段)。

数据库操作

查询所有数据库

show databases;

查询当前数据库

select database();

创建数据库

create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ];
/*例:创建一个study数据库,并且指定字符集*/
create database if not exists study default charset utf8mb4;

删除数据库

drop database [ if exists ] 数据库名;

切换数据库

use 数据库名 ;

表操作

表操作-查询

查询当前数据库所有表

show tables;

查看指定表结构

desc 表名;

通过这条指令,我们可以查看到指定表的字段(Field)、字段的类型(Type)、是否可以为空(Null)、是否存在默认值(Default)等信息。

查询指定表的建表语句

show create table 表名;

通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询到,因为这部分是数据库的默认值,如:存储引擎、字符集等。

表操作-创建

create table 表名(
	字段1 字段1类型 [ comment 字段1注释 ],
	字段2 字段2类型 [ comment 字段2注释 ],
	字段3 字段3类型 [ comment 字段3注释 ],
	......
	字段n 字段n类型 [comment 字段n注释 ]
) [ comment 表注释 ];

表操作-数据类型

数值类型

类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述
TINYINT 1byte (-128,127) (0,255) 小整数值
SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值
INT/INTEGER 4bytes (-2147483648, 2147483647) (0,4294967295) 大整数值
BIGINT 8bytes (-263,263-1) (0,2^64-1) 极大整数值
FLOAT 4bytes (-3.402823466 E+38, 3.402823466351 E+38) 0 和 (1.175494351 E- 38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8bytes (-1.7976931348623157 E+308, 1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308, 1.7976931348623157 E+308) 双精度浮点数值
DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点数)
例:
/*年龄字段:不会出现负数,而且人的年龄不会太大。*/
age tinyint unsigned
/*分数:总分100分,最多出现一位小数。*/
score double(4,1)

字符串类型

类型 大小 描述
CHAR 0-255 bytes 定长字符串(需要指定长度)
VARCHAR 0-65535 bytes 变长字符串(需要指定长度)
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。
例:

# 用户名 username ------> 长度不定, 最长不会超过50
username varchar(50)
# 性别 gender ---------> 存储值, 不是男,就是女
gender char(1)
# 手机号 phone --------> 固定长度为11
phone char(11)

日期时间类型

类型 大 小 范围 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续 时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时 间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时 间值,时间戳

如:

/*生日字段*/
birthday date
/*创建时间*/
createtime datetime

数据类型创建表举例

设计一张员工信息表,要求如下:

  1. 编号(纯数字)
  2. 员工工号 (字符串类型,长度不超过10位)
  3. 员工姓名(字符串类型,长度不超过10位)
  4. 性别(男/女,存储一个汉字)
  5. 年龄(正常人年龄,不可能存储负数)
  6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
  7. 入职时间(取值年月日即可)
    对应的建表语句如下:
create table emp
(
    id        int comment '编号',
    workno    varchar(10) comment '工号',
    name      varchar(10) comment '姓名',
    gender    char(1) comment '性别',
    age       tinyint unsigned comment '年龄',
    idcard    char(18) comment '身份证号',
    entrydate date comment '入职时间'
) comment '员工表';

表操作-修改

添加字段

alter table 表名 add 字段名 类型(长度) [ comment 注释 ] [ 约束 ] ;

修改数据类型

alter table 表名 modify 字段名 新数据类型(长度) ;

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型(长度) [ comment 注释 ] [ 约束 ];

删除字段

alter table 表名 drop 字段名;

修改表名

alter table 表名 rename to 新表名;

表操作-删除

删除表

drop table [ if exists ] 表名;

可选项 if exists 代表,只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)

删除指定表, 并重新创建表

truncate table 表名;

注意:在删除表的时候,表中的全部数据也都会被删除。

有关DDL-(Data Definition Language)的更多相关文章

  1. 从0开始快速使用StarUml画ER图,生成SQL建表代码,附解决DDL常见报错方法 - 2

    使用StarUml画ER图,生成SQL建表代码,解决常见报错遇到稍微复杂一些的业务,先整理需求在下手会使得开发过程中头发少掉一些,尤其是团队合作的项目效果尤为明显,在整理完业务需求后,从数据库开始下手能让后端的头发掉少一些.找个好的软件能在整理数据库的时候再少掉点头发,并且减轻简单重复的打字工作.如果图画好了,数据库建表的语句能自动打出来就好了.诶,还真有软件可以做到,而且还容易使用,这实属是懒人福音,头发的救星啊.快速开始在这里假设您了解什么是ER图以及一些相关的知识,本文将会在两分钟内结合图片介绍StarUml画ER图的方法.点击链接下载安装StarUml.有点可惜的是这个软件是收费的,而

  2. sql - 是否有将数据库模式(SQL DDL)转储为 XML 的工具? - 2

    我希望从SQL(Postgres)DDL自动生成数据库模式的XML版本。是否有任何工具可以帮助从DDL转换为XML?xml2ddl声称这样做,但它无法连接并且自2005年以来似乎不受支持。 最佳答案 您可以使用内置的table_to_xmlschema等;见http://www.postgresql.org/docs/current/static/functions-xml.html#FUNCTIONS-XML-MAPPING. 关于sql-是否有将数据库模式(SQLDDL)转储为XML

  3. c# - 字符 Å Ä Ö 没有显示在我的 DDL 中,我如何告诉 restclient 使用特定的字符集? - 2

    在我开始之前这里是问题所在。应该是这样的:BjörnNilsson,而不是它显示奇怪的特殊字符,所有具有字符Å、Ä和Ö的值都变成这样。我用具有所有值的XML格式的API值填充我的DDL,我们还为此使用了Linq2Rest。这个过程是这样的privatereadonlyRestContextrestContext;publicConsultantContext(Uriuri,Formatformat){restContext=newRestContext(GetRestClient(uri,format),GetSerializerFactory(format));}publicenum

  4. MySQL基础篇 | union、limit、DDL、DML、约束 - 2

    ✅作者简介:大家好我是@每天都要敲代码,希望一起努力,一起进步!📃个人主页:@每天都要敲代码的个人主页🔥系列专栏:MySQL专栏目录一:union的使用二:limit及通用分页SQL(重要)三:表结构(DDL)1.创建表(creat)2.修改表(alter)3.删除表(drop)四:处理表中数据(DML)1.插入表中的数据insert2. 修改表中的数据update3. 删除表中的数据delete&truncate五:约束1. 非空约束notnull2.唯一约束unique3. 主键约束primarykey 4.  外键约束  foreignkey一:union的使用union:可以将查询结果

  5. php - 如何修复 PHP 警告 : Unable to load dynamic library: php_intl. ddl - 2

    这个问题在这里已经有了答案:PHPWarning:PHPStartup:Unabletoloaddynamiclibrary(20个答案)关闭6年前。请问我该如何解决这个问题?我在OSX10.11.3上运行php5.6PHPWarning:PHPStartup:Unabletoloaddynamiclibrary'/usr/lib/php/extensions/no-debug-non-zts-20121212/php_intl.dll'-dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/php_intl.dll,9):i

  6. php - PHP 为 SQL DDL 语句清理用户输入的方法是什么? - 2

    我需要从PHP更新用户密码,这是通过ALTERUSER语句完成的。我不能使用准备好的语句,因为它们不支持DDL命令。可以轻松清理用户名字段,确保它与字母数字正则表达式匹配,但我想不出一种安全的方式来清理密码。我应该怎么做?我知道情况不理想,但我不在这里做主。我只是尽量保证它的安全。编辑:这是我正在尝试运行的示例ALTERUSERmyusernameIDENTIFIEDBYmynewpassword1这在SQLDeveloper中成功运行,我可以通过串联使其工作,但我希望避免这种情况。 最佳答案 将输入传递给PL/SQLblock绑定

  7. java - 如何调试结合 hsqldb 处理 hibernate.hbm2ddl.import_files 值? - 2

    在我正在处理的Java项目中,我为我们的单元测试设置了以下设置:我正在使用SpringTestMVC、@RunWith(SpringJUnit4ClassRunner.class)和@WebAppConfiguration来运行单元测试,并且我创建了一个MockMvc使用webAppContextSetup(webApplicationContext)测试应用程序的实例。我有一个Hibernate配置来设置内存中的HSQLDB,所有表都是基于@Entity类创建的。在Hibernate配置中,我正在设置hibernate.hbm2ddl.import_files属性以使用SQL语句加载

  8. java - 调用包含 hbm2ddl 任务的 ant 脚本时,Runtime.exec 会卡住吗? - 2

    为了启动一个ant脚本,我使用java.lang.Runtime类的exec方法,如下所示:Processprocess=Runtime.getRuntime().Exec(JAVA_HOMEANT_HOME-jar/lib/ant-launcher.jar-BuildFilefile.xml);这个方法,尽管看起来很简单,但是它带来了几个问题,在javadoc中描述如下:BecauseSomenativeplatformsProvideonlylimitedbuffersizeforstandardinputandoutputstreams,failuretopromptlywrit

  9. java - 如何使用注释和纯 Java 在 Spring 中设置 hibernate.hbm2ddl.auto - 2

    如何仅使用Java和注释在Spring中设置以下内容。我是这应该是可能的,我相信让项目xml自由会更干净。PS:这应该不重要,但我在Heroku上运行它。 最佳答案 将其添加到dataSource()所在的类中,它解决了我的问题。finalPropertieshibernateProperties(){finalPropertieshibernateProperties=newProperties();hibernateProperties.setProperty("hibernate.hbm2ddl.auto","update")

  10. java - 通过 JDBC 将 DDL 与 SELECT 混合时为 "ERROR: cached plan must not change result type" - 2

    我在通过JDBC使用PostgreSQL时遇到了一个有趣的问题(无法在JDBC之外重现),我得到了一个“ERROR:cachedplanmustnotchangeresulttype”重现此问题的最简单方法是使用以下代码:Connectionc=getConnection();c.setAutoCommit(true);Liststatements=Arrays.asList("createtablet(aint)","select*fromt","altertabletaddbint","select*fromt","altertabletaddcint","select*fromt

随机推荐