Menu
Woocommerce Menu

以及如何在数据库编程中应用和使用这些约束,  3).每列为记录名称所对应的数据域

0 Comment


6.查询方式

选择  【int()  not in()  between 
 and     】

模糊  【通配符: %   _   * 
   】

筛选  【where  like  = 】

排序  【order by  】

聚合  【count  sum  avge  max  min  

分组  【group by 】

连接  【
内连接  外连接  全连接  交叉连接  】

子查询  【select  * from  A   where
id not in (select  id from A where id>=10)】

 

 

 

 

 

 

 

 

 

 

 

 

一次修改多条记录
update employees e set e.salary = 
case e.employee_id
  when 1 then 5555
  when 2 then 6666
end
where e.employee_id<3;

#引用完整性(参照完整性)

    外键约束:  foreing     key

     分清主次关系  外键依赖主键    先有主键  再有外键

      语法   

         CONSTRAINT 约束的名字   FOREIGN KEY(约束的字段) REFERENCES
主表(约束字段)

        ALTER  TABLE  次表名称  ADD CONSTRAINT 约束的名字 FOREIGN
KEY(约束的字段)               REFERENCES   主表(约束的字段);

    例:

    CREATE TABLE student(sid int pirmary key,name varchar(50) not
null,sex varchar(10)                   default‘男’);

    create table score(id int,score int,sid int ,
–外键列的数据类型一定要与主键的类型一致

    CONSTRAINT fk_score_sid foreign key (sid) references student(id));

   第二种添加外键方式。

    ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid)
REFERENCES     stu(id);

选择”新建”命令。系统分配的名称出现在”索引名”框中。

3.RDBMS 术语
数据库:       数据库是一些关联表的集合。.
数据表:      
表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列:              一列(数据元素) 包含了相同的数据,
例如邮政编码的数据。
行:           
一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

3.数据完整性分类

域完整性

实体完整性

自定义完整性

引用完整性

 

数据库的约束

约束是表级强制执行的规则,当表中数据有相互依赖性时,可以保护数据不被删除

#实体的完整性

概述:  实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行                数据不重复

约束类型有:主键约束 primary key      唯一约束 unique   自动增长列
 auto_increment 

  *主键约束

            注:每个表中要有一个主键。特点:数据唯一,且不能为null。

            第一种添加方式:

                 CREATE TABLE student( id int primary key, name
varchar(50));

            第二种添加方式:此种方式优势在于,可以创建联合主键

                 CREATE TABLE student(id int,name varchar(50),primary
key(id));

                 CREATE TABLE student(classid int,stuid int,name
varchar(50),primary key(classid                           ,stuid));

           第三种添加方式:

                 CREATE TABLE student(id int,name varchar(50));

                  ALTER TABLE  student  ADD PRIMARY  KEY (id);

*唯一约束

        特点是不能重复

        create table student(id int primary key,name varchar(255)
unique);

*自动增长列

       sqlserver数据库(identity)     oracle数据库( sequence)��

       给主键添加自动增长的数值,列只能是整数类型

      create table student(id int primary key auto_increment,name
varchar(255));

 

25)alter table <表名> change sex gender char(32) not null default
‘X’;
         #更改字段sex为gender,数据类型为char(32),且不能为空,默认数值为’X’

1.数据库设计三大范式

case表达式:(选择表达式)

Case国际sql通用支持的,使用case可移植更好。相当于在SQL中执行if语句 CASE
可用于允许使用有效表达式的任意语句或子句。 例如,可以在
SELECT、UPDATE、DELETE 和 SET 等语句以及 select_list、IN、WHERE、ORDER
BY 和 HAVING 等子句中使用 CASE。

select e.salary,
case e.type_id
   when 1 then e.salary*2 
   when 2 then e.salary*3
   when 3 then e.salary*4 
    eles e.salary*5
end 
as new_salary from employee e;

说明:当typeid为1时,薪水2,当typeid为2时,薪水3,当type_id为3时,薪水4,其他情况下薪水5;

