数据库约束和视图问题 [sql] --约束 --**************************************************************** --非空约束:(not null) * 确保字段值不允许为空 * 与其他约束相比是唯一只能在字段级定义 --在列级定义 create table EMPLOYEESNOTNULL ( EMPLOYEE_
数据库约束和视图问题
[sql]
--约束
--****************************************************************
--非空约束:(not null)
* 确保字段值不允许为空
* 与其他约束相比是唯一只能在字段级定义
--在列级定义
create table EMPLOYEESNOTNULL
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20) not null,--在列级定义
LAST_NAME VARCHAR2(25)
)
www.2cto.com
--在表的外部定义约束
create table EMPLOYEESNOTNULL_01
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25)
)
alter table EMPLOYEESNOTNULL_01
modify FIRST_NAME not null
--******************************************************************************************
--唯一性约束(UNIQUE)
* 唯一性约束条件确保所在的字段或者字段组合不出现重复值
* 唯一性约束条件的字段允许出现(1或多个)空值
* Oracle将为唯一性约束条件创建对应的唯一性索引
注:如果字段有值,要唯一,但空值可以出现多个
--方法一 在列级定义
create table emp_un_01
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20) unique, --列级定义
LAST_NAME VARCHAR2(25)
)
--方法二 在表级定义约束
--在表级定义约束额语法格式
constraint 约束的名称 约束的类型(字段1,字段2)
* 约束的名称 自定义
* 约束的类型(unique,primary key)
* (字段1,字段2) 如果有多个字段,中间用,隔开
create table emp_un_02
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25),
constraint un_emp_un_02 unique(first_name) --在表级定义约束
)
www.2cto.com
--方法三 在表的外部定义约束
--语法结构:
alter table table_name
add constraint 约束的名称 约束的类型(字段1,字段2)
* 约束的名称 自定义
* 约束的类型(unique,primary key)
* (字段1,字段2) 如果有多个字段,中间用,隔开
create table emp_un_03
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25)
)
alter table emp_un_03
add constraint un_emp_un_03 unique(first_name)
www.2cto.com
--方法四(在表级定义联合唯一)
create table emp_un_04
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25),
constraint un_emp_un_04 unique(first_name,LAST_NAME) --在表级定义约束
)
--方法五(在表的外部定义)
create table emp_un_05
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25)
)
www.2cto.com
alter table emp_un_05
add constraint un_emp_un_05 unique(first_name,LAST_NAME)
--******************************************************************************************
--主键约束( PRIMARY KEY)
* 主键从功能上看相当于非空且唯一
* 一个表中只允许一个主键
* 主键是表中能够唯一确定一个行数据的字段
* 主键字段可以是单字段或者是多字段的组合
* Oracle为主键创建对应的唯一性索引
--方法一 在列级定义
create table emp_pk_01
(
EMPLOYEE_ID NUMBER(6) primary key,
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25)
)
--方法二 在表级定义
create table emp_pk_02
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25),
constraint pk_emp_pk_02 primary key(EMPLOYEE_ID)
)
www.2cto.com
--方法三 在外部定义
create table emp_pk_03
(
EMPLOYEE_ID NUMBER(6),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25)
)
alter table emp_pk_03
add constraint pk_emp_pk_03 primary key(EMPLOYEE_ID)
--方法四(联合主键) 在表级定义
--账号表
create table account_01
(
accounid varchar2(18) primary key, --账号
balance number(10,2) --余额
)
--存款信息表
create table inaccount_01
(
accounid varchar2(18), --账号
inbalance number(10,2), --存入金额
indate timestamp, --存款时间
constraint pk_inaccount_01 primary key(accounid,indate)
)
insert into inaccount_01(accounid,inbalance,indate) values('1111',12,sysdate);
insert into inaccount(accounid,inbalance,indate) values('1111',10,sysdate);
www.2cto.com
--方法五 ,在外部定义
create table account_02
(
accounid varchar2(18) primary key, --账号
balance number(10,2) --余额
)
--存款信息表
create table inaccount_02
(
accounid varchar2(18), --账号
inbalance number(10,2), --存入金额
indate timestamp --存款时间
)
alter table inaccount_02
add constraint pk_inaccount_02 primary key(accounid,indate)
--**********************************************************************************
--外键约束( FOREIGN KEY)
* 外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
* 外键确保了相关的两个字段的关系:
* 子表外键列的值必须在主表参照列值的范围内,或者为空
* 主表主键值被子表参照时,主表记录不允许被删除
* 外键约束条件参照的是主表的一个或者多个字段的值,通常被外键参照的 是
主表的主键或者唯一键
--在表级定义外键约束语法格式
constraint 约束的名称 foreign key(外键字段) references 表(主键)
* 约束的名称 自定义
* 约束的类型(foreign key)
* references 表(主键) 参照表的字段 一般为主表的主键
www.2cto.com
--方法一 在表级定义
create table deptfk_01
(
DEPARTMENT_ID NUMBER(4) primary key,
DEPARTMENT_NAME VARCHAR2(30),
MANAGER_ID NUMBER(6),
LOCATION_ID NUMBER(4)
)
create table EMPFK_01
(
EMPLOYEE_ID NUMBER(6) ,
FIRST_NAME VARCHAR2(20),
DEPARTMENT_ID NUMBER(4),
constraint fk_EMPFK_01 foreign key(DEPARTMENT_ID) references deptfk_01
(DEPARTMENT_ID)
)
www.2cto.com
--方法二 在表的外部定义
--在外部定义外键约束的语法格式
alter table table_name
add constraint 约束的名称 foreign key(外键字段) references 表(主键)
* 约束的名称 自定义
* 约束的类型(foreign key)
* references 表(主键) 参照表的字段 一般为主表的主键
create table deptfk_02
(
DEPARTMENT_ID NUMBER(4) primary key,
DEPARTMENT_NAME VARCHAR2(30),
MANAGER_ID NUMBER(6),
LOCATION_ID NUMBER(4)
)
create table EMPFK_02
(
EMPLOYEE_ID NUMBER(6) ,
FIRST_NAME VARCHAR2(20),
DEPARTMENT_ID NUMBER(4)
)
alter table EMPFK_02
add constraint fk_EMPFK_02 foreign key(DEPARTMENT_ID) references deptfk_02
(DEPARTMENT_ID)
--方法三(主外键作用于一个表的两个字段)
create table emp_two
(
EMPLOYEE_ID NUMBER(6) primary key,
FIRST_NAME VARCHAR2(20),
MANAGER_ID NUMBER(6) --外键
)
www.2cto.com
alter table emp_two
add constraint fk_emp_two foreign key(MANAGER_ID) references emp_two
(EMPLOYEE_ID)
--************************************************************************************
--check约束
* Check约束条件是一种比较特殊的约束条件,通过check定义,
* 强制定义在字段上的每一记录都要满足check中定义的条件。
* 在check中定义检查的条件表达式,进入表中的数据必须符合check中设置的条件
create table empck
(
EMPLOYEE_ID NUMBER(6) primary key,
FIRST_NAME VARCHAR2(20),
SALARY NUMBER(8,2) -->6000
)
alter table empck
add constraint ck_empck check(salary>6000)
--************************************************************************************
www.2cto.com
--删除约束
* 删除约束条件对于表和数据不会产生影响
* 删除约束emp_manager_fk
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
--删除ck_empck
alter table empck
drop constraint ck_empck
-- www.2cto.com ******************************************************************
--约束的应用案例:
create table F_ADDRESS
(
address_id number(6) primary key,
province_name varchar2(20),
city_name varchar2(20),
district_name varchar2(20),
street_name varchar2(20),
street_nbr varchar2(20),
detail varchar2(20),
postcode varchar2(10)
)
www.2cto.com
create table f_cust
(
cust_id number(6) primary key,
cust_name varchar(50),
address_id number(6),
state varchar(10)
)
alter table f_cust
add constraint fk_f_cust foreign key(address_id) references F_ADDRESS
(address_id)
alter table f_cust
add constraint ck_f_cust check(state in('在用','作废'))
--定义约束f_cust中 cust_name唯一
alter table f_cust
add constraint un_f_cust unique(cust_name)
--删除约束
alter table f_cust
drop constraint un_f_cust
www.2cto.com
--**************************************************************************************
--视图: --为sql语句起的别名 给予表之上的一个查询语句
--语法:
--在CREATE VIEW语句后加入子查询.
CREATE [OR REPLACE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH READ ONLY];
create or replace view v_emp
as
select * from employees
--查询视图
select * from v_emp;
--视图的作用
--* select 语句比较复杂
--* select语句在开发的程序中可能多次使用
--* 在程序中直接使用视图 select * from v_emp
create or replace view v_emp
as
select "EMPLOYEE_ID","FIRST_NAME","LAST_NAME","EMAIL","PHONE_NUMBER",
"HIRE_DATE","JOB_ID","SALARY","COMMISSION_PCT","MANAGER_ID",
"DEPARTMENT_ID" from employees
www.2cto.com
--描述视图的结构(命令行执行)
desc v_emp
describe v_emp
--创建复杂视图
create or replace view v_emp_dept
as
select d.department_name,min(salary) mins,max(salary) mass,avg(salary) avgs,
sum(salary) sums,count(salary) counts
from employees e,departments d
where e.department_id=d.department_id
group by d.department_name
--查询视图 www.2cto.com
select * from v_emp_dept
--通过视图插入数据到表中
create or replace view v_dept
as
select deptno,dname,loc from dept
--查询视图
select * from v_dept
--通过 v_dept视图插入数据到dept表中
insert into v_dept(deptno,dname,loc) values(89,'xxx','ss')
--通过设置WITH READ ONLY选项可以禁止对视图执行DML操作.
create or replace view v_dept
as
select deptno,dname,loc from dept
with read only
--删除视图 www.2cto.com
--删掉视图不会导致数据的丢失,因为视图是基于数据库的表之上的一个查询定义.
DROP VIEW view_name;
--删除v_dept视图
drop view v_dept
-******************************************************************************************

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

