1. -- DDL 数据定义语言
  2. /*
  3. 库和表的管理
  4.  
  5. 一.库的管理:创建、修改、删除
  6. 二.表的管理:创建、修改、删除
  7.  
  8. 创建:create
  9. 修改:alter
  10. 删除:drop
  11. */

1.库的管理

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

2.表的管理

  1. -- 表的管理
  2.  
  3. -- 1.表的创建
  4. /*
  5. create table 表名(
  6. 列名 列的类型(长度) 列的约束,
  7. 列名 列的类型(长度) 列的约束,
  8. ...
  9. );
  10. */
  11.  
  12. -- 创建一个book
  13. CREATE TABLE book(
  14. id INT, -- 编号
  15. bname VARCHAR(20), -- 图书名
  16. price DOUBLE, -- 价格
  17. autherId INT, -- 作者编号
  18. publishDate DATETIME -- 出版日期
  19. );
  20.  
  21. -- 创建author
  22. CREATE TABLE IF NOT EXISTS author(
  23. id INT,
  24. au_name VARCHAR(20),
  25. nation VARCHAR(20)
  26. );
  27.  
  28. DESC author;
  29.  
  30. -- 2.表的修改
  31. /*
  32. 语法:alter table 表名
  33. ①修改列名 change column
  34. ②修改列的类型或约束 modify column
  35. ③添加新列 add column
  36. ④删除列 drop column
  37. ⑤修改表名 rename to
  38. */
  39.  
  40. -- 修改列名
  41. ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME;
  42.  
  43. -- 修改列的类型或约束
  44. ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
  45.  
  46. -- 添加新列
  47. ALTER TABLE author ADD COLUMN annual DOUBLE;
  48.  
  49. -- 删除列
  50. ALTER TABLE author DROP COLUMN annual;
  51.  
  52. -- 修改表名
  53. ALTER TABLE author RENAME TO book_author;
  54.  
  55. -- 3.表的删除
  56. DROP TABLE IF EXISTS book_author;
  57.  
  58. SHOW TABLES;
  59.  
  60. -- 通用的写法
  61. DROP DATABASE IF EXISTS 旧库名;
  62. CREATE DATABASE 新库名;
  63.  
  64. DROP TABLE IF EXISTS 旧表名;
  65. CREATE TABLE 表名();
  66.  
  67. -- 4.表的复制
  68. INSERT INTO author VALUES
  69. (1,'村上春树','日本'),
  70. (1,'夏目漱石','日本'),
  71. (1,'金庸','中国'),
  72. (1,'余秋雨','中国');
  73.  
  74. -- ①复制表的结构 CREATE TABLE 复制的新名字 LIKE 复制的表名;
  75. CREATE TABLE copy LIKE author;
  76.  
  77. -- ②复制表的结构+数据 create table 复制的新名字 select * from 复制的表名;
  78. CREATE TABLE copy2 SELECT * FROM author;
  79.  
  80. -- ③复制部分数据
  81. CREATE TABLE copy3 SELECT * FROM author WHERE nation ='中国';
  82.  
  83. -- ④复制某些字段
  84. CREATE TABLE copy4 SELECT id,au_name FROM author WHERE 0;

练习:

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

3.常见的数据类型

  1. -- 常见的数据类型
  2. /*
  3. 数值型:
  4. 整形
  5. 小数:
  6. 定点数
  7. 浮点型
  8. 字符型:
  9. 较短的文本:char,varchar
  10. 较长的问题:text,blob(较长的二进制数据)
  11. 日期型:
  12. */

1.整形

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

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

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

3.字符型

  1. -- 字符型
  2. /*
  3. 较短的文本:
  4. char (0~255)最多的字符数 :固定长度的字符 耗费空间 效率高 默认长度为1
  5. varchar (0~65535) :可变长度的字符 节约空间 效率低 不可省略长度
  6. 例如char(10)插入一个'中国',占用空间10,而varchar(10),占用空间为2,所以varchar节省空间
  7. 但是char效率高于varchar
  8.  
  9. 较长的文本:
  10. text
  11. blob(较大的二进制)
  12.  
  13. 其他:
  14. binary和varbinary保存较短的二进制
  15. enum用于保存枚举
  16. set用于保存集合
  17. */
  18.  
  19. -- enum 例如插如男和女 春夏秋冬
  20. CREATE TABLE tab_enum(
  21. e ENUM('a','b','c')
  22. );
  23.  
  24. INSERT INTO tab_enum VALUES('a'); -- 成功
  25. INSERT INTO tab_enum VALUES('A'); -- 成功
  26. INSERT INTO tab_enum VALUES('d'); -- Data truncated for column 'e' at row 1
  27.  
  28. -- set集合
  29. CREATE TABLE tab_set(
  30. s SET('a','b','c','d')
  31. );
  32.  
  33. INSERT INTO tab_set VALUES('a'); -- 成功
  34. INSERT INTO tab_set VALUES('a,B'); -- 成功
  35. INSERT INTO tab_set VALUES('a,b,m'); -- 失败

