-- DDL 数据定义语言
/*
库和表的管理 一.库的管理:创建、修改、删除
二.表的管理:创建、修改、删除 创建:create
修改:alter
删除:drop
*/

1.库的管理

-- 库的管理

-- 1.库的创建
/*
语法:create database [if not exists] 库名;
*/ -- 创建图书库
CREATE DATABASE IF NOT EXISTS books; -- 2.库的修改 -- 5.1.x版本前
RENAME DATABASE books TO 新库名; -- 会出现数据丢失,mysql升级后去除了这个语句
-- 停止mysql服务,去data文件夹中直接修改名字 -- 更改字符集,默认使用服务器设置的字符集
ALTER DATABASE books CHARACTER SET gbk; -- 3.库的删除
DROP DATABASE IF EXISTS books;

2.表的管理

-- 表的管理

-- 1.表的创建
/*
create table 表名(
列名 列的类型(长度) 列的约束,
列名 列的类型(长度) 列的约束,
...
);
*/ -- 创建一个book表
CREATE TABLE book(
id INT, -- 编号
bname VARCHAR(20), -- 图书名
price DOUBLE, -- 价格
autherId INT, -- 作者编号
publishDate DATETIME -- 出版日期
); -- 创建author表
CREATE TABLE IF NOT EXISTS author(
id INT,
au_name VARCHAR(20),
nation VARCHAR(20)
); DESC author; -- 2.表的修改
/*
语法:alter table 表名
①修改列名 change column
②修改列的类型或约束 modify column
③添加新列 add column
④删除列 drop column
⑤修改表名 rename to
*/ -- 修改列名
ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME; -- 修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP; -- 添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE; -- 删除列
ALTER TABLE author DROP COLUMN annual; -- 修改表名
ALTER TABLE author RENAME TO book_author; -- 3.表的删除
DROP TABLE IF EXISTS book_author; SHOW TABLES; -- 通用的写法
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名; DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 表名(); -- 4.表的复制
INSERT INTO author VALUES
(1,'村上春树','日本'),
(1,'夏目漱石','日本'),
(1,'金庸','中国'),
(1,'余秋雨','中国'); -- ①复制表的结构 CREATE TABLE 复制的新名字 LIKE 复制的表名;
CREATE TABLE copy LIKE author; -- ②复制表的结构+数据 create table 复制的新名字 select * from 复制的表名;
CREATE TABLE copy2 SELECT * FROM author; -- ③复制部分数据
CREATE TABLE copy3 SELECT * FROM author WHERE nation ='中国'; -- ④复制某些字段
CREATE TABLE copy4 SELECT id,au_name FROM author WHERE 0;

练习:

-- 练习
-- 1.跨库复制表:将departments的数据插入到新表dept2中
CREATE TABLE dept2 SELECT * FROM myemployees.`departments`;

3.常见的数据类型

-- 常见的数据类型
/*
数值型:
整形
小数:
定点数
浮点型
字符型:
较短的文本:char,varchar
较长的问题:text,blob(较长的二进制数据)
日期型:
*/

1.整形

-- 整形
/*
类型 字节数 范围
Tinyint 1 有符号:-128~127 无符号:0~255
Samllint 2 有符号:-32768~32767 无符号:0~65535
mediumint 3 有符号:-8388608~8388607 无符号:0~1677215
Int,integer 4 有符号:-2147483648~2147483647 无符号:0~4294967295
Bigint 8 有符号:-9223372036854775808~ 无符号:0~ 特点:
①如果不设置无符号还是有符号,默认是有符号,设置无符号 使用unsigned
②如果的数值超出整形范围:Out of range value
③如果不设置长度,会有默认的长度
④设置了长度 例如int(7) zerofill 默认显示的最大宽度是7,空出来的用0填充,搭配zerofill使用
*/ -- 如何设置无符号和有符号 unsigned
CREATE TABLE tab_int(
t1 INT,
t2 INT UNSIGNED
); INSERT INTO tab_int VALUES(1,-1); -- Out of range value for column 't2' at row 1

2.小数(原则:所选择的类型越简单越好,能保存的数值类型越小越好)

-- 小数
-- 浮点型
/*
float(M,D) 4
double(M,D) 8
*/ -- 定点型
/*
[简写]dec(M,D),decimal(M,D) m+2 最大取值范围和double相同,给定decimal的有效范围有m,d决定
m:整数部位+小数部位
d:小数部位
超出范围:out of range
m,d都可以省略:float,double默认无所谓,而decimal默认是(10,0),只能插入整数
定点型的精度较高,如果要求插入数值的精度较高,如货币运算,则考虑定点型
*/ -- 测试m ,d
CREATE TABLE tab_float(
f1 FLOAT(5,2),
d1 DOUBLE(5,2),
d2 DECIMAL(5,2)
); SELECT * FROM tab_float; INSERT INTO tab_float VALUES(111.11,111.11,111.11);
INSERT INTO tab_float VALUES(111.116,111.116,111.116); -- 四舍五入
INSERT INTO tab_float VALUES(123.4,123.4,123.4); -- 最后一位显示0
INSERT INTO tab_float VALUES(1223.4,1223.4,1223.4); -- 无法插入 out of range

