SQL学习笔记12——SQL中数据定义语言DDL

SQL学习笔记12——SQL中数据定义语言DDL

库的管理

创建、修改、删除

  1. 库的创建 语法
     create database 【if not exists】 库名【 character set 字符集名】;
    
  2. 库的修改
    • 库名的修改:只能关闭mysql服务,找到库所在文件夹,右键重命名,然后重启mysql服务。一般都不去修改库名
    • 更改库的字符集
     alter database 库名 character set 字符集名;
    
  3. 库的删除
     drop database 【if exists】 库名;
    

表的管理

创建:create、修改:alter、删除:drop

表的创建 ★

语法:

create table 【if not exists】 表名(
	字段名 字段类型 【(长度)约束】,
	字段名 字段类型 【(长度)约束】,
	...
	字段名 字段类型 【(长度)约束】 
);

案例:

  • 创建表book
CREATE TABLE 【IF NOT EXISTS】 book(
	id INT, #编号
	bname VARCHAR(20), #图书名,VARCHAR(20)表示最大字符长度为20,注意不是字节长度,一个汉字和一个子母的字符长度都是1
	price DOUBLE, #价格
	authorID INT, #作者编号
	publishDate DATETIME #出版日期
);
/*
这样不带约束创建的表,每个字段的值都是可以为NULL,而且一些默认值也是NULL
*/

表的修改

一般语法

alter table 表名 add|drop|modify|change column 列名 【列类型/约束】;
  1. 修改列名 例子
ALTER TABLE book CHANGE [COLUMN] publishdate pubdate DATETIME;#这里其实可以修改列的类型/约束
  1. 修改列的类型或约束 例子
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
  1. 添加新列 例子
ALTER TABLE book ADD COLUMN annual DOUBLE;
  1. 删除列 例子
ALTER TABLE book DROP COLUMN annual;
  1. 修改表名 例子
ALTER TABLE book RENAME TO book_new;

表的删除

例子

DROP TABLE [IF EXISTS] book;
#库和表的创建和删除才可以用IF [NOT] EXISTS,列的创建和删除不行

表的复制

  1. 仅仅复制表的结构 例子
CREATE TABLE copy LIKE author;
  1. 复制表的结构+数据 例子
CREATE TABLE copy2
SELECT * FROM book;
  1. 复制表的部分结构+部分数据 例子
CREATE TABLE copy3
SELECT id,bname
FROM book
WHERE authorID = 1;
  1. 仅仅复制某些字段,不带数据 例子
CREATE TABLE copy3
SELECT id,bname
FROM book
WHERE 1=2;
/*
或者WHERE 1=2改为WHERE 0
*/

数据类型

常见的数据类型

  • 数值型
    • 整数
    • 小数:定点数、浮点数
  • 字符型
    • 较短的文本:char、varchar
    • 较长的文本:text、blob(较长的二进制数据如图片)
  • 日期型

整型

整数类型 tinyint smallint mediumint int/integer bigint
字节(1字节8位) 1 2 3 4 8

特点

  • 都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号
  • 如果超出了范围,会报out or range异常,插入临界值
  • 长度可以不指定,默认会有一个长度
  • 长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型

小数

分类

image

  1. 浮点型 float(M,D) 4 double(M,D) 8
  2. 定点型 dec(M,D) decimal(M,D)
特点:
  • ①M代表整数部位+小数部位的个数,D代表小数部位
  • ②如果超出范围,则报out or range异常,并且插入临界值
  • ③M和D都可以省略,但对于定点数,M默认为10,D默认为0,如果是float和double,则会根据插入的数值的精度来决定精度
  • ④如果精度要求较高,则优先考虑使用定点数
  • 原则:所选择的类型越简单越好,能保存数值的类型越小越好

字符型

char、varchar、binary、varbinary、enum、set、text、blob ||写法|M的意思|特点|空间的耗费|效率 -|-|-|-|-|-| char|char(M)|最大的字符数,可以省略,默认为1|固定长度的字符(如'中国'在char(10)中是10个字符)|比较耗费|高 varchar|varchar(M)|最大的字符数,不可以省略|可变长度的字符(如'中国'在varchar(10)中仍然是2个字符)|比较节省|低

enum举例

CREATE TABLE tab_char(
	c1 ENUM('a','b','c')
);
INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('d');#报错,值会以空白替代

其他的特点:

  • binary和varbinary用于保存较短的二进制
  • enum用于保存枚举
  • set用于保存集合,和enum类似,不同之处在于enum每次只能选一个,set可以选任意子集

日期型

  • year 年
  • date 日期
  • time 时间
  • datetime 日期+时间,8字节,范围大(1000年-9999年),不受时区影响
  • timestamp(时间戳) 日期+时间,4字节,范围小(1970年-2038年),比较容易受时区、语法模式、版本的影响,更能反映当前时区的真实时间

猜你喜欢

转载自www.cnblogs.com/sanmujun/p/12650697.html