4.日期型

  1. /*
  2. date:只保存日期
  3. time:只保存时间
  4. year:只保存年
  5. datetime:保存日期+时间
  6. timestamp:保存日期+时间
  7.  
  8. 特点:
  9.  
  10. datetime 8 1000-9999 不受时区影响
  11. timestamp 4 1970-2038 受时区影响
  12.  
  13. */
  14.  
  15. CREATE TABLE tab_date(
  16. d1 DATETIME,
  17. d2 TIMESTAMP
  18. );
  19.  
  20. INSERT INTO tab_date VALUES(NOW(),NOW());
  21.  
  22. SELECT * FROM tab_date;
  23.  
  24. SHOW VARIABLES LIKE 'time_zone'; -- system
  25. -- 设置为东9
  26. SET time_zone = '+9:00';
  27.  
  28. -- 此时timestamp的时间会发生改变

4.常见的约束

  1. -- 常见约束
  2. /*
  3. 约束:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性
  4. 分类:六大约束:
  5. 1.NOT NULL 非空,用于保证该字段的值不能为空
  6. 2.DEFAULT 默认值,用于保证该字段有默认值
  7. 3.PRIMARY KEY 主键,用于保证该字段具有唯一性,非空
  8. 4.UNIQUE 唯一,保证该字段具有唯一性,可以为空
  9. 5.CHECK 检查,mysql不支持
  10. 6.FOREIGN KEY 外键,用于保证该字段的值来自主表的关联列的值
  11.  
  12. 添加约束的时机
  13. 1.创建表时
  14. 2.修改表时
  15.  
  16. 约束的添加分类:
  17. 1.列级约束:六大约束语法都支持,但是外键约束没有效果
  18. 2.表级约束:除了非空,默认,其他都支持
  19.  
  20. 主键和唯一的对比:
  21. 保证唯一性 是否允许为空 一个表中有几个 是否允许组合(primary key(id,stuName)其中id,stuName只要有一个不一样就可以插入,都一样则不能插入,不推荐)
  22. 主键 √ × 至多有一个 √
  23. 唯一 √ √ 可以有多个 √
  24.  
  25. 外键:
  26. 1.要求在从表中设置外键关系
  27. 2.从表的外键列类型和主表的关联列的类型要求一致或兼容,名称无要求
  28. 3.主表的关联列必须是一个key(唯一,主键)
  29.  
  30. */
  31.  
  32. -- ------------------------------创建表时添加约束----------------------------------
  33. -- 创建表时添加约束
  34. -- 1.添加列级约束
  35. CREATE DATABASE students;
  36. USER students;
  37. -- 专业表
  38. CREATE TABLE major(
  39. id INT PRIMARY KEY,
  40. majorName VARCHAR(20)
  41. );
  42. -- 学生信息表 check 外键无效
  43. CREATE TABLE stuinfo(
  44. id INT PRIMARY KEY,
  45. stuName VARCHAR(20) NOT NULL,
  46. gender CHAR(1) CHECK(gender='男' OR gender='女'),
  47. seat INT UNIQUE,
  48. age INT DEFAULT 18,
  49. majorId INT REFERENCES major(id)
  50. );
  51.  
  52. DESC stuinfo;
  53.  
  54. -- 2.表级约束 constraint 约束名】 约束类型(字段名)
  55. DROP TABLE IF EXISTS stuinfo;
  56. CREATE TABLE stuinfo(
  57. id INT,
  58. stuname VARCHAR(20),
  59. gender CHAR(1),
  60. seat INT,
  61. age INT,
  62. majorId INT,
  63. PRIMARY KEY(id),
  64. CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),
  65. UNIQUE(seat),
  66. CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId) REFERENCES major(id)
  67. );
  68.  
  69. DESC stuinfo;
  70. SHOW INDEX FROM stuinfo;
  71.  
  72. -- 通用的写法
  73. CREATE TABLE IF NOT EXISTS stuinfo(
  74. id INT PRIMARY KEY,
  75. stuName VARCHAR(20) NOT NULL,
  76. gender CHAR(1),
  77. age INT DEFAULT 18,
  78. seat INT UNIQUE,
  79. majorId INT,
  80. CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId) REFERENCES major(id)
  81. );
  82.  
  83. -- ---------------------------------修改表时添加约束---------------------------------------
  84. DROP TABLE IF EXISTS stuinfo;
  85. CREATE TABLE stuinfo(
  86. id INT,
  87. stuname VARCHAR(20),
  88. gender CHAR(1),
  89. seat INT,
  90. age INT,
  91. majorId INT
  92. );
  93. -- 修改表时添加约束 alter table 表名 modify column 字段名 字段类型 新约束;
  94. -- alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用];
  95. DESC stuinfo;
  96. -- 添加非空约束
  97. ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
  98. -- 添加默认约束
  99. ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
  100. -- 添加主键
  101. ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY ; -- 列级约束
  102. ALTER TABLE stuinfo ADD PRIMARY KEY (id); -- 表级约束
  103. -- 添加唯一键
  104. ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;-- 列级约束
  105. ALTER TABLE stuinfo ADD UNIQUE (seat); -- 表级约束
  106. -- 添加外键
  107. ALTER TABLE stuinfo CONSTRAINT fk_stuinfo_major ADD FOREIGN KEY(majorId) REFERENCES major(id);
  108.  
  109. -- ----------------------------------修改表时删除约束-------------------------------
  110. SHOW INDEX FROM stuinfo;
  111. -- 删除非空约束
  112. ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
  113. -- 删除默认约束
  114. ALTER TABLE stuinfo MODIFY COLUMN age INT;
  115. -- 删除主键
  116. ALTER TABLE stuinfo DROP PRIMARY KEY;
  117. -- 删除唯一键
  118. ALTER TABLE stuinfo DROP INDEX seat;
  119. -- 删除外键
  120. ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