3.字符型

-- 字符型
/*
较短的文本:
char (0~255)最多的字符数 :固定长度的字符 耗费空间 效率高 默认长度为1
varchar (0~65535) :可变长度的字符 节约空间 效率低 不可省略长度
例如char(10)插入一个'中国',占用空间10,而varchar(10),占用空间为2,所以varchar节省空间
但是char效率高于varchar 较长的文本:
text
blob(较大的二进制) 其他:
binary和varbinary保存较短的二进制
enum用于保存枚举
set用于保存集合
*/ -- enum型 例如插如男和女 春夏秋冬
CREATE TABLE tab_enum(
e ENUM('a','b','c')
); INSERT INTO tab_enum VALUES('a'); -- 成功
INSERT INTO tab_enum VALUES('A'); -- 成功
INSERT INTO tab_enum VALUES('d'); -- Data truncated for column 'e' at row 1 -- set集合
CREATE TABLE tab_set(
s SET('a','b','c','d')
); INSERT INTO tab_set VALUES('a'); -- 成功
INSERT INTO tab_set VALUES('a,B'); -- 成功
INSERT INTO tab_set VALUES('a,b,m'); -- 失败

4.日期型

/*
date:只保存日期
time:只保存时间
year:只保存年
datetime:保存日期+时间
timestamp:保存日期+时间 特点: datetime 8 1000-9999 不受时区影响
timestamp 4 1970-2038 受时区影响 */ CREATE TABLE tab_date(
d1 DATETIME,
d2 TIMESTAMP
); INSERT INTO tab_date VALUES(NOW(),NOW()); SELECT * FROM tab_date; SHOW VARIABLES LIKE 'time_zone'; -- system
-- 设置为东9区
SET time_zone = '+9:00'; -- 此时timestamp的时间会发生改变

4.常见的约束

-- 常见约束
/*
约束:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性
分类:六大约束:
1.NOT NULL 非空,用于保证该字段的值不能为空
2.DEFAULT 默认值,用于保证该字段有默认值
3.PRIMARY KEY 主键,用于保证该字段具有唯一性,非空
4.UNIQUE 唯一,保证该字段具有唯一性,可以为空
5.CHECK 检查,mysql不支持
6.FOREIGN KEY 外键,用于保证该字段的值来自主表的关联列的值 添加约束的时机
1.创建表时
2.修改表时 约束的添加分类:
1.列级约束:六大约束语法都支持,但是外键约束没有效果
2.表级约束:除了非空,默认,其他都支持 主键和唯一的对比:
保证唯一性 是否允许为空 一个表中有几个 是否允许组合(primary key(id,stuName)其中id,stuName只要有一个不一样就可以插入,都一样则不能插入,不推荐)
主键 √ × 至多有一个 √
唯一 √ √ 可以有多个 √ 外键:
1.要求在从表中设置外键关系
2.从表的外键列类型和主表的关联列的类型要求一致或兼容,名称无要求
3.主表的关联列必须是一个key(唯一,主键) */ -- ------------------------------创建表时添加约束----------------------------------
-- 创建表时添加约束
-- 1.添加列级约束
CREATE DATABASE students;
USER students;
-- 专业表
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
-- 学生信息表 check 和 外键无效
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='男' OR gender='女'),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT REFERENCES major(id)
); DESC stuinfo; -- 2.表级约束 【constraint 约束名】 约束类型(字段名)
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorId INT,
PRIMARY KEY(id),
CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),
UNIQUE(seat),
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId) REFERENCES major(id)
); DESC stuinfo;
SHOW INDEX FROM stuinfo; -- 通用的写法
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1),
age INT DEFAULT 18,
seat INT UNIQUE,
majorId INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId) REFERENCES major(id)
); -- ---------------------------------修改表时添加约束---------------------------------------
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorId INT
);
-- 修改表时添加约束 alter table 表名 modify column 字段名 字段类型 新约束;
-- alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用];
DESC stuinfo;
-- 添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
-- 添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
-- 添加主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY ; -- 列级约束
ALTER TABLE stuinfo ADD PRIMARY KEY (id); -- 表级约束
-- 添加唯一键
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;-- 列级约束
ALTER TABLE stuinfo ADD UNIQUE (seat); -- 表级约束
-- 添加外键
ALTER TABLE stuinfo CONSTRAINT fk_stuinfo_major ADD FOREIGN KEY(majorId) REFERENCES major(id); -- ----------------------------------修改表时删除约束-------------------------------
SHOW INDEX FROM stuinfo;
-- 删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
-- 删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
-- 删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
-- 删除唯一键
ALTER TABLE stuinfo DROP INDEX seat;
-- 删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

