开源数据库MySQL数据库定义语言DDL

采得百花成蜜后,为谁辛苦为谁甜。这篇文章主要讲述开源数据库MySQL数据库定义语言DDL相关的知识,希望能为你提供帮助。
DDL-库定义库
创建业务数据库语法:

  • CREATE DATABASE 数据库名
  • CREATE DATABASE discuz
数据库名要求
  • 区分大小写
  • 唯一性
  • 不能使用关键字如create select
  • 不能单独使用数字和特殊符号“如-"
  • 正常的:用拼音或单词即可。
查看所有数据库
  • SHOW DATABASES;
选择/进入数据库
  • USE 数据库名
  • SELECT database();
  • 调用函数,查询当前库
删除数据库
  • DROP DATABASE 数据库名
系统中的位置
  • /var/lib/mysql/:数据库的实体-清理/备份


数据类型数值类型
  • ?整数类型 int
  • 浮点数类型 float:小数?
字符串类型
  • 字符系列 CHAR和VARCHAR
  • char的长度不可变。
  • varchar的长度可以增加。
  • 枚举类型 ENUM:单选
  • 集合类型 SET:多选时间和日期类型
时间和日期类型
  • 年 YEAR
  • 日期DATE
  • 时间TIME
  • 日期和时间DATETIME


完整性约束
  • 数据库中某列使用完整性约束来限定此类要求。
  • 用于保证数据的完整性和一致性
约束条件 
说明
PRIMARY KEY (PK)
标识该字段为该表的主键,可以唯一的标识记录,不可以为空
FOREIGN KEY (FK)
标识该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
UNIQUE KEY   (UK)
标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT
标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT
为该字段设置默认值
NOT NULL 
标识该字段不能为空,是否允许为空默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
UNSIGNED
无符号,正数
ZEROFILL 
使用0填充,例如0000001
约束类型测试
默认值、空值:DEFAULT、NOT NULL
  • 创建表
mysql> create table school.student2(
-> id int not null,
-> name varchar(50) not null,
-> sex enum (m,f) default m not null,
-> age int unsigned default 18 not null,
-> hobby set(music,disc,dance,book) default book,dance );

  • 查看表结构
mysql> desc shool.student2;


mysql> insert into school.student values(1,jack,m,20,book); //插入数据
mysql> select * from school.student; //查看表内容


mysql> insert into school.student2 values(3,NULL,m,40,book); //插入非法数据
ERROR 1048 (23000): Column name cannot be null//不能为空值



设置主键约束 PRIMARY KEY?
  • primary key 字段的值是不允许重复,且不允许NULL(UNIQUE + NOT NULL)
  • 单列做主键/多列做主键(复合主键)
方法一:
mysql> create table school.student3(
-> id int primary key not null auto_increment,
-> name varchar(50) not null,
-> sex enum(male,female) not null default male,
-> age int not null default 18
-> );

方法二:
mysql> create table school.student4(
-> id int auto_increment not null,
-> name varchar(50) not null,
-> sex enum(male,female) not null default male,
-> age int not null default 18,
-> primary key(id)
-> );

  • 查询表结构
mysql> desc school.student3;


  • 插入数据
mysql> insert into school.student4(name,sex,age) values
-> (jack,male,19),
-> (tom,male,23);

  • 查询表内容

  • 插入非法数据

  • 主键设置了自动增长,再次尝试插入数据。成功(注意不要插入主键)




设置唯一约束 UNIQUE
  • unique唯一的特性。
  • unique是可以为空的。
  • 为部门创建一张员工信息表
方法1:
mysql> CREATE TABLE company.department1 (
-> dept_id INT,
-> dept_name VARCHAR(30) UNIQUE,
-> comment VARCHAR(50));

方法2:
mysql> CREATE TABLE company.department2 (
-> dept_id INT,
-> dept_name VARCHAR(30),
-> comment VARCHAR(50),
-> UNIQUE(dept_name)
-> );

  • 查看表结构

  • 插入数据
mysql> insert into company.department1 values (1,zhangsan,yyy); // 插入合法数据
mysql> insert into company.department1 values (1,NULL,yyy); //插入空值数据
mysql> insert into company.department1 values (1,NULL,yyy); //插入空值数据(空值是允许重复的)
mysql> insert into company.department1 values (1,zhangsan,yyy); //插入非法数据
ERROR 1062 (23000): Duplicate entry zhangsan for key dept_name//zhangsan已有值




设置外键约束 FOREIGN KEY
  • 创建父表
mysql> create table company.employees(
-> name varchar(50) not null,
-> mail varchar(20),
-> primary key(name)
-> )engine=innodb;

  • 创建子表
mysql> create table company.payroll(
-> id int not null auto_increment,
-> name varchar(50) not null,
-> payroll float(10,2) not null,
-> primary key(id),
-> foreign key(name) references employees(name) on update cascade on delete cascade
//子表name外键,关联父表(employees 主键name),同步更新,同步删除
-> )engine=innodb;

  • 查看表结构

  • 插入数据
mysql> insert into company.employees values (zhangsan,zhangsan@126.com);
mysql> insert into company.payroll values (1,zhangsan,20000.23);


  • 当父表中某个员工的记录修改时,子表也会同步修改
  • 当父表中删除某个记录,子表也会同步删除该记录。


设置复合主键约束 PRIMARY KEY
  • 解决单列主键无法保持唯一性的问题
  • 例如:记录主机地址和服务的数据表是否运行的表。

  • 创建数据表
mysql> create table ip.service(
-> host_ip varchar(15) not null,
-> service_name varchar(10) not null,
-> port varchar(5) not null,
-> allow enum(Y,N) default N,
-> primary key(host_ip,port)//关键部分,复合主键设置方法
-> );

  • 查看表结构

  • 插入数据
mysql> insert into ip.service values (192.168.2.168,ftp,21,Y);
mysql> insert into ip.service values (192.168.2.168,httpd,80,Y);


  • 复合主键是当多列值组合唯一。
附加复合主键案例
在mysql系统内部对于mysql账户的记录就是复合主键(用户名+主机地址)



设置字段值增 AUTO_INCREMENT
  • 配合整数型,主键使用自动增长约束。
mysql> CREATE TABLE company.department3 (
-> dept_id INT PRIMARY KEY AUTO_INCREMENT,
-> dept_name VARCHAR(30),
-> comment VARCHAR(50)
-> );


  • 插入数据
mysql> insert into company.department3 values(1,zs,manager); //合法数据
mysql> insert into company.department3 values(1,zs,manager); //非法数据
ERROR 1062 (23000): Duplicate entry 1 for key PRIMARY
mysql> insert into company.department3 values(2,zs,manager); //合法数据
mysql> insert into company.department3(dept_name,comment) values (zs,manager); //合法数据。未插入序号,但是在查询时会自动增加。

  • 查看信息
【开源数据库MySQL数据库定义语言DDL】

    推荐阅读