DDL
数据定义语言。定义不同的数据库、表、视图、索 引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构

主要的语句关键字包括 CREATE 、 DROP 、 ALTER

库的管理

  1. //查看所有的数据库
  2. show databases;
  3. //切换数据库
  4. use 数据库名;
  5. //库的创建
  6. create database [if not exists] 库名;
  7. //更改库的字符集
  8. alter database 库名 character set utf-8;
  9. //库的删除
  10. drop database [if exists] 库名;

表的管理

  1. //查看库中的所有表
  2. show tables;
  3. //查看表结构语法
  4. desc 表名;
  5. //查看表的详细创建信息 **
  6. show create table 表名称\G
  7. //创建表 必须指定列名(或字段名),数据类型,长度
  8. create table [if not exists] 表名{
  9. 列名 类型 [约束] [默认值],
  10. 列名 类型 [约束] [默认值],
  11. ...
  12. 列名 类型 [约束] [默认值],
  13. }
  14. #表的复制 **
  15. //仅仅复制表的结构
  16. create table 新表名 like 目标表;
  17. //复制表的结构加数据
  18. create table 新表名
  19. select * from 目标表;
  20. //只复制部分数据
  21. create table 新表名
  22. select 查询语句;
  23. //仅仅复制某些字段
  24. create table 新表名
  25. select 查询语句(需要的字段)
  26. where 0; //添加一个不成立的条件 复制的表内就没有数据
  27. eg:
  28. create table copy1
  29. select id,name from author
  30. where 0;

表的修改

  1. //修改列名
  2. alter table 表名 change column 列名 新列名 新列名类型;
  3. //修改列的类型或约束
  4. alter table 表名 modify column 列名 要修改的列类型;
  5. //添加新列
  6. alter table 表名 add cloumn 列名 列类型;
  7. //删除列
  8. alter table 表名 drop column 列名;
  9. //修改表名
  10. alter table 表名 rename to 新表名;
  11. #表的删除
  12. drop table [if exists] 表名;

常见的数据类型

数值型(整型,小数)、字符型(char,varchar,text,blob)、日期型

  1. #整型
  2. 特点:
  3. 1 如果不设置无符号或有符号,默认是有符号
  4. eg:无符号设置就是在表定义时,类型的后面加上 unsigned
  5. 2 如果不设置长度,会有默认的长度 显示宽度与类型可以存储的值范围无关
  6. 长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用
  7. eg: id int(7) zerofill //搭配后默认无符号
  8. #小数 M:代表整数部位+小数部位 D:代表小数部位
  9. 如果超出范围,则插入临界值;MD可以省略
  10. 1 浮点型
  11. float(M,D)
  12. double(M,D)
  13. 2 定点型 //要求精度时选用 如货币运算等
  14. dec(M,D)
  15. *decimal(M,D)
  1. #字符型 M:最大的字符数
  2. char(M):固定长度的字符 M默认为1
  3. varchar(M):可变长度的字符
  4. eg: sex char; //只有两种可能的固定字符
  5. name varchar(20); //可变长度的字符
  1. #日期型 日期的值必须用 ``
  2. datetime:保存日期和时间
  3. *timestamp:保存日期和时间 //范围1970-2038 且受时区的影响

约束可靠性

一种限制,保证数据的准确性和可靠性

  1. #六大约束
  2. NOT NULL:非空,用于保证该字段的值不能为空
  3. DEFAULT:默认,用于保证该字段有默认值
  4. PRIMARY KEY:用于保证该字段具有唯一性,且非空
  5. UNIQUE:唯一,用于保证该字段具有唯一性,可以为空
  6. CHECK:检查约束 [mysql不支持] eg:年龄范围
  7. FOREGIN KEY:外键,用于限制两个表的关系,保证该字段的值必须来源于主表的关联值
  8. 在从表添加外键约束,用于引用主表某列的值
  9. 注:约束的添加分类
  10. 列级约束:除了外键约束都支持
  11. 表级约束:除了非空 默认 其它的都支持
  12. eg:外键约束一般放在表级,其它的放在列级
  13. CREATE TABLE stuinfo (
  14. id INT PRIMARY KEY,
  15. name VARCHAR ( 20 ) NOT NULL,
  16. gender CHAR ( 1 ),
  17. seat INT UNIQUE,
  18. age INT DEFAULT 18,
  19. majorId INT ,
  20. CONSTRAINT fk_studinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
  21. );
  22. 注:主表的关联列必须是一个key(一般是主键或唯一键)
  23. 比如:上面这个majorId关联major表内的id字段,id字段必须是一个主键或唯一键 偶尔是外键
  24. #查看表内的约束
  25. SELECT * FROM information_schema.table_constraints WHERE table_name = '表名';
  1. #修改表时添加约束
  2. alter table 表名 modify column 列名 列类型 约束; //列级约束
  3. alter table 表名 add constraint 约束类型; //表级约束
  4. eg:
  5. //添加非空
  6. alter table stuinfo modify column stuname varchar(20) not null;
  7. //添加外键
  8. alter table stuinfo add constraint fk_studinfo_major
  9. foreign key(majorid) reference major(id);
  1. #修改表时删除约束
  2. //删除非空
  3. alter table stuinfo modify column stuname varchar(20) null;
  4. //删除默认约束
  5. alter table stuinfo modify column age int; //让它不默认就行了
  6. //删除主键
  7. alter table stuinfo drop primary key;
  8. //删除唯一
  9. alter table stuinfo drop index 唯一键名;
  10. //删除外键
  11. alter table stuinfo drop foreign key 外键名;

标识列(自增长列)

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

  1. auto_increment;
  2. //特点:
  3. 1 标识列不一定和主键搭配 但必须和一个key搭配
  4. 2 一个表内至多有一个标识列
  5. 3 标识列类型必须是数值型
  6. 4 标识列可以设置步长和手动改变起始值
  7. #修改表时设置标识列
  8. alter table 表名 modify column 列名 列类型 auto_increment;
  9. //删除标识列 只需要不添加它就行了