MySQL是一个开源的关系型数据库管理系统,适用于数据存储、管理、查询和安全。1.它支持多种操作系统,广泛应用于Web应用等领域。2.通过客户端-服务器架构和不同存储引擎,MySQL高效处理数据。3.基本用法包括创建数据库和表,插入、查询和更新数据。4.高级用法涉及复杂查询和存储过程。5.常见错误可通过EXPLAIN语句调试。6.性能优化包括合理使用索引和优化查询语句。

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

InnoDB的锁机制包括共享锁、排他锁、意向锁、记录锁、间隙锁和下一个键锁。1.共享锁允许事务读取数据而不阻止其他事务读取。2.排他锁阻止其他事务读取和修改数据。3.意向锁优化锁效率。4.记录锁锁定索引记录。5.间隙锁锁定索引记录间隙。6.下一个键锁是记录锁和间隙锁的组合,确保数据一致性。

MySQL查询性能不佳的原因主要包括没有使用索引、查询优化器选择错误的执行计划、表设计不合理、数据量过大和锁竞争。 1.没有索引导致查询缓慢,添加索引后可显着提升性能。 2.使用EXPLAIN命令可以分析查询计划,找出优化器错误。 3.重构表结构和优化JOIN条件可改善表设计问题。 4.数据量大时,采用分区和分表策略。 5.高并发环境下,优化事务和锁策略可减少锁竞争。

在数据库优化中,应根据查询需求选择索引策略:1.当查询涉及多个列且条件顺序固定时,使用复合索引;2.当查询涉及多个列但条件顺序不固定时,使用多个单列索引。复合索引适用于优化多列查询,单列索引则适合单列查询。

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境