目录
一.SQL语言介绍
1.SQL语言简介
结构化查询语言(Structured Query Language) 简称 SQL( 发音:sequal['si:kw əl]),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。2.SQL 能做什么
- SQL 面向数据库执行查询
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- 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。
- 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 中的自动增长类型要求:- 一个表中只能有一个列为自动增长。
- 自动增长的列的类型必须是整数类型。
- 自动增长只能添加到具备主键约束与唯一性约束的列上。
- 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后再删除约束。
删除的话就单击,取消勾选啥的就行了,没啥好说的。
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 ) ;