ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

三天学会MySQL(二)SQL之DDL

2022-01-17 11:58:34  阅读:172  来源: 互联网

标签:删除 SQL 数据库 DDL 约束 emp MySQL table 主键


目录

一.SQL语言介绍

二.DDL(数据定义语言)

1.创建数据库

2.选择数据库

三.MySQL的数据类型

四.创建表与删除表

五.修改表

六.约束


一.SQL语言介绍

1.SQL语言简介

        结构化查询语言(Structured Query Language) 简称 SQL( 发音:sequal['si:kw əl]),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

2.SQL 能做什么

  1. SQL 面向数据库执行查询
  2. SQL 可在数据库中插入新的记录
  3. SQL 可更新数据库中的数据
  4. SQL 可从数据库删除记录
  5. SQL 可创建新数据库
  6. SQL 可在数据库中创建新表
  7. SQL 可在数据库中创建存储过程
  8. SQL 可在数据库中创建视图
  9. SQL 可以设置表、存储过程和视图的权限

3.SQL 标准

        SQL 是 1986 年 10 月由美国国家标准局( ANSI )通过的数据库语言美国标准,接着,国际标准化组织( ISO )颁布了 SQL 正式国际 标准。 1989 年 4 月, ISO 提出了具有完整性特征的 SQL89 标准, 1992 年 11 月又公布了 SQL92 标准,在此标准中,把数据库分为 21 三个级别:基本集、标准集和完全集。在 1999 年推出 99 版标准。 最新版本为 SQL2016 版。比较有代表性的几个版本: SQL86 、 SQL92 、 SQL99 。

4.SQL语言分类

1 数据查询语言(DQL : Data Query Language )其语句,也称为 “ 数据检索语句 ” ,用以从表中获得数据,确定数据怎样在应用程 序给出。关键字 SELECT 是 DQL (也是所有 SQL )用得最多的 词。 SELECT FROM WHERE ORDER BY HAVING 2 数据操作语言( DML : Data Manipulation Language )其语句包括动词 INSERT , UPDATE 和 DELETE 。它们分别用于添加, 修改和删除表中的行。 INSERT :添加数据 UPDATE :更新数据 DELETE :删除数据 3 数据定义语言( DDL : Data Definition Language )定义数据库对象语言,其语句包括动词 CREATE 和 DROP 等。 CREATE :创建数据库对象 ALTER :修改数据库对象 DROP :删除数据库对象 4 数据控制语言( DCL : Data Control Language )它的语句通过GRANT 或 REVOKE 获得许可,确定用户对数据库对象的访问。 GRANT :授予用户某种权限 REVOKE :回收授予的某种权限 5 事务控制语言( TCL : Transaction Control Language )它的语句能确保被 DML 语句影响的表的所有行及时得以更新。 COMMIT :提交事务 ROLLBACK :回滚事务 SAVEPOINT :设置回滚点 注意: 数据操纵语言 DML ( insert 、 update 、 delete )针对表中的数据 ; 而数据定义语言 DDL ( create 、 alter 、 drop )针对数据库对象,比如数据库 database 、表 table 、索引 index 、视图 view 、 存储过程 procedure 、触发器 trigger ;

5.SQL语言语法

1 SQL 语句不区分大小写,关键字建议大写。 2 SQL 语句可以单行或多行书写,以分号结尾。

二.DDL(数据定义语言)

1.创建数据库

(1)使用DDL语句创建与删除数据库(cmd下创建) 创建: CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符编码 ; 示例:创建一个 test 的数据库,并查看该数据库,以该数据库的编 码。 创建数据库: create database test default character set utf8; 查看数据库: show databases ; 查看数据库编码: select schema_name ,default_character_set_name from information_schema .schemata where schema_name = 'test' ; 删除:

 使用DDL语言删除数据库

DROP DATABASE 数据库名称 ; 示例: 删除 test 数据库 drop database test; (2)Navicat创建与删除数据库 右键下图左侧红框区域,选择新建数据库,填写数据库名称,选择字符集之后点击确定。

删除数据库,右键相应数据库,选择删除数据库即可!

2.选择数据库

在创建表时,需要先选择数据库。 USE 数据库名 ;

三.MySQL的数据类型

 1.整数类型

 最常用的就是tinyint和int,当表示性别或状态等可以用0/1来表示的属性时,常用tinyint,而其他的可变长的常用int。

数值类型中的长度 m 是指显示长度(不用必须指定),并不表示存储长度,只有字段指定 zerofill 时有用 。 例如: int(3) ,如果实际值是 2 ,如果列指定了 zerofill ,查询结果就是 002 ,左边用 0 来 填充 。

2.浮点类型

必须指定两个参数!整数位有m-d位。

 3.字符类型

 最常用的是char,varchar,text,其中char,varchar必须指定括号里的最大长度,不同之处是char字符长度不满足最大长度n时,前面会用空格补齐;varchar字符长度不满足最大长度n时,不会用空格补齐。

char varchar
  • 1 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
  • 2 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
  • 3 text不设置长度, 当不知道属性的最大长度时,适合用text。
按照查询速度: char 最快, varchar 次之, text 最慢。

字符串型使用建议:
  • 1 经常变化的字段用varchar
  • 2 知道固定长度的用char
  • 3 尽量用varchar
  • 4 超过255字符的只能用varchar或者text
  • 5 能用varchar的地方不用text

 4.日期类型

 当项目中时间是考虑时区的,则使用时间戳timestamp(支持时区处理),datetime不支持时区处理。

5.二进制数据(BLOB)

Byte Large Object的缩写,即字节大对象。
  • BLOB和TEXT存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写。
  • BLOB存储的数据只能整体读出。
  • TEXT可以指定字符集,BLOB不用指定字符集。

四.创建表与删除表

 1.创建表

 (1)使用DDL语句创建表

CREATE TABLE 表名 ( 列名 类型 , 列名 类型 ...... ) ; 示例: 创建一个 employees 表包含雇员 ID ,雇员名字,雇员薪水。 create table employees ( employee_id int ,employee_name varchar ( 10 ) ,salary float ( 8 , 2 )) ; 查看已创建的表。 show tables ; (2)使用Navicat创建表 点击一个数据库,点击表,点击右侧的创建表,输入各属性的规格,再点击保存或Ctrl+S,再输入表名,点击确定,就生成了一个表。

 删除的话就是右键表删除即可。

2.删除表

使用 DDL语句删除表  DROP TABLE 表名 ; 示例: 删除 employees 表。 drop table employees; 2

五.修改表

1.修改表名

使用DDL语句修改表 ALTER TABLE 旧表名 RENAME 新表名 ; 示例一: 创建一个 employees 表包含雇员 ID ,雇员名字,雇员薪水。 create table employees ( employee_id int ,employee_name varchar ( 10 ) ,salary float ( 8 , 2 )) ; 示例二: 将 employees 表名修改为 emp 。

 alter table employees rename emp;

使用Navicat修改表名

鼠标右键选择重命名即(比较无脑,很多操作其实自己点点就看见了,很方便),或者选中表按F2也可重命名。

2.修改列名

 使用DDL语句修改列名

ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 类型 ; 示例: 将 emp 表中的 employee_name 修改为 name 。 alter table emp change column employee_name name varchar ( 20 ) ;

使用Navicat修改列名

右键表,点击设计表,即可修改表的设置。

3.修改列类型

 使用DDL语句修改列类型

ALTER TABLE 表名 MODIFY 列名 新类型 ; 示例: 将 emp 表中的 name 的长度指定为 40 。 alter table emp modify name varchar ( 40 ) ; 使用Navicat修改列类型 还是右键表,选择设计表,修改之后保存(Ctrl+S)即可。 4.添加新列

使用DDL语句添加新列 ALTER TABLE 表名 ADD COLUMN 新列名 类型 ; 示例: 在 emp 表中添加佣金列,列名为 commission_pct 。 alter table emp add column commission_pct float ( 4 , 2 ) ; 使用Navicat添加新列 还是设计表。。不过不是鼠标点击空白处,而是上下键。 5.删除指定列

使用 DDL 语句删除指定的列 ALTER TABLE 表名 DROP COLUMN 列名 ; 示例: 删除 emp 表中的 commission_pct 。 alter table emp drop column commission_pct; 使用 Navicat 删除指定的列 右键。

六.约束

1.MySQL中的约束

         主键约束其实就是唯一性约束和非空约束的复合;MySQL不支持检查约束。

约束概述 数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。 1 主键约束(Primary Key) PK 主键约束是使用最频繁的约束。在设计数据表时,一般情况下,都会要求表中设置一个主键。 主键是表的一个特殊字段,该字段能唯一标识该表中的每条 信息。例如,学生信息表中的学号是唯一的。 外键约束(Foreign Key) FK 外键约束经常和主键约束一起使用,用来确保数据的一致 性。 3 唯一性约束(Unique) 唯一约束与主键约束有一个相似的地方,就是它们都能够确 保列的唯一性。与主键约束不同的是,唯一约束在一个表中 可以有多个,并且设置唯一约束的列是允许有空值的。 4 非空约束(Not Null) 非空约束用来约束表中的字段不能为空。 5 检查约束(Check) 检查约束也叫用户自定义约束,是用来检查数据表中,字段值是否有效的一个手段,但目前 MySQL 数据库不支持检查 约束。 2.添加主键约束 (Primary Key) 单一主键 (使用较多) 使用一个列作为主键列,当该列的值有重复时,则违反唯一约束。 2 联合主键 使用多个列作为主键列,当多个列的值都相同时,则违反唯一约束。 修改表添加主键约束 1 使用 DDL 语句添加主键约束 ALTER TABLE 表名 ADD PRIMARY KEY ( 列名 ) 若使用联合主键,则在括号里形式是(列名,列名,列名,....) 示例: 将 emp 表中的 employee_id 修改为主键。 alter table emp add primary key ( employee_id ) ; 主键自增长 MySQL 中的自动增长类型要求:
  1. 一个表中只能有一个列为自动增长。
  2. 自动增长的列的类型必须是整数类型
  3. 自动增长只能添加到具备主键约束与唯一性约束的列上。
  4. 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后再删除约束。
alter table 表名 modify 主键 类型 auto_increment ;

示例: 将 emp 表中的 employee_id 主键修改为自增。 alter table emp modify employee_id int auto_increment ; 使用Navicat添加(删除)主键约束不是null那一栏的后面一栏,在要添加为主键的属性后面单机即可,会出现一把小钥匙,即已经设置为主键,联合主键再在别的后面点击即可。 设置自动递增勾选即可。

删除的话就单击,取消勾选啥的就行了,没啥好说的。

3.删除主键

使用 DDL 语句删除主键 ALTER TABLE 表名 DROP PRIMARY KEY ; 注意: 删除主键时,如果主键列具备自动增长能力,需要先去掉自动增长,然后在删除主键。 示例: 删除 emp 表中的 employee_id 主键约束。 去掉自动增长: alter table emp modify employee_id int ; 删除主键: alter table emp drop primary key ;

 4.添加外键约束(Foreign Key)

外键:允许有重复,允许有空,如果有值必须是另一个表的的主键的一个值。

修改表添加外键约束 1 使用DDL语句添加外键约束 ALTER   TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN   KEY ( 列 名 ) REFERENCES 参照的表名 ( 参照的列名 ) ; 注:约束名一般是表名_fk,如果有多个外键约束,则可以使用表名_fk1,表名_fk2 示例一: 创建 departments 表包含 department_id 、department_name , location_id 。 create table departments ( department_id int ,department_name varchar ( 30 ) ,location_id int ) ;

示例二: 修改 departments 表,向 department_id 列添加主键约束与自动 递增。 alter table departments add primary key ( department_id ) ; alter table departments modify department_id int auto_increment ;

示例三: 修改 emp 表,添加 dept_id 列。 alter table emp add column dept_id int ;

示例四: 向 emp 表中的 dept_id 列添加外键约束。 alter table emp add constraint emp_fk foreign key ( dept_id ) references departments ( department_id ) ;

添加外键失败解决办法:将表的的引擎设置为InnoDB(支持外键),在设计表中设置。

 

使用Navicat添加外键约束

 设计表中在点击外键,填写即可(一些属性可选择栏,不用非得手敲!)

5.删除外键约束 1 使用DDL语句删除外键约束。 ALTER TABLE 表名 DROP FOREIGN KEY 约束名 ; 示例: 删除 dept_id 的外键约束。 alter table emp drop foreign key emp_fk; 使用Navicat删除外键约束

右键。

6.添加(删除)唯一性约束

查看唯一性约束在设计表中的索引一栏。

使用DDL语句添加唯一性约束。

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE ( 列名 ) ; 示例: 向 emp 表中的 name 添加唯一约束(即添加后每一个name都是唯一的,即不能有重复值)。 alter table emp add constraint emp_uk unique ( name ) ;  

使用DDL语句添删除唯一性约束。

ALTER TABLE 表名 DROP KEY 约束名;

示例: 删除 name 的唯一约束。 alter table emp drop key emp_uk;

使用Navicat添加(删除)唯一性约束 

添加:和添加外键差不多,只不过在索引栏添加。

删除:右键

7. 非空约束(Not Null)

使用DDL语句添加非空约束。  

ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL ; 示例: 向 emp 表中的 salary 添加非空约束。 alter table emp modify salary float ( 8 , 2 ) not NULL ;

删除非空约束 1 使用 DDL 语句删除非空约束。

 ALTER TABLE 表名 MODIFY 列名 类型 NULL;

示例: 删除 emp 表中 salary 的非空约束。 alter table emp modify salary float ( 8 , 2 ) NULL ;

 

使用Navicat添加(删除)非空约束。

在不是null那一栏勾选或取消勾选即可。

 

创建表时添加约束 查询表中的约束信息: SHOW KEYS FROM 表名 ; 示例: 创建 depts 表包含 department_id 该列为主键且自动增长,department_name 列不允许重复, location_id 列不允含有空值。 create table depts ( department_id int primary key auto_increment ,department_name varchar ( 30 ) unique ,location_id int not null ) ;

 

标签:删除,SQL,数据库,DDL,约束,emp,MySQL,table,主键
来源: https://blog.csdn.net/weixin_44593822/article/details/122500500

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有