首页 > 其他 > 详细

常用DDL

时间:2020-07-02 23:22:17      阅读:81      评论:0      收藏:0      [点我收藏+]

SQL语句---DDL

数据定义语言

用于对数据库和表的管理和操作

库的管理

创建数据库

# 创建stuDB 数据库
CREATE DATABASE stuDB;

# 创建stuDB 数据库,如果这个数据已经创建也不会报错,提高容错性
CREATE DATABASE IF NOT EXISTS stuDB;

删除数据库

# 删除stuDB数据库
DROP DATABASE stuDB;

# 删除stuDB 数据库,如果这个数据库不存在也不会报错,提高容错性
DROP DATABASE IF EXISTS stuDB;

表的管理

数据类型

分类 字段类型 描述
整数 bit 0或1的整型数字
int 从-231(-2,147,483,648)到231-1(2,147,483,647)的整型数字
smallint 从-215(-32,768)到215-1(32,767)的整型数字
tinyint 从0到255的整型数字
bigint -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)
带小数的类型... decimal(m,n) 128bit,不存在精度损失,常用于银行帐目计算。(28个有效位),从-1038到1038-1的定精度与有效位数的数字。最多m位。n位小数。
numeric(m,n) decimal的同义词
double(m,n) 64bit,双精度实型,含字节数为8,数值范围-1.7E308~1.7E308(15个有效位)
float(m,n) 32bit,浮点型,含字节数为4,从-1.79E+308到1.79E+308(7个有效位),可变精度的数字
real(m,n) 从-3.04E+38到3.04E+38可变精度的数字
货币 money 从-263(-922,337,203,685,477.5808)到263-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十,宽度4
smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十,宽度4
日期时间 time 只有小时/分钟/秒,没有年月日
date 只有年月日,没有小时/分钟/秒
datetime 两者皆有,保存时间范围广
timestamp 两者皆有,保存时间范围窄/区别较大,此处地方太小....
smalldatetime 两者皆有,保存时间范围窄/
特殊数据类型 Cursor 对游标的引用
uniqueidentifier 全球唯一标识符GUID
字符数据 char(n) 定长非Unicode的字符型数据,最大长度为8000。n为最大字符个数,可选
varchar(n) 变长非Unicode的字符型数据,最大长度为8000。n为最大字符个数,必选
text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)
Unicode nchar 定长Unicode的字符型数据,最大长度为8000
nvarchar 变长Unicode的字符型数据,最大长度为8000
ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)
二进制数据 binary 定长二进制数据,最大长度为8000
varbinary 变长二进制数据,最大长度为8000
blob 二进制大对象,可以存储二进制文件/图片/音像

创建表

# 语法:
CREATE TABLE [IF NOT EXISTS] 表名(
	字段名  字段类型  【字段约束】,
	字段名  字段类型  【字段约束】,
	字段名  字段类型  【字段约束】,
	字段名  字段类型  【字段约束】,
	字段名  字段类型  【字段约束】
	

);


# 案例:创建一张表【没有添加约束】
CREATE TABLE IF NOT EXISTS stuinfo (
    stuid INT,
    stuname VARCHAR (20),
    stugender CHAR(1),
    email VARCHAR (20),
    borndate DATETIME
) ;


约束

常见约束
说明:用于限制表中字段的数据,从而进一步令数据表中的数据一致、准确、可靠。

not null ; default ; primary key ; unique ; check ; foreign

NOT NULL 非空:用于限制该字段为必选项
DEFAULT 默认:用于限制该字段没有显式插入值,则直接显示默认值
PRIMARY KEY 主键:用于限制该字段值不能重复,设置为主键列的字段默认不能为空
UNIQUE 唯一:用于限制该字段不能重复,与主键不同,一个表可以有多个,且字段可以为空
CHECK 检查:用于限制该字段值必须满足指定条件
		CHECK(age BETWEEN 1 AND 100)