#域完整性

  域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较
 域代表当前单元     格 域完整性约束:数据类型   非空约束(notnull)
 默认值约束(default)    check约束(mysql不支  
 持)check(sex=’男’orsex=’女’)

  *数据类型

     数值类型、日期类型、字符串类型

  *非空约束  not null  

      CREATE TABLE student( Id int pirmary key, Name varchar(50) not
null, Sex varchar(10));

      INSERT INTO  student values(1,’tom’,null);

  *默认值约束

      CREATE TABLE student(Id int pirmary key,Name varchar(50) not
null,Sex varchar(10) default       ‘男’);

       insert into student1 values(1,’tom’,’女’);

      insert into  student1 values(2,’jerry’,default);

ALTER Table TB_UNIQUE_CONSTRAINT
 ADD
  CONSTRAINT UN_PHONE UNIQUE (username, phone)

主键:    主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:    外键用于关联两个表。
复合键:   复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:    
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性:
  参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

2.数据的特点:正确,可靠,完整

关注微信公众号获取更多相关资源

图片 1

Android小先生

实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARY
KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。

7)grant all on *.* to ‘username’@’localhost’ identified by ‘passwd’;
      #  创建用户以及设置权限 all是赋予所有权限

DML数据管理语言【insert  update  select  delete】

数值处理函数

  • 1.round:保留指定的位数(按四舍五入)

    SELECT round(5.75), round(5.75, 1), round(15.75, -1) FROM dual;--1代表保留一位小数,-1表示个位也四舍五入
    
  • trunc:直接去掉小数点,没有四舍五入

    SELECT trunc(5.75), trunc(5.76, 1), trunc(15.75, -1) FROM dual;--1表示保留一位小数,直接去掉后面的,不四舍五入
    
  • mod:去余数

    select mod(1600,300) from dual;--返回结果为100
    
  • abs:去绝对值

    select t.quotedprice -100 from order_details t where t.ordernumber =354 and t.productnumber = 13;--返回
    
  • sign(x)返回x的符号

若x<0,返回-1;若x=0,返回0;若x>0,返回1

  • floor(x)返回小于或等于x的最大整数

    select floor(5.8),floor(-5.6) from dual;
    
  • ceil(x)返回大于或等于x的最小整数

    select ceil(5.8),ceil(-5.6) from dual;
    
  • power(x,y)返回x的y次幂

在上面的PRIMARY KEY约束定义中,WITH子句设置为PRIMARY
KEY约束所建立索引的页面填充度,ON子句指出存储索引的数据库文件组名称。将索引文件和表数据文件分寸到数据库中位于不同硬盘驱动器的数据文件中,有利于减轻单个硬盘的负载。

13)drop database <数据库名>;
                          #删除数据库

 

order by

  • 使用order by可以将记录进行排序
  • ASC:升序(默认的),DESC:降序排列
  • order by 只能放到所有select语句的最后

select name,sex,age from student order by age
asc:按照age进行降序排列
select name,sex,age,sal from student order by age asc,sal
desc:按照age降序排列,如果相等则在按照sal升序排列

用户定义完整性

16)update <表名> set name=’海上’,age=34 where id=5;  
            #修改id为5的name和age为’海上’、’34’

 

现实世界的实体进入数据库

  • 1.讲现实世界中的客观对象抽象为概念模型
  • 2.把概念模型转化为某一DBMS(数据库管理系统)支持的数据模型

有些刚刚开始接触SQL
Server编程的技术爱好者通常会有这样的疑问,为什么非要在一个表里面建立主键?其实答案是很明显的,建立主键不仅可以保证表内数据的完整性,而且在为表建立主键的同时,Microsoft
SQL Server能够通过为主键创建唯一索引强制数据的唯一性。

12)drop table <表名>;
                              #删除表

 

 

索引

使用索引大大加快查询的速度
对数据量大的,经常使用的表才去创建索引(需要维护的)
查询的时候与正常的一样

create index 索引名 on 表名(字段名。。。。);–创建索引delete index
索引名;–删除索引

