#DDL
数据定义语言
库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除
创建:create
修改:alter
删除:drop
一、库的管理 1、库的创建
语法:
create database 库名;
#案例:创建库Books;
CREATE DATABASE IF NOT EXISTS books;
#2.库的修改
库名的修改有可能造成其他问题,一般不修改。
#更改库的字符集
ALTER DATABASE books CHARACTER SET gbk;
#3.库的删除
DROP DATABASE IF EXISTS books;
#二、表的管理
#1.表的创建
create table 表名(
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
.............
列名 列的类型【(长度)约束】 【注意最后没有分号,是个坑】
)
#案例:创建表Book
CREATE TABLE book(
id INT,#编号
bName VARCHAR(20),#图书名
price DOUBLE,#价格
authorId INT,#作者编号
publishDate DATETIME#出版日期
);
DESC book;
#案例:创建表author
CREATE TABLE IF NOT EXISTS author(
id INT,
au_name VARCHAR(20),
nation VARCHAR(10)
);
DESC author;
#2.表的修改
alter table 表名 add|drop |modeify|change column 列名 【列类型 约束】;
#1.修改列名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME
#2.修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
#3.添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;
#4.删除列名
ALTER TABLE author DROP COLUMN annual;
#5.修改表名
ALTER TABLE author RENAME TO book_author;
DESC book_author;
#3.表的删除、
DROP TABLE IF EXISTS book_author;
SHOW TABLES;
#通用的写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 表名();
DESC author;
#4.表的复制
INSERT INTO author VALUES
(1,'村上春树','日本'),
(2,'莫言','中国'),
(3,'冯唐','中国'),
(4,'金庸','中国');
SELECT * FROM author;
#1.仅仅复制表的结构
CREATE TABLE copy LIKE author;
#2.复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM author;
#3.只复制部分数据
CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE nation='中国';
SELECT * FROM copy3;
#4.仅仅复制某些字段
CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 0;
SELECT * FROM copy4;
#1.创建表dept1
USE test;
CREATE TABLE dep1(
id INT(7),
NAME VARCHAR(25)
);
#2.将表departments中的数据插入新表dept3中
CREATE TABLE dept3
SELECT department_id,department_name
FROM myemployees.`departments`;
SELECT * FROM dept3;
#3.创建emp5
CREATE TABLE emp5(
id INT(7),
first_name VARCHAR(25),
last_naem VARCHAR(25),
dept_id INT(7)
);
SELECT * FROM emp5;
#4.将last_name 的长度增加到50
ALTER TABLE emp5 MODIFY COLUMN last_naem VARCHAR(50);
#5.根据表employees创建employees2
CREATE TABLE employees2 LIKE myemployees.employees;
#6.删除表
DROP TABLE emp5;
#7.将表employees2重命名为emp5
ALTER TABLE employees2 RENAME TO emp5;
#8.在表dept和emp5中添加新列test_column,并检查所做的操作
ALTER TABLE emp5 ADD COLUMN test_column INT;
#9.直接删除表emp5中的列dept_id
DESC emp5;
ALTER TABLE emp5 DROP COLUMN email;
常见的数据类型
数值型:
整型
小数:
定点数
浮点数
字符型:
较短的文本:char、varchar
较长的文本:text、blob(长的二进制数据)
日期型:
一、整型
分类:
tinyint smallint mediumint int/integer bigint
1 2 3 4 8
特点:
1.如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
2.如果插入的数值超出了整形的范围,会报out of range 异常,并且插入临界值
3.如果不设置长度,会有默认的长度,长度代表了显示的最的宽度,如果不够会用0左边填充,但必须搭配zerodill使用!
#如何设置无符号和有符号
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT,
t2 INT UNSIGNED
);
DESC tab_int;
INSERT INTO tab_int VALUES(-12354);
二、小数
分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:
1.M和D
M:整数部位+小数部位
D:小数部位
如果超过范围,则插入临界值
2.M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度。
3.定点型的精确度较高,如果要求插入的精度较高如货币运算等则考虑使用
CREATE TABLE tab_float(
f1 FLOAT(5,2),
f2 DOUBLE(5,2),
f3 DECIMAL(5,2)
);
SELECT * FROM tab_float;
#原则:
所选择的类型越简单越好,能保存数值的类型越小越好
三、字符型
较短的文本
char
varchar
binary 和 varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
较长的文本
text
blob(较大的二进制)
特点:
写法 M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省略,默认为1 固定长度的字符 比较耗费 高
varhar varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省 低
CREATE TABLE tab_char(
c1 ENUM(‘a’,‘b’,’’)
);
日期型
/*
分类:
date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期+时间
timestamp 保存日期+时间
特点: 字节 范围 时区等的影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
*/
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_date VALUES(NOW(),NOW());
SELECT * FROM tab_date
SHOW VARIABLES LIKE 'time_zone';
#修改时区为东9区
SET time_zone='+9:00';