5.标识列

  1. -- 标识列
  2. /*
  3. 又称为自增长列
  4. 含义:可以不用手动插入值,系统提供默认的序列值
  5.  
  6. 1.标识列必须和key搭配
  7. 2.一个表至多有一个标识列
  8. 3.标识列的类型:只能是数值型
  9. 4.标识列可以通过 SET auto_increment_increment = 设置步长
  10. insert into 插入时设置第一个起始值
  11.  
  12. */
  13. -- 创建表时设置标识列 AUTO_INCREMENT
  14. CREATE TABLE tab_identity(
  15. id INT PRIMARY KEY AUTO_INCREMENT,
  16. NAME VARCHAR(20)
  17. );
  18.  
  19. SHOW VARIABLES LIKE '%auto_increment%';
  20. /*
  21. AUTO_INCREMENT 1 步长 可以更改
  22. auto_increment_offset 1 起始值 设置第一个值的时候手动插入
  23. */
  24. SET auto_increment_increment =3;
  25.  
  26. INSERT INTO tab_identity(NAME) VALUES('jay');
  27.  
  28. -- 修改表时设置标识列
  29. ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
  30.  
  31. -- 修改表时删除标识列
  32. 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. commons-fileupload 组件实现文件上传

    index.jsp 核心代码: //创建文件项工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建解析请求 数据的Servl ...

  2. 中国剩余定理模板&俄罗斯乘法

    void ex_gcd(ll a,ll b,ll &d,ll &x,ll &y){ if(!b){d=a;x=1LL;y=0LL;} else {ex_gcd(b,a%b,d, ...

  3. SQLAlchemy 反向生成 model 模型

    前言 Django 反向生成的 model 模型的命令 :  python manager.py inspectdb SQLAlchemy / Flask-SQLAlchemy则是: pip3 ins ...

  4. 栗染-Jsp编码常见问题

    如图在我们新建一个jsp的时候想给自己的页面加一个中文就会出现如图所示的问题 遇到这种情况一般是选第二个或者 将<%@ page language="java" import ...

  5. Sql 主键设置

    1.开发数据库时常用命名规范 1>.使用不包含数字的单数表名,如果必要的话可以增加模块名前缀. 2>.对于主键的命名,使用表名+ID的形式. 3>.作为外键的列的名字应该与它们所对应 ...

  6. 234 Palindrome Linked List 回文链表

    请检查一个链表是否为回文链表. 进阶:你能在 O(n) 的时间和 O(1) 的额外空间中做到吗? 详见:https://leetcode.com/problems/palindrome-linked- ...

  7. 设计模式学习之代理模式(Proxy)

    一.代理模式的初衷 不想让客户端直接访问具体实现接口,客户端不应该直接访问具体实现,一般会涉及到以下四个对象 业务接口:定义客户端访问的接口,是实现类和代理类都需要实现的 实现类:实现了业务接口,真正 ...

  8. Jenkins+ant+jmeter接口自动化

    1.Jenkins新建slave节点 2.Jenkins新建job,配置job,关联到slave, 3.执行构建 build文件如下 <?xml version="1.0" ...

  9. Java常见面试问题: equals()与hashCode()的使用

    目录 1 equals()与'=='的区别 2 equals()方法的重写规则 3 为什么重写equals()的同时还需要重写hashCode() 4 JDK 7中对hashCode()方法的改进 5 ...

  10. css样式获取及兼容性(原生js)

    类选择器兼容性 getbyclass()类选择器,在IE8及以下均不可用. // 类选择器的兼容性 function getbyclass(parentName,Name){ var parentNa ...