24)alter table <表名> modify sex <字段类型> not
null;                
#修改字段sex不能为空,在修改前sex字段必须不能是空的

 

字符函数

  • lower:将字符串全部变为小写

    select name,sex from student where LOWFR(name) = 'blake'; 查询姓名为blake的相应属性,不管姓名是大小写还是大小写混写的都能查出
    
  • upper:将字符串全部变为大写

  • initcap:将字符串的第一个字母变为大写

  • concat:将两个字符串拼接起来

  • substr:截取字符串

    select substr('helloword',2,5) from dual;--从第二个开始数5个
    
  • length:返回字符串的长度

    select length(t.empfirstname) from employee t;
    
  • instr:在一个字符串中定位子字符串的位置(没有的话返回值为0)

    select instr('hellword','w')from dual;--查询w在hellword中的位置
    
  • 左补齐函数(lpad)

  • 右补齐函数(rpad)

    select e.empfirsname,rpad(e.empfistname,10,'&') from employees e;--设置长度为10,不够的用&补齐
    
  • replace:替换函数

    select replace('ABCDFG','D','www') from dual;--用www替换D
    
  • trim(leading|trailing|both y from x):从x中截去单个字符y

  • both:截去两边的;leading:从左边;traiing:从右边

    select trim(both 'h' from 'hooojdhh') from dual;--截去两边的h
    

3.

18)select * from <表名> order by id
asc/desc;                   #查询的表是id的升序(asc)/倒序(desc)

DDL数据定义语言【create  drop  alter  declare  】

锁:保证数据库的一致性(同步):自添加锁

T1执行 update students set name=’gfd’ where id=3;
如果T2想修改id=3的数据,必须等T1提交后才能修改(也就是说提交后自动释放锁)

如果希望使用编辑器来建立约束关系,需要在数据库关系图中,右击包含约束的表,然后从快捷菜单中选择“约束”命令。或者可以将包含约束的表打开表设计器,在表设计器中右击,然后选择“约束”命令。

2.RDBMS即关系数据库管理系统(Relational Database Management
System)的特点:

  1).数据以表格的形式出现
  2).每行为各种记录名称
  3).每列为记录名称所对应的数据域
  4).许多的行和列组成一张表单
  5).若干的表单组成database

范式一:保证数据库之中表每一列的原子性{如果 某一列 出生地的内容:湖南-长沙-芙蓉区 ,这种数据已然背离了  第一范式,此时应该设计多张表    }

子查询

  • 子查询在主查询的前一次执行
  • 主查询使用子查询的结果
  • 子查询要用括号括起来
  • 将子查询放在比较运算符的右边
  • 子查询中不要加ORDER BY子句

应用场景:例如那些雇员的工资比林志玲的高?

实体完整性

8)create database <数据库名>;    
              #创建数据库

范式一:保证数据库之中表每一列与主键直接相关 **{如果 某一行之中数据描述的是一个学生的实体包括   {id name sex age classid }  如果再多加一列 classname  这种数据已然背离了  第三范式,此时应该设计多张表 }**

外连接:不仅返回符合连接条件的记录,也返回指定表中的不符合连接条件的记录

图片 2

  • 左外连接:先对A表和B表做内连接,再把A表中没有匹配的结果集添加进去形成新的结果集(相应的右表的值(对应A表没有匹配的)为null)

    select * from newdept left outer join newemp on newdept.deptid = newemp.deptid;--outer可以省略 
    。。。。。。。where a.deptno = b.deptno(+);--左连接
    
  • 右外连接:
    先对A表和B表做内连接,再把B表中没有匹配的结果集添加进去形成新的结果集(相应的左表的值(对应B表没有匹配的)为null)也返回

    select * from newdept right outer join newemp on newdept.deptid = newemp.deptid
    。。。。。。。where a.deptno(+) = b.deptno;--右连接
    
  • 全外连接:在内连接的基础上,把左右两表中不符合连接条件的记录都返回