5.标识列

-- 标识列
/*
又称为自增长列
含义:可以不用手动插入值,系统提供默认的序列值 1.标识列必须和key搭配
2.一个表至多有一个标识列
3.标识列的类型:只能是数值型
4.标识列可以通过 SET auto_increment_increment = 设置步长
insert into 插入时设置第一个起始值 */
-- 创建表时设置标识列 AUTO_INCREMENT
CREATE TABLE tab_identity(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
); SHOW VARIABLES LIKE '%auto_increment%';
/*
AUTO_INCREMENT 1 步长 可以更改
auto_increment_offset 1 起始值 设置第一个值的时候手动插入
*/
SET auto_increment_increment =3; INSERT INTO tab_identity(NAME) VALUES('jay'); -- 修改表时设置标识列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT; -- 修改表时删除标识列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY;

<MySQL>入门三 数据定义语言 DDL的更多相关文章

  1. 【MySQL笔记】数据定义语言DDL

    1.创建基本表   create table <表名> (<列名><数据类型>[列级完整性约束条件]                                 ...

  2. MySQL之数据定义语言(DDL)

    写在前面 本文中 [ 内容 ] 代表啊可选项,即可写可不写. SQL语言的基本功能介绍 SQL是一种结构化查询语言,主要有如下几个功能: 数据定义语言(DDL):全称Data Definition L ...

  3. Mysql基础2-数据定义语言DDL

    主要: 数据库操作语句 数据表操作语句 视图定义语句 数据库表设计原则 DDL: Data Definition Language 数据定义语言 数据库操作语句 创建库 创建数据库: create d ...

  4. ODPS SQL <for 数据定义语言 DDL>

    数据定义语言:(DDL) 建表语句: CREATE TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...

  5. 30441数据定义语言DDL

    数据定义:指对数据库对象的定义.删除和修改操作. 数据库对象主要包括数据表.视图.索引等. 数据定义功能通过CREATE.ALTER.DROP语句来完成. 按照操作对象分类来介绍数据定义的SQL语法. ...

  6. mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)

    0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; ...

  7. mysql数据定义语言DDL

    库的管理 创建 create 语法:create database 库名 [character set 字符集] # 案例:创建库 create database if not exists book ...

  8. oracle 数据定义语言(DDL)语法

    DDL语言包括数据库对象的创建(create).删除(drop)和修改(alter)的操作 1.创建表语法 create table table_name( column_name datatype  ...

  9. SQLite基础-4.数据定义语言(DDL)

    目录 一.创建数据库 1. 创建方式 2. 数据库命名规范 二. 创建表 1. 基本用法 2. 数据表命名规范 3. 字段命名规范 三. 删除表 一.创建数据库 1. 创建方式 在第二章中我们讲了如何 ...

随机推荐

  1. 安装Node.js 以及命令行使用

    安装 官方的安装包 安装完成之后,会自动添加到环境变量中 通过visual studio安装 命令行 查看版本 PS C:\Users\clu\Desktop> node --version v ...

  2. 洛谷P1291 [SHOI2002]百事世界杯之旅——期望DP

    题目:https://www.luogu.org/problemnew/show/P1291 水水的经典期望DP: 输出有毒.(其实也很简单啦) 代码如下: #include<iostream& ...

  3. Java:EL表达式

    ylbtech-Java:EL表达式 EL(Expression Language) 是为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 ...

  4. npm 是干什么的?

    网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话题. 本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了 ...

  5. Permutations II 典型去重

    https://leetcode.com/problems/permutations-ii/ Given a collection of numbers that might contain dupl ...

  6. PCB Genesis或Incam 右键导入TGZ 实现方法

    使用Genesis导入TGZ方式很多 的,比如有:写个脚本框选TGZ的的方式实现TGZ导入,将TGZ拖入脚本界面实现TGZ导入, 给Engineering Toolkit窗口句柄注册拖拽事件实现TGZ ...

  7. 基于Hexo且在GitHub上搭建博客

    title: 基于Hexo且在GitHub上搭建博客 Welcome to Fofade's Blog! 搭建初衷 大大小小,大学两年,玩了很多,也学了很多. 回首望之,曾经不知道的,现在是知道了,但 ...

  8. STL---vector的内存分配策略

    2级策略,过程如下: 第一级 __malloc_alloc_template内存分配器 该分配器是对malloc.realloc以及free的封装: 第二级  __default_alloc_temp ...

  9. [转]mysql常用函数

    转自:http://sjolzy.cn/Common-functions-mysql.html 控制流函数 IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回ex ...

  10. sublime 3 最新注册码

    http://9iphp.com/web/html/sublime-text-3-license-key.html