FOREIGN 外键:用于限制两个表的关系,要求外键列的值必须来自主表的关联列
要求:
    1. 主表的关联列和从表的关联列类型必须一致,含义相同,名称无要求
    2. 主表的关联列要求必须是主键

实例:

-- 案例:

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
	stuid INT PRIMARY KEY, --添加了 主键约束
	stuname VARCHAR(20) UNIQUE NOT NULL, -- 添加了 唯一约束+非空
	stugender CHAR(1) DEFAULT ‘男‘, -- 添加了默认约束
	email VARCHAR(20) NOT NULL,
	age INT CHECK( age BETWEEN 0 AND 100), -- 添加了检查约束,mysql不支持
	majorid INT,
	CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id) -- 添加了外键约束
	-- majorid列 与 major表内的id列
);

修改表

语法:
ALTER TABLE 表名 ADD|CHANGE|MODIFY|DROP COLUMN 字段名 字段类型 【字段约束】

# 1,修改表名
ALTER TABLE stuinfo RENAME TO students ;

# 2.添加字段
ALTER TABLE students ADD COLUMN borndate TIMESTAMP NOT NULL ;

# 3.修改字段名
ALTER TABLE students CHANGE COLUMN borndate birthday DATETIME NULL ;


# 4.修改字段类型
ALTER TABLE students MODIFY COLUMN birthday TIMESTAMP ;

# 5.删除字段
ALTER TABLE students DROP COLUMN birthday ;

删除表

DROP TABLE IF EXISTS students ;

复制表

# 复制表
CREATE TABLE newTable LIKE students ;

# 复制表的结构+数据
CREATE TABLE newTable SELECT * FROM girls.`admin`


案例:复制employees表中的last_name,department_id,salary字段到新表 xx 表,但不复制数据

CREATE TABLE xx 
SELECT last_name, department_id, salary 
FROM myemployees.`employees`
WHERE 1=2; # 恒不成立

案例

-- 案例1: 使用分页查询实现,查询员工信息表中部门为50号的工资最低的5名员工信息
SELECT  * 
FROM employees
WHERE department_id = 50
ORDER BY salary 
LIMIT 0, 5;


-- 案例2:使用子查询实现城市为Toronto的,且工资>10000 的员工姓名
# 第一步
SELECT d.`department_id`
FROM locations l
JOIN departments d
ON l.`location_id` = d.`location_id`
AND l.`city` = ‘Toronto‘

# 第二步
SELECT e.`last_name`
FROM employees e
WHERE e.`salary` > 10000
AND e.department_id IN (
	SELECT d.`department_id`
	FROM locations l
	JOIN departments d
	ON l.`location_id` = d.`location_id`
	AND l.`city` = ‘Toronto‘
);


-- 案例3:创建表qqinfo,里面包含qqid,添加主键约束(昵称nickname),添加唯一约束、邮箱email(添加非空约束)、性别gender
CREATE TABLE IF NOT EXISTS qqinfo (
	qqid INT PRIMARY KEY,
	email VARCHAR(20) NOT NULL,
	gender CHAR
);


-- 案例4:删除表qqinfo
DROP TABLE IF EXISTS qqinfo;


-- 案例5:试写出sql查询语句定义顺序和执行顺序

1. 定义顺序(书写顺序)
SELECT DISTINCT 查询列表
FROM 表名 别名
JOIN 表名 别名
ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后筛选
ORDER BY 排序列表
LIMIT 条目数

2. 执行顺序

-- 选择表 ---> 连接表 ---> 分组 ---> 分组后筛选 ---> 字段名 ---> 排序 ---> 分页(分条)

FROM 子句
JOIN 子句
ON 子句
WHERE 子句
GROUP BY 子句
HAVING 子句
SELECT 子句
ORDER BY 子句
LIMIT 子句

常用DDL

原文:https://www.cnblogs.com/newbase/p/13227565.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!