在emp中每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的mgr。我们需要将每一个员工自己的名字和经理的名字都找出来。

  select worker.ename,'work for',manager.ename from emp worker,emp managetr 
  where worker.mgr = manager.empnework for:连接字符串

用SQL语句列出EMP表中所有部门的详细信息以及对应的部门人数

select a.* , b.* from dept a,(select deptno,count(*) from emp group by deptno) b where a.deptno = b.deptno(+)
  • 全外连接

用SQL语句列出NEWEMP表和NEWDEPT表中所有部门和员工的详细信息:

select * from newdept full outer join newemp on newdept.deptid = newemp.deptid

在数据库的每个表中,经常有通过一列或者多个列,唯一的标识表中的每一行。就好像我们平时使用的身份证,能够唯一的标识每个人一样。这样的一列或者多个列,被称为主键,通过主键,可以强制表的实体完整性。

10)show create database <数据库名>;
                     #查看数据库的character

4.数据完整性保持手段:约束

 

 

多表联查

购买数量超过一个的产品名,顾客名以及购买的数量(3张表)
select * from products;
select * from customers;
select * from purchases;

  • 第一种方法

    select * from customers c inner join (select * from products p inner join purchases pr on p.product_id=pr.product_id) a on a.customer_id=c.customer_id where a.quantity>1;
    
  • 第二种方法

    select * from (products p inner join purchases pr on p.product_id=pr.product_id and pr.quantity>1) inner join customers c on c.customer_id=pr.customer_id;
    
  • 第三种方法

    select * from products p,purchases pr,customers c where p.product_id=pr.product_id and pr.customer_id=c.customer_id and pr.quantity>1;
    

例如,下面语句为TB_UNIQUE_CONSTRAINT表添加UNIQUE约束:

11)create database <数据库名> charset utf8;   
                #创建数据库并设置character为utf-8

6.T-SQL组成

经典例子

通常建立一列约束时,我们称之为列级PRIMARY
KEY约束,应用于多列时,称之为表级PRIMARY KEY约束。

mysql命令大全

5.7大约束

唯一约束【允许一个空】UNIQUE

主键约束【不允许空,最少性,稳定性】PRIMARY KEY

检查约束  CHECK

自定义约束 

默认约束  DEFAULT

非空约束  NOT NULL

外键约束 FOREIGN KEY

 

 

参照完整性约束

外键可以为空值;当外键不为空时,其取值只能等于参照的主键的某个值

在表达式中,可以输入搜索条件,条件中可以包括AND或者OR一类的连接词。列级CHECK约束只能参照被约束列,而表级CHECK约束则只能参照表中列,它不能参照其他表中列。

23)alter table <表名> drop sex;
                          #从student表删除sex字段

DCL数据控制语言【revoke  grant】

SQL语句

  • select语句

select 列名 form 表名select name from student
select * from student :查询所有的列
select name,sex from student

  • select name as myname from student:队列中使用别名

    • 查询结果显示的列用别名显示(as 用别名显示)
    • 之前是结果列名为name as后为myname
    • 不写as就要加引号或者空格:select name “myname” form student
  • 列使用算数表达式:

    • select name,sal,sal+100 from student: 查询sal和sal+100
  • 关于空值

    • 空值为不可用,不知道,不适用的值
    • 空值不等于0或者空格
    • 包含空值的算数表达式等于空
  • 连接操作符

    • 可将列或者字符与其他列连接起来,用双竖线标识(||)
    • 产生的结果是一个字符表达式
    • 使用连接操作符查询,返回结果是一个连接后的结果(每个结果的连接)
    • select name || sex as new from
      student:将name和sex的查询结果连接起来显示并设置查询结果对应的列名为new
  • 简单去掉重复的查询结果

    • 使用distinct关键字可以是某列中重复的值不显示
    • distinct操作会引起排序,通过排序去掉重复的记录
    • distinct必须放在第一列的前面,只能实现单列去重
    • select distinct sex from student
  • 条件查询

    • select 列名 from 表名 where 条件
    • where后面不能使用别名
  • 模糊查询

    • 使用like运算符进行通配查询
    • 查询条件可以包含文字字符或数字
    • %:表示0或多个字符
    • _:表示一个字符

    select name from student where name like ‘S%’
    :只显示以S开头的姓名
    select name from student where name like ‘_A%’
    :只显示第二个字符为A的名字
    select naem from student where name like ‘%A_B%’
    :只显示含有A_B的名字(\:转义字符)

