二.关系数据库标准语言SQL
结构化查询语言(Sructured Query Language, SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。目前,没有一个数据库系统能够支持SQL标准的所有概念和特性。同时,许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改,又可以支持标准以外的一些功能特性。
1.SQL的特点
① 综合统一:SQL语言集数据查询语言(DQL)、数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL)于一身。
② 高度非过程化:用SQL语言进行数据操作,无需了解存储路径。
③ 面向集合的操作方式:SQL采用的集合操作方式,不仅操作对象、查询结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
④SQL语言既是自含式语言(能独立地用于联机交互),又是嵌入式语言(能嵌入到高级语言中进行混合编程)。
⑤ 语言简捷,易学易用。
2.SQL的基本概念
3.数据定义
——定义数据库中的基本对象,包括模式、表、视图和索引。
PS:
SQL标准不提供修改模式定义和修改视图定义的操作,用户如果想修改这些对象,只能先将它们删除然后再重建。
SQL标准也没有提供索引相关的语句,但为了提高查询效率,商用关系数据库管理系统通常都提供了索引机制和相关的语句。
①模式的定义与删除
定义模式:CREATE SCHEMA (<模式名>) AUTHORIZATION <用户名> [<表定义自居>|<视图定义字句>|<授权定义字句>];
要创建模式,调用该命令的用户名必须拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA权限。如果语句没有指定<模式名>,那么<模式名>隐含为<用户名>。
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象。
CREATE SCHEMA (<模式名>) AUTHORIZATION <用户名> [<表定义自居>|<视图定义字句>|<授权定义字句>];
删除模式:DROP SCHEMA (<模式名>) <CASCADE|RESTRICT>
CASCADE和RESTRICT必须二选一!
CASCADE(级联):删除模式的同时把该模式中所有数据对象全部删除。
RESTRICT(限制):该模式没有任何下属的数据库对象时才能执行。
②基本表的定义、删除与修改
基本表:本身独立存在的表。在关系数据库管理系统中一个关系就对应一个基本表。
CREATE TABLE <表名>
(
<列名> <数据类型> [列级完整性约束条件],
<列名> <数据类型> [列级完整性约束条件],
......
[[表级完整性约束]]
);
三.MySQL的启动和登录
1.启动与停止服务
在命令行输入执行net start mysql
启动,net stop mysql
停止。
可能出现错误:
MySQL登录ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using passwor=YES)问题
亲测有效
启动MySQL报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
2.登录MySQL数据库
① 在命令行输入执行命令mysql -uroot -p
②MySQL客户端登录数据库
3.执行基本语句
1)查看帮助信息
输入执行语句help;
注意MySQL语句要以“;”结尾。
2)查看系统时间和日期
SELECT语句可以用于查询,它类似于其他编程语言中的print或者write,可以使用它来显示一个字符串、数字或数学表达式的结果等。
①查看系统当前时间SELECT NOW()
②可以单独查看系统当前的日、月、年
日:SELECT DAYOFMONTH(CURRENT_DATE);
月:SELECT MONTH(CURRENT_DATE);
年:SELECT YEAR(CURRENT_DATE);
三.MySQL数据库基本操作
1. 存储引擎
存储引擎,如何存储数据,如何为存储的数据建立索引和如果更新、查询数据等技术的实现方法。由于在关系型数据库中数据的存储是以表的形式存储的,所以存储引擎也称为表类型(即存储和操作的类型)。
在Oracle和SQL Server等数据库中只有一种存储引擎,所以数据存储管理机制都是一样的。但是,MySQL数据库提供了多种存储引擎。
①查看数据库存储引擎
执行语句SHOW ENGINES;
还可以用‘\G’或"\g代替分号“;”结尾,效果更美观。
SHOW ENGINES \G
显然,InnoDB是默认的数据库存储引擎。
Engine:数据库存储引擎名称。
Support:表示MySQL是否支持该类引擎,YES表示支持,NO表示不支持。
Comment:表示对该引擎的评论信息。
Transactions:表示是否支持事务处理,YES表示支持,NO表示不支持。
XA:表示是否分布式交易处理的XA规范,YES表示支持,NO表示不支持。
Savepoints:表示是否支持保存点,以便事物回滚到保存点,YES表示支持,NO表示不支持。
2. 创建数据库
法一:MySQL Workbench创建
法二:从cmd进入数据库,连接成功后执行mysql语句创建
在MySQL中,CREATE SCHEMA创建了一个数据库,这是因为CREATE SCHEMA是CREATE DATABASE的同义词。 换句话说,你可以使用CREATE SCHEMA或者CREATE DATABASE来创建一个数据库。
执行语句CREATE DATABASE (数据库名);
或CREATE SCHEMA (数据库名);
。两者效果相同。(其他的数据库并不一定这样)
“Query OK”表示创建、修改和删除成功。
“1 row affected(0.13sec)”表示1行受到影响,处理时间为0.13秒。
创建数据库时,如果与已有的数据库同名,会报错:
一种避免报错的方法,创建前先查重:执行语句CREATE DATABASE IF NOT EXISTS XXX;
在创建XXX数据库前,前查询是否已创建同名的:没有,直接创建。有的话,warning。
3. 删除数据库
执行语句:DROP DATABASE XXX;
再次查看,已无“wysbd_jy”数据库。
4. 建表
先选择数据库:
创建表:
PS:
主码
主键/主码:表中一列或多列的组合。能够唯一表示表中的一条记录,可以结合外键来定义不同数据表之间的联系,并且可以加快数据库查询的速度。
主键约束:要求主键列的数据唯一,并且不允许为空。
分类:
单字段主键:主键由一个字段组成,两种定义方法
法一:在定义列的同时,指定主键
字段名 数据类型 PRIMARY KEY [默认值]
法二:在定义完所有列之后指定主键
PRIMARY KEY [字段名];
多字段主键:主键由多个字段联合组成——所以只有一个PRIMARY KEY
PRIMARY KEY [字段1,字段2,....,字段n]
外码
外键/外码:用来连接**两个表(也可以是同一张表)**的数据,可以是一列或者多列。
性质:一个表可以有≥1个外键,即有多个与别的表的主键有哦关联关系的列,但是要对应另一个表的主键。一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值,所以创建时数据类型必须相同,否则会报错。
作用:保证数据引用的完整性、一致性,定义外键后,不允许删除在另一个表中具有关联关系的行(不可能出现外键还在,主键已经被删了的情况)。
主表(父表):两个表相关联字段中主键所在那个表。
从表(子表):两个表相关联字段中外键所在那个表。
(CONSTRAINT 外键约束名) FOREIGN KEY(字段名...) REFERENCES 主表名(主键列名....)
外键名:定义的外键约束的名称,一个表中不能有相同名称的外键。 【关系名】
字段名:子表中需要添加外键约束的字段列。
主表名:被子表外键所依赖的表的名称。
主键列:表示主表中定义的主键列或列组合。
非空约束
字段是可以取空值的,非空约束指定字段不能取空值。
字段名 数据类型 NOT NULL;
唯一性约束
唯一性约束可以确保一列或几例不出现重复值,允许为空,但只能出现一个空值。
和主键一样,有两种定义方式:
法一:在定义完列后直接指定唯一约束
字段名 数据类型 UNIQUE;
法二:在定义完所有列之后指定唯一约束
UNIQUE(字段名)
UNIQUE vs PRIMAEY KEY
UNIQUE :一个表中可以有多个字符声明为UNIQUE,声明为UNIQUE的列允许有空值的存在。
PRIMARY KEY:一个表中只能有一个PRIMARY KEY(可以是组合形式的,但这种情况只能有一个放在后面的PRIMARY KEY声明),声明为PRIMARY KEY的列不允许有空值。
默认约束
新输入的记录中的默认约束字段如果没有指定值,就默认为默认值。
字段名 数据类型 DEFAULT 默认值
设置表的属性值自动增加
在MySQL中AUTO_INCREMENT的初始值为1,每新增一条记录,字段值自动加1。
一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。
AUTO_INCREMENT约束的字段可以是任何整数类型。
语法:字段名 数据类型 AUTO_INCREMENT;
因为,通常和主键一起定义,所以通常会出现:
字段名 数据类型 PRIMARY KEY AUTO_INCREMENT;
4.表的显示
查看当前使用的数据库中的表:
查看表结构
可以查看表的字段信息,包括字段名、字段数据类型、是否为空值、是否为默认值(以及默认值是多少)、是否为主键等。
语法:DESCRIBE 表名;
Extra:可以获取与给定列有关的附加信息,如AUTO_INCREMENT等。
5. 修改数据表
修改表名
把表“A”改名为“B”。
执行语句:ALTER TABLE A RENAME B;
修改字段的数据类型
语法:ALTER TABLE 字段名 MODIFY name 新数据类型;
修改字段名
CHANGE可以修改字段名,也可以只修改数据类型(同MODIFY),还可以将两者一起修改。
语法:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
更改字段名和数据类型:
如果只修改表名,那么把数据类型设置成原来的就行了。注意,数据类型不能为空。
也可以只改数据类型,把旧字段名和新字段名设成一样的就行了,
6. 添加、删除字段
ALTER TABLE 表名 ADD 字段名 数据类型 (FIRST | AFTER 已存在的字段名);
不选FIRST 或 AFTER XXX,就默认把列添加到最后一列。 FIRST:把字段添加到第一列
AFTER XXX:把列添加到指定列的后一列。
添加字段
① 添加无完整性约束条件的字段
② 添加有完整性约束条件的字段
③ 在表的第一列添加一个字段
④ 在表的指定列之后添加一个字段
DESCRIBE test_tb;
删除字段
删除表的外键约束
执行语句:ALTER TABLE 子表名 DROP FOREIGN KEY 外键约束名;
删除被数据表tb_emp9关联的数据表tb_dept1
在存在外键约束时,主表不能直接被删除。
正确做法:
①解除所有的子表的外键约束
ALTER TABLE 子表名 DROP FOREIGN KEY 外键约束名;
②删除父表