开源数据库MySQL数据库定义语言DDL
Posted 资本家的鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源数据库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的主要内容,如果未能解决你的问题,请参考以下文章
MySQL语法------16-----DDL语言-数据定义