选择”索引/键”选项卡。

冗余:   
存储两倍数据,冗余可以使系统速度更快。(表的规范化程度越高,表与表之间的关系就越多;查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度。例如,学生的信息存储在student表中,院系信息存储在department表中。通过student表中的dept_id字段与department表建立关联关系。如果要查询一个学生所在系的名称,必须从student表中查找学生所在院系的编号(dept_id),然后根据这个编号去department查找系的名称。如果经常需要进行这个操作时,连接查询会浪费很多的时间。因此可以在student表中增加一个冗余字段dept_name,该字段用来存储学生所在院系的名称。这样就不用每次都进行连接操作了。)

**范式一:保证数据库之中表每一列与主键有关{如果 某一行之中数据描述的是一个学生的实体包括   {id name sex age classid }  如果再多加一列 光照强度 这种数据已然背离了  第二范式,此时应该设计多张表    }**

两张表中的数据运算

图片 3

select kc.mc "种类",kc.s1-(select sum(s1) from ck where ck.mc = kc.mc ) "剩余量" from KC;

内容

3)show tables;            
                     #显示表

primary key(主键约束)

表级方式定义主键

create table student( 
    name varchar2(19),
    sex varchar2(10),
    age integer,
    constraint student_age_pk primary key(age)
    );

把age定义为主键(student_age_pk:约束的名字有一定的规范:表名主键名约束类型)

列级方式定义主键

create table student( 
   name varchar2(19) primary key,
   sex varchar2(10),
   age integer);

CHECK约束的主要作用是限制输入到一列或多列中的可能值,从而保证SQL
Server数据库中数据的域完整性。例如,可以在建立用户使用库时,强制用户的密码在10位以上。每个标允许建立多个CHECK约束。在CHECK约束中可以包含搜索条件,但不能包含子查询。

4)desc <表名>;          
                     #查看表结构 ,也可以用show
columns from <表名>;

语法的执行顺序

1.select 2.from 3.where 4.group by 5.组函数 6.having 7.order by

说明:having与where功能一样,就是执行的顺序不一样eg:select
e.division_id,avg(e.salary) from employees2 e group by e.division_id
where
avg(e.salary)>150000;–会报错的,因为where比组函数(avg)先执行,在执行where的时候,avg(e.salary)还没有算出来,所以会出错,换成having就没事了。

  • insert into(插入语句)
    插入时注意完整性约束条件(外键的取值)
    插入的时候插入到首行

    insert into 表名(插入的字段)values(字段对应的值)
    insert into student values(3,'name','sex',12); 
    insert into student(id,name) values(4,'name'); 
    insert into student values(5,'''name','sex',12);
    

插入的名字为’name insert into student(name,sex) values(&Name,’nan’);
&:变量,在执行该语句时,会让你输入name要插入的值(Name变量名自己起的)
一次插入多条语句,要查入得值从另一个表中取数据 insert into
student(name,sex,age) select name,sex,age from student2 where
id>10;

  • delete(删除语句) : delect from 表名 条件

    delect from student where id=3
    
  • update(修改语句) : update 表名 set 字段名=要修改的值 条件

    update student set name=gfdd where id=2;
    update studnet set name=gggg,sex=nv where id=3;
    
1. 每列只能有一个默认约束。
2. 约束表达式不能参照表中的其他列和其他表、视图或存储过程。

19)select name ,count(*) as stu_num from <表名> group by name; 
          #选择name属性并统计整个表格(count(*))
按name进行分组统计数量一列命名为stu_num

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图