2019-06-25 13:04:38 weixin_44596822 阅读数 609
  • C# For Unity系列之进阶篇

    整体介绍:       本进阶篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本进阶篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级/进阶篇”讲解特点与内容:          本“中级”与“进阶”篇, 是面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法重点与难点。 中级篇内容主要讲解: .Net 框架、里氏替换原则(LSP)、类的属性极其本质特性、IS ,AS 关键字、字符串的“驻留性” 原理、深入解析Equals() 原理、枚举类型、自定义集合、深入解析动态集合特性与内部原理、泛型集合、泛型约束、初级委托与事件讲解等。         "进阶篇"是在中级篇的基础之上,进一步研究与讲解关于IO操作、序列化、正则表达式、系统委托(Action、Function、Predicate等)、反射原理与特性、Linq查询表达式、多线程、线程池、任务、Socket套接字编程(Tcp与UDP协议),以及最后使用Unity开发具备实战价值的通讯聊天程序等。   C#“进阶篇”教学详细说明如下: 1: IO操作与序列化       学习文件、目录、二进制文件、文本文件的读取与写入底层原理。学习文件序列化与反序列化技能。 2: 正则表达式       学习正则表达式的强大作用与常用原字符的含义与应用场景。 3: 深入委托与事件       学习Action、Func、Predicate 系统内置委托类型,已经适用场合。学习匿名方法、Lambda表达式。深入解析委托与事件的区别。 4: 反射与特性       学习反射的概念与动态调用的重要应用价值,以及Type、Assembley核心类等,最后讲解“特性”技术。   5: Linq 查询表达式      学习Linq 查询表达式对于“对象集合”(支持IEnumberable 或IEnumberable<T>) 以及SQL数据库、XML文档方面的强大查询功能。       6: 多线程      学习多线程以及线程传参、线程取得返回数值技术,前台与后台线程、线程的同步、线程池、任务等技术。      7: Socket套接字通讯      学习Socket套接字通讯中,Tcp与UPD通讯协议的不同应用场景,以及各自的演示示例,最后用Unity开发一款实用性的聊天通讯工具。 温习提示:             本C# for Unity 使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习没有任何影响)。      一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1692 人正在学习 去看看 刘国柱

a## 一、 什么是SQL
SQL(structured query language),中文意思是结构化查询语言,它是一种对关系型数据库中的数据进行定义和操作的语言方法,是大多数关系型数据库管理系统所支持的语言。

二、SQL的分类

SQL结构化查询语言分为6个部分。

  • 2.1. 数据查询语言(DQL);

    DQL全称(data query language),即“数据检索语句”,用来从表中获得数据,确定数据怎样在应用程序中显示。保留字SELECT是DQL中用的最多的动词。DQL常用的保留字有WHERE(查询条件)、ORDER BY(排序)、GROUP BY和HAVING。这些保留字常与其他类型的SQL语言一起使用。例如:
    select user,host from mysql.user oder by user;
    oder by user desc 按照字母倒序排列
    oder by user asc 按照字母顺序排列

  • 2.2数据库操作语言(DML)
    DML全称(data manipulation language),其语句包括动词INSERT,UPDATE和DELETE。他们分别用于添加,修改和删除表中的行数据。也称为动作查询语句。具体例句:
    delete from mysql.user where user=‘root’;

  • 2.3事务处理语言(TPL)
    它的语句能确保被DML语句影响的标的所有行及时的已更新。TPL语句包括DEGIN TRANSACTION,COMMIT和ROLLBACK。

  • 2.4数据控制语言(DCL)

    DCL全称(data control language),他的语句通过GRANT(授权)或REVOKE(收回授权)获得许可,确定单个用户和用户组对数据对象的访问。

  • 2.5数据定义语言(DDL)

    DDL全称(data definition language),其语句包含动词CREATE和DROP。在数据库中创建表或者删除表(create table 或drop table)
    2.6指针控制语言(CCL)
    CCL全称(CURSOR control language),它的语句,例如DECLARE CURSOR,FEICH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

三、mysql数据库常见管理

  • 3.1创建数据库的方法
    命令语法:create database<数据库名称>,数据库名不能数字开头。
    例如:创建一个名为data_default的数据库

     create database data_default ;# 创建
     show databases like 'data%';  # 查看
      show create database data_default\G  #查看建库语句,默认字符集为拉丁
      cerate database  data_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci  #建立一个名为data_gbk的GBK字符集数据库,即简体中文
      cerate database  data_utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci  #建立一个名为data_utf8的utf-8字符集数据库
    
  • 3.2显示数据库的方法
    命令:show databases;

     show databases;               #显示库
     show databases like 'roo%';  #显示某一个库
     select  database();   #显示当前链接的数据库
     select version(); #查看数据库版本
     select user();  #查看当前用户
     select now(): #查看当前的时间
     show grants for root@'localhost';#查看root用户权限
     use root; #进入root数据库
    
  • 3.3删除数据库
    命令:drop database<数据库名>
    可看帮助:help drop database
    例如,删除名为root的数据库

         drop database root;  #删除root数据库
    
  • 3.4创建表
    语法:create table <表名>(
    <字段名 1><类型 1>,

    <字段名n><类型n>,
    );
    其中create table 是关键字,不能更改,不区分大小写。
    例子:
    1.人工写法设计的建表语句,表名为student。默认字符集是拉丁字符集,与库的默认字符集一样

     create table student(    #表名为student
     id int(4) not null,    #学号列,类型为整型,不允许为空
     name char(20) not null, #名字列,类型为字符型,不允许为空
     age tinyint(2)  NOT NULL default '0',#年龄列,类型为整型,默认是0
     dept varchar(16)  default NULL #系别列,变长字符型,长度为16,默认为空
     ); 
    
  • 3.5查看建立的表结构

    两种方法:
    desc <表名>;
    show columns from <表名>;
    例如:

     desc student;
     show columns from student;
    
  • 3.6查看已建表的语句

     show create table student \G #G表示以垂直的方式显示
    
  • 3.7查看当前数据库包含的表信息

    切到数据库里面查看

     show tables;
     show tables like 'user';
     show tables from data_gbk;  #查看指定库中的表
     show tables in data_gbk;查看指定库中的表
    
  • 3.8为表的字段创建索引
    索引就像书的目录一样,如果在字段上建立了索引,那么以索引列为查询条件可以加快查询数据的速度。
    创建主键索引
    查询数据库,按主键查询最快,每个表只能有一个主键列,但是可以有多个普通索引列。主键列要求列的所有内容必须唯一,而普通索引列不要求内容必须唯一。
    创建主键索引的方法:
    1.在建表时,可以增加建立主键索引的语句如下

     create table student(    #表名为student
     id int(4) not null  AUTO_INCREMENT,    #学号列,类型为整型,不允许为空,AUTO_INCREMENT,表示自增。
     name char(20) not null, #名字列,类型为字符型,不允许为空
     age tinyint(2)  NOT NULL default '0',#年龄列,类型为整型,默认是0
     dept varchar(16)  default NULL, #系别列,变长字符型,长度为16,默认为空
     primary key(id), #id为主键
     KEY index_name(name)#name 字段普通索引
     ); 
    

    2.建表后通过alter命令增加主键索引
    主键列不能重复创建,必须删除已经创建的主键。

     alter table student drop primary key;#删除主键
    

    利用alter命令修改id列为自增主键列

     alter table student change id id int primary key auto_increment;
    

    创建普通索引
    1.在建表时,可以增加建立普通索引的语句如下

      create table student(    #表名为student
     id int(4) not null  AUTO_INCREMENT,    #学号列,类型为整型,不允许为空,AUTO_INCREMENT,表示自增。
     name char(20) not null, #名字列,类型为字符型,不允许为空
     age tinyint(2)  NOT NULL default '0',#年龄列,类型为整型,默认是0
     dept varchar(16)  default NULL, #系别列,变长字符型,长度为16,默认为空
     primary key(id), #id为主键
     KEY index_name(name)#name 字段普通索引
     ); 
    

    2.建表后利用alter增加普通索引
    删除创建表时创建的index_name索引,

     alter table student drop index index_name;
    

    在name列上添加索引,索引名为index_name

     alter table student add index index_name(name);
    

    3.指定前n个字符创建索引
    当遇到表中比较大的列时,列内容的前n个字符在所有内容中已经接近唯一时,这时可以对列的前n个字符建立索引,而无需对整个列建立索引,这样可以节省创建索引占用的系统空间。
    对字段的前n个字符创建普通索引的语法:

     create index index_dept on student(dept(8));
      # create index表示创建索引,index_dept索引名称 ,student代表表名称哪个表上,dept(8)表示在哪个列上
    
     show index from student\G  #查看索引
    

    为多列的前n个字符创建联合索引,联合索引有前缀生效特性。

     create index ind_name_dept on student(name(8),dept(10));
    create index index_name on student(name); #在student表中的那么字段中创建名为 index_name的普通索引。
    

    创建唯一非主键索引

     create unique index index_age on student(age);
    

    创建索引注意事项:
    索引虽然可以加快查询速度,但是如果给所有列创建索反而速度变慢。因为索引不但占用系统空间而且更新数据库时还需要维护索引数据。
    例如在select user,host from mysql.user where host=…,中索引一定要创建在where这个条件列。且尽量选择在唯一多的大表上建立索引。

  • 3.9 DML语句insert命令介绍

    往表中插入数据
    命令语法:
    insert into<表名>[(<字段名1>…<字段名n>)] values [(值1)…(值n)]
    例如:
    创建一个表名为test的表,然后往表中插入数据。
    创建test表:

    create table student(    #表名为student
     id int(4) not null  AUTO_INCREMENT,    
     name char(20) not null, 
     age tinyint(2)  NOT NULL default '0',
     primary key(id), #id为主键
     KEY index_name(name)#name 字段普通索引
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
    

    向表里插入数据方法:
    1.指定所有列名(字段),并且每列都插入值

      insert into test(id,name) values(1,'missli');
      select * from test;  #查看
    

    2.由于id列为自增,所以可以只在name列插入值(id,name 都是字段)

      insert into test(name) values('missli');
      select * from test;  #查看
    

    3.如果不指定列,就要按照顺序为每列都插入恰当的值。

      insert into test values(3,'lily');
    

    4.批量插入数据方法

      insert into test values(3,'lily'),(4,‘kkg’),(5,'hhh');
    

    删除表里插入的数据的方法
    方法一:用delete
    delete from student where name=miss and id=2 ;

    delete from student where id=2;
    

    方法二:用turncate命令
    语法:turncate table 表名;

       turncate table student;#清空表中所有内容。
    

    区别:delete是一行一行删,逻辑删除,可以恢复
    turncate 物理删除,删除速度块,不可恢复。

  • 3.10增删表的字段方法
    增加表列的命令语法:
    alter table 表名 add 字段 类型 其他;
    例如:

    alter table test add sex char(2) ;#在test表中添加sex字段,类型为char(2)
    alter table test add age int(4) after name;#指定添加年龄列到name列后面的位置
    alter table test add qq varchar(15) first;#在第一列添加qq字段
    alter table test modify age char(4) after name;   #修改字段类型
    alter table test change age hisage char(4) after name; #修改字段名称
    
  • 3.11更改表名方法

    用rename命令:
    语法:
    rename table 原表名 to 新表名;
    例如:

     show tables;
     rename table test to test1;#将表名test改为test1
    

    用alter命令:
    语法:
    alter table 原表名 rename to 新表名;
    例如:

      alter table test1 rename to test;
    
  • 3.12 删除表的方法
    使用drop命令
    语法:
    drop table <表名>;
    例如:

     drop table test;删除test表
    
  • 3.13 DML语句中UPDATE命令

    如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。
    以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法。
    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause]
    它可以同时更新一个或多个字段,在 WHERE 子句中指定任何条件。
    你可以在一个单独表中同时更新数据。当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。
    例子:
    更新数据表中 runoob_id 为 3 的 runoob_title 字段值:

    UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
    SELECT * from runoob_tbl WHERE runoob_id=3; #查看
    
  • 3.14查询数据DQL中select命令

    select命令语法:
    select<字段1,字段2,…>from<表名>where <表达式>。
    其中select,from,where不能随便改,大小写一样。
    例如:
    进入指定库中查询

    use  data_default;进入data_default库
    select * from student;   #*表示所有字段
    select id,name from student; #指定id和name字段
    select id,name from student where name='missli';   #用where指定条件
    select id,name from student where name='missli' and id=2;# and前后条件都要满足。
    select id,name from student where id>1 and id<5;#id 大于1小于5
    select id,name from student order by id desc;   #按照id降序排列
    select id,name from student order by id asc;  #按照id升序排列
    

    多表连表查询:

    语法:
    select 表1.内容,表2.内容 , 表3.内容 , …from 表1,表2,b3, … where 条件

  • 3.15删除MySQL系统多余的账号

    语法:drop user “user”@“主机域” 可是双引号或者单引号。
    例如:

     drop user 'root'@'data';
     drop user ' '@'data';
     drop user ' '@'localhost';  #没有的部分用两个单引号替代
    

    如果是大写或者特殊字符用drop删除不了,可以用以下方式删除

      delete from mysql.user where user='root' and host='localhost';
      flush privileges;
    
  • 3.16创建MySQL用户及赋予用户权限
    通过grant命令授权。

    help grant
    CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';#创建用户
    GRANT ALL ON db1.* TO 'jeffrey'@'localhost';  #授权jeffrey这个本地主机用户对db1库下的所有表有全部权限。
    GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';  #授权jeffrey这个本地用户对db2库下的invoice这个表有查找(select)的权限
    GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
    

    由上面的例子可以看到,创建用户并授权有两种方法:
    第一种:
    先用cerate命令创建用户再用grant授权。
    创建用户:
    命令:CREATE USER ‘username’@‘localhost’ IDENTIFIED BY ‘password’;

    说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%。password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.
    例如:

     CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
     CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; #远程主机
     CREATE USER 'pig'@'%' IDENTIFIED BY ''; 
    

    授权:
    命令:GRANT privileges ON databasename.tablename TO ‘username’@‘host’

    说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等.如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示
    例如:

     GRANT ALL ON db1.* TO 'jeffrey'@'localhost'; #授权jeffrey这个本地用户对db1库下的所有表有全部权限。
     GRANT ALL ON *.* TO 'pig'@'%';    #远程主机用户pig对所有数据库和表有所有权限,但是不能给其他用户授权
     GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;   #这个命令授权的用户可以给其他用户授权
    

    第二种
    使用grant命令在创建用户的同时授权,常用。

      GRANT ALL ON db1.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'password';
    

    上面的命令相当于下面两条命令:

      CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
       GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
    

    授权局域网内的主机链接数据库
    根据grant语法,‘jeffrey’@‘localhost’ 位置为授权访问数据库的主机。localhost可以用域名,ip或者段来代替。授权局域网内的主机可以通过如下方法实现:
    a.百分号匹配法

    GRANT ALL ON *.* TO 'jeffrey'@'192.168.0.%' IDENTIFIED BY 'password';   #授权局域网内192.168.0.0这个网段主机有所有权限
    grant select,insert,update,delete,create,drop on blog.* to 'jeffrey'@'192.168.0.%'  identified by 'password' #博客数据库的权限设置
    

    b.子网掩码匹配法

    GRANT ALL ON *.* TO 'jeffrey'@'192.168.0.0/255.255.255.0' IDENTIFIED BY 'password';   #授权局域网内192.168.0.0这个网段主机有所有权限
    

    要远程连接数据库192.168.0.1的方法为
    linux上远程连接方法:

    mysql -u jeffrey -p'password' -h 192.168.0.1
    

    PHP服务器远程连接mysql的方法:

     <?php
              //$link_id=mysql_connect('主机名','用户','密码');  #语法
               $link_id=mysql_connect('192.168.0.1','jeffrey','password') or mysql_error();
     if ($link_id) {
           echo 'mysql successful by jeffry !';
    } else{
           echo mysql_error();
    }
    ?>
    

    撤销用户权限
    命令: REVOKE privilege ON databasename.tablename FROM ‘username’@‘host’;
    说明: privilege, databasename, tablename - 同授权部分。
    例如:

       REVOKE SELECT ON *.* FROM 'Jeffrey'@'%'; 
    

    注意: 假如你在给用户’Jeffrey’@’%‘授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO ‘pig’@’%’, 则在使用REVOKE SELECT ON . FROM ‘Jeffrey’@’%’;命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON . TO ‘Jeffrey’@’%’;则REVOKE SELECT ON test.user FROM ‘Jeffrey
    ‘@’%’;命令也不能撤销该用户对test数据库中user表的Select 权限.

    设置与更改用户密码
    命令:SET PASSWORD FOR ‘username’@‘host’ = PASSWORD(‘newpassword’);如果是当前登陆用户用SET PASSWORD = PASSWORD(“newpassword”);
    例如:

    SET PASSWORD FOR 'Jeffrey'@'%' = PASSWORD("123456");
    

附表:
在MySQL中的操作权限

命令 权限说明
ALTER ROUTINE Alters or drops stored routines.
ALTER Allows use of ALTER TABLE.
CREATE Allows use of CREATE TABLE.
CREATE ROUTINE Creates stored routines.
CREATE TEMPORARY TABLE Allows use of CREATE TEMPORARY TABLE.
CREATE USER Allows use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES.
CREATE VIEW Allows use of CREATE VIEW.
DELETE Allows use of DELETE.
DROP Allows use of DROP TABLE.
EXECUTE Allows the user to run stored routines.
FILE Allows use of SELECT… INTO OUTFILE and LOAD DATA INFILE.
INDEX Allows use of CREATE INDEX and DROP INDEX.
INSERT Allows use of INSERT.
LOCK TABLES Allows use of LOCK TABLES on tables for which the user also has SELECT privileges.
PROCESS Allows use of SHOW FULL PROCESSLIST.
RELOAD Allows use of FLUSH.
REPLICATION Allows the user to ask where slave or master
CLIENT servers are.
REPLICATION SLAVE Needed for replication slaves.
SELECT Allows use of SELECT.
SHOW DATABASES Allows use of SHOW DATABASES.
SHOW VIEW Allows use of SHOW CREATE VIEW.
SHUTDOWN Allows use of mysqladmin shutdown.
SUPER Allows use of CHANGE MASTER, KILL, PURGE MASTER LOGS, and SET GLOBAL SQL statements. Allows mysqladmin debug command. Allows one extra connection to be made if maximum connections are reached.
UPDATE Allows use of UPDATE.
USAGE Allows connection without any specific privileges.
  • 3.17指定字符集建库
    在未指定字符集的情况下直接建库,则使用默认的拉丁字符集。例如:

    create  database data;
    show create  database data\G;
    Create database: CREATE DATABASE 'data'/*!40100 DEFAULT CHARACTER SET latinl */  #这里是拉丁字符集。
    

    指定字符集建库方法:

     cerate database  data_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci  #建立一个名为data_gbk的GBK字符集数据库,即简体中文
      cerate database  data_utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci  #建立一个名为data_utf8的utf-8字符集数据库
    
2006-11-28 20:59:00 qjyong 阅读数 2056
  • C# For Unity系列之进阶篇

    整体介绍:       本进阶篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本进阶篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级/进阶篇”讲解特点与内容:          本“中级”与“进阶”篇, 是面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法重点与难点。 中级篇内容主要讲解: .Net 框架、里氏替换原则(LSP)、类的属性极其本质特性、IS ,AS 关键字、字符串的“驻留性” 原理、深入解析Equals() 原理、枚举类型、自定义集合、深入解析动态集合特性与内部原理、泛型集合、泛型约束、初级委托与事件讲解等。         "进阶篇"是在中级篇的基础之上,进一步研究与讲解关于IO操作、序列化、正则表达式、系统委托(Action、Function、Predicate等)、反射原理与特性、Linq查询表达式、多线程、线程池、任务、Socket套接字编程(Tcp与UDP协议),以及最后使用Unity开发具备实战价值的通讯聊天程序等。   C#“进阶篇”教学详细说明如下: 1: IO操作与序列化       学习文件、目录、二进制文件、文本文件的读取与写入底层原理。学习文件序列化与反序列化技能。 2: 正则表达式       学习正则表达式的强大作用与常用原字符的含义与应用场景。 3: 深入委托与事件       学习Action、Func、Predicate 系统内置委托类型,已经适用场合。学习匿名方法、Lambda表达式。深入解析委托与事件的区别。 4: 反射与特性       学习反射的概念与动态调用的重要应用价值,以及Type、Assembley核心类等,最后讲解“特性”技术。   5: Linq 查询表达式      学习Linq 查询表达式对于“对象集合”(支持IEnumberable 或IEnumberable<T>) 以及SQL数据库、XML文档方面的强大查询功能。       6: 多线程      学习多线程以及线程传参、线程取得返回数值技术,前台与后台线程、线程的同步、线程池、任务等技术。      7: Socket套接字通讯      学习Socket套接字通讯中,Tcp与UPD通讯协议的不同应用场景,以及各自的演示示例,最后用Unity开发一款实用性的聊天通讯工具。 温习提示:             本C# for Unity 使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习没有任何影响)。      一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1692 人正在学习 去看看 刘国柱
SQL语言查询基础:连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table

[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:
内连接(INNER JOIN):使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

外连接:分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN):没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

 (一)内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

 又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a.*,p.pub_id,p.pub_name,p.country

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

 (二)外连接

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个连接表(全外连接)中的所有数据行。

如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

ON a.username=b.username

 下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*

FROM city as a FULL OUTER JOIN user as b

ON a.username=b.username

 (三)交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等

于6*8=48行。

SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type


SQL语言查询基础:联合查询

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)  

2013-03-14 14:33:57 ziyuanxiazai123 阅读数 3116
  • C# For Unity系列之进阶篇

    整体介绍:       本进阶篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本进阶篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级/进阶篇”讲解特点与内容:          本“中级”与“进阶”篇, 是面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法重点与难点。 中级篇内容主要讲解: .Net 框架、里氏替换原则(LSP)、类的属性极其本质特性、IS ,AS 关键字、字符串的“驻留性” 原理、深入解析Equals() 原理、枚举类型、自定义集合、深入解析动态集合特性与内部原理、泛型集合、泛型约束、初级委托与事件讲解等。         "进阶篇"是在中级篇的基础之上,进一步研究与讲解关于IO操作、序列化、正则表达式、系统委托(Action、Function、Predicate等)、反射原理与特性、Linq查询表达式、多线程、线程池、任务、Socket套接字编程(Tcp与UDP协议),以及最后使用Unity开发具备实战价值的通讯聊天程序等。   C#“进阶篇”教学详细说明如下: 1: IO操作与序列化       学习文件、目录、二进制文件、文本文件的读取与写入底层原理。学习文件序列化与反序列化技能。 2: 正则表达式       学习正则表达式的强大作用与常用原字符的含义与应用场景。 3: 深入委托与事件       学习Action、Func、Predicate 系统内置委托类型,已经适用场合。学习匿名方法、Lambda表达式。深入解析委托与事件的区别。 4: 反射与特性       学习反射的概念与动态调用的重要应用价值,以及Type、Assembley核心类等,最后讲解“特性”技术。   5: Linq 查询表达式      学习Linq 查询表达式对于“对象集合”(支持IEnumberable 或IEnumberable<T>) 以及SQL数据库、XML文档方面的强大查询功能。       6: 多线程      学习多线程以及线程传参、线程取得返回数值技术,前台与后台线程、线程的同步、线程池、任务等技术。      7: Socket套接字通讯      学习Socket套接字通讯中,Tcp与UPD通讯协议的不同应用场景,以及各自的演示示例,最后用Unity开发一款实用性的聊天通讯工具。 温习提示:             本C# for Unity 使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习没有任何影响)。      一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1692 人正在学习 去看看 刘国柱

数据库应用程序开发入门篇—— 结构化查询语言SQL及常用操作

1.什么是SQL

构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
    结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。

2.SQL包括哪些部分

结构化查询语言包含6个部分(各个SQL语言支持的操作并不完全相同)

一:数据查询语言(DQL):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAⅥNG。这些DQL保留字常与其他类型的SQL语句一起使用。
二:数据操作语言(DML):其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三:事务处理语言(TPL):它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:数据控制语言(DCL):它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
五:数据定义语言(DDL):其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
六:指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

3.SQL常用操作示例

SQL语句完成数据库操作的核心功能,可以由数据定义、数据查询、数据操纵、数据控制四类语句实现。

关于SQL的学习可以参考网站:http://www.w3school.com.cn/sql/     SQL 教程。该教程已经透彻的讲解了SQl的基础运用。
这里为了以后复习方便列出了常用操作和特殊操作如下图表1、表2所示:

表1:常用操作



表2:常用操作符或者子句

SQL操作有很多,需要通过实际操作加深理解,才能灵活运用。
更多关于SQL的操作请详见SQL操作实例篇。

2019-10-08 18:00:01 Ace_2 阅读数 307
  • C# For Unity系列之进阶篇

    整体介绍:       本进阶篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本进阶篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级/进阶篇”讲解特点与内容:          本“中级”与“进阶”篇, 是面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法重点与难点。 中级篇内容主要讲解: .Net 框架、里氏替换原则(LSP)、类的属性极其本质特性、IS ,AS 关键字、字符串的“驻留性” 原理、深入解析Equals() 原理、枚举类型、自定义集合、深入解析动态集合特性与内部原理、泛型集合、泛型约束、初级委托与事件讲解等。         "进阶篇"是在中级篇的基础之上,进一步研究与讲解关于IO操作、序列化、正则表达式、系统委托(Action、Function、Predicate等)、反射原理与特性、Linq查询表达式、多线程、线程池、任务、Socket套接字编程(Tcp与UDP协议),以及最后使用Unity开发具备实战价值的通讯聊天程序等。   C#“进阶篇”教学详细说明如下: 1: IO操作与序列化       学习文件、目录、二进制文件、文本文件的读取与写入底层原理。学习文件序列化与反序列化技能。 2: 正则表达式       学习正则表达式的强大作用与常用原字符的含义与应用场景。 3: 深入委托与事件       学习Action、Func、Predicate 系统内置委托类型,已经适用场合。学习匿名方法、Lambda表达式。深入解析委托与事件的区别。 4: 反射与特性       学习反射的概念与动态调用的重要应用价值,以及Type、Assembley核心类等,最后讲解“特性”技术。   5: Linq 查询表达式      学习Linq 查询表达式对于“对象集合”(支持IEnumberable 或IEnumberable<T>) 以及SQL数据库、XML文档方面的强大查询功能。       6: 多线程      学习多线程以及线程传参、线程取得返回数值技术,前台与后台线程、线程的同步、线程池、任务等技术。      7: Socket套接字通讯      学习Socket套接字通讯中,Tcp与UPD通讯协议的不同应用场景,以及各自的演示示例,最后用Unity开发一款实用性的聊天通讯工具。 温习提示:             本C# for Unity 使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习没有任何影响)。      一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1692 人正在学习 去看看 刘国柱

目录

1.SQL语言简介

特点:

分类:

编写规则

2.用户模式

模式与模式对象

示例模式scott

3.检索数据

简单查询

筛选查询

分组查询

排序查询

多表关联查询

4.Oracle常用系统函数

字符类函数

数字类函数

日期和时间类函数

转换类函数

聚合类函数

5.子查询的用法

什么是子查询

单行子查询

多行子查询

关联子查询

6.操作数据库

插入数据(INSERT语句)

更新数据(UPDATE语句)

删除数据(DELETE语句和TRUNCATE语句)


1.SQL语言简介

SQL语句通常用于完成一些数据库的操作任务,具有增加、删除、修改、数据定义与控制等完整的数据库操作功能。

特点:

1.集合性。在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL语句接收集合作为输入,返回集合作为输出。

2.统一性。SQL为许多任务提供了统一的命令,方便学习和使用。数据库的操作任务通常包括以下几方面:

查询数据;

在表中插入、修改和删除记录;

建立、修改和删除数据对象;

控制对数据和数据对象的读写;

保证数据库一致性和完整性。

3.高度非过程化。SQL是一个非过程化的语言,没有循环结构和函数定义等功能,只提“做什么”,不管“怎么做”。

4.语言简单,易学易用。整个SQL语句只用9个命令动词即可实现对数据库及数据的查询和管理。如下表:

SQL的功能 命令动词
数据定义 CREATE,DROP,ALTER
数据操纵 SELECT,INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE

5.以同一种语法结构提供两种使用方式。第一种是交互式应答使用,即用户在终端命令提示符下输入SQL命令时数据库服务器可以立即执行;第二种是通过预编译SQL进行执行,即把SQL命令嵌入到应用程序中执行。

6.是所有关系数据库的公共语言。所有主要的关系数据库管理系统都支持,所以是可移植的。

分类:

1.数据查询语言(DQL)

用于检索数据库中的数据,主要是select

2.数据操纵语言(DML)

用于改变数据库中的数据,主要是insert,update,delete

3.事务控制语言(TCL)

用于维护数据的一致性,主要是commit,rollback,savepoint(设置保存点)

4.数据定义语言(DDL)

用于建立、修改和删除数据库对象。主要是CREATE,DROP,ALTER。例如ALTER TABLE 修改表结构。

5.数据控制语言(DCL)

用于执行权限授予和权限收回操作。GRANT用于给用户或角色授予权限,REVOKE用于收回用户或角色所具有的权限。

编写规则

SQL关键字不区分大小写;

对象名和列名不区分大小写;

字符值区分大小写;

SQL语句较长和分行显示,输入完毕要以分号作为结束符。

2.用户模式

某个用户所创建的数据库对象(数据表,索引,视图等)都属于该用户模式,便于管理。

模式与模式对象

模式是一个数据库对象的集合。模式为一个数据库用户所有,并且名称相同。

模式对象是由用户创建的逻辑结构,用以存储或引用数据,如表,索引,约束,视图,同义词,过程,程序包等。

模式拥有模式对象。

示例模式scott

该模式是Oracle提供的一个典型的示例模式,演示了一个很简单的公司人力资源管理的数据结构。

先查看scott用户是否存在:

alter user scott account unlock;

当scott用户不存在,

我们就需要在$ORACLE_HOME目录下寻找scott.sql文件,找到之后在命令行中执行文件:@ + 找到的文件位置

如果scott.sql文件都不存在(如上图),还可以执行urlsampl.sql文件创建scott用户,这个文件也位于$ORACLE_HOME/rdbms/admin文件夹下(执行之后会自动断开oracle的连接):

然后就可以了。

用默认密码"tiger"登录scott用户。

或者:

查看scott用户拥有的数据表:

3.检索数据

检索数据我之前已经进行过整理,在这就简单总结一下,查漏补缺。

这是以前写的:数据库常用sql语句总结

主要有7个子句:

group by 子句用于对检索结果进行分组显示

having子句用于从使用group by子句分组后的查询结果中筛选数据行。

简单查询

1.检索所有的列,select * from 表名

2.检索指定的列,select col_name1,col_name2

3.带有表达式的select子句,select sal*(1+0.1)

4.为列指定别名,select empno as "员工编号",可去掉as

5.显示不重复记录,select distinct job from emp

6.处理null值,select ename,sal,comm,sal+nvl(comm,0) from emp

如果comm列存在数值,返回其原有数值,若为null,返回0

7.连接字符串,||或concat,select ename||'的工作是'||job from emp;

筛选查询

1.比较查询,=,!或<>,>,<,>=,<=

特殊:

A运算符ANY(B),A与B中任何一个元素进行比较,只要有一个比较值为true,返回数据行

A运算符ALL(B),A与B中所有元素进行比较,只有与所有元素的比较值为true,才返回数据行

2.使用特殊关键字筛选

LIKE:字符串模糊查询。通配符:%:代表0个或多个字符;_:只能代表一个字符。

IN:测试一个数据值是否匹配一组目标值中的一个。IN(目标值1,目标值2,...)。NOT IN表示不在某一组目标值中。

BETWEEN:某一数据值是否位于两个给定的值之间。BETWEEN...AND...    ,NOT BETWEEN...AND...

IS NULL,不用=号判断null

3.逻辑筛选

AND  OR  NOT 

分组查询

GROUP BY

1.单列分组

group by 经常和聚集函数一起使用,可以实现对查询结果中每一组数据进行分类统计。

常用统计函数:AVG ,COUNT ,MAX ,MIN ,SUM

例如:在emp表中,对工资记录进行分组,并计算平均工资等。

select job,avg(sal),sum(sal),max(sal),count(job)
from emp
group by job;

2.多列分组

select deptno,job,avg(sal),sum(sal),max(sal)
from emp
group by deptno,job;

3.使用order by子句改变分组排序结果

4.使用having子句限制分组结果

类似于where,但是having可以包含聚合函数

select job,avg(sal),sum(sal),max(sal),count(job)
from emp
group by job
having avg(sal)>2000;

5.使用ROLLUP和CUBE操作符

group by只能生成简单的数据统计结果,这两个操作符可以生成横向小计,纵向小计和总计等

直接看例子:

ROLLUP:

CUBE:

GROUPING函数,查看是否使用了特定列(用到了多个列或没有用到任何列):

复合列:引用复合列时需要用括号括住相关列。使用复合列可以略过ROLLUP和CUBE操作符的某些统计结果。

---------------------

GROUPING SETS 操作符:为了显示多个分组的统计结果,就用该操作符合并分组结果:

排序查询

ORDER BY 

ASC 升序  ;DESC  降序

ORDER BY 语句和GROUP BY 语句都位于FROM语句之后,如果使用了GROUP BY 子句,则该子句一定是SQL语句的最后一个子句。

1.单列排序,不多说

2.多列排序

当以多列进行排序时,首先按照第一列进行排序,当第一列存在相同数据时,再以第二列进行排序,以此类推。

在此查询语句中,首先按照部门号排序,在同一个部门中,按照工地从高到低排序。

多表关联查询

1.表的别名

多表关联时如果存在同名的列,需要用表名来限定列的引用,而为了避免语句冗长,就可以设定简短的表别名。

FROM子句最先执行,然后才是WHERE子句和SELECT子句,所以在FROM子句中指定表的别名后,其他所有子句都能使用。

别名一经定义,在整个查询语句中就只能使用别名不能使用表名,只在所定义的查询语句中有效。

2.内连接

返回的查询结果中只包含符合查询条件和连接条件的行。消除了与另一个表中的任何行不匹配的行。

FROM table_name1 [INNER] JOIN table_name2 

ON join_condition; 

3.外连接

除了返回所有匹配的行,还会返回一部分或全部不匹配的行,主要取决于外连接的种类。

左外连接  LEFT JOIN

右外连接  RIGHT JOIN

完全外连接  FULL JOIN 

外连接不只列出与连接条件匹配的行,还能够列出左表(左外连接时)、右表(右外连接时)或两个表(完全外连接时)中所有符合搜索条件的数据行。

当使用“(+)”操作符执行外连接时,应该讲该操作符放在显示较少行(完全满足连接条件)的一端。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e right join dept d
on e.deptno=d.deptno;

还可以这么写:

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e , dept d
where e.deptno(+)=d.deptno;

如果WHERE子句中包含多个条件,则必须在所有条件中都包含“(+)”操作符。

4.自连接

就是自己连接自己,主要用在自参考表上显示上下级关系或者层次关系。自参考表指的是在同一张表的不同列之间具有参照关系或主从关系的表。

例如,emp表包含empno(雇员号)和mgr(管理员号),两者之间就具有参照关系。

5.交叉连接

不需要任何连接条件,使用CROSS JOIN 关键字实现。

执行结果是一个笛卡尔积,非常冗余,但可以通过WHERE子句过滤出有用的记录信息。

4.Oracle常用系统函数

字符类函数

ASCII(c)  返回一个字符的ASCII码, CHR(i)  返回给出ASCII码值所对应的字符
CONCAT(s1,s2) 将字符串s2连接到字符串s1的后面
INITCAP(s)  将字符串s的每个单词的第一个字母大写,其他字母小写
INSTR(s1,s2[,i][,j])  返回字符串s2在字符串s1中第j次出现的位置,搜索从s1的第i个字符开始。未找到返回0,i为负从右往左搜索
LENGTH(s)  返回字符串s的长度
LOWER(s)和UPPER(s) 返回字符串s的小写形式和大写形式
LTRIM(s1,s2)、RTRIM(s1,s2)、TRIM(s1,s2) 分别用来删除字符串s1左边、右边、两边的字符串s2。若不指定s2,表示去除相应地方的空格
REPLACE(s1,s2[,s3])  使用s3字符串替换出现在s1字符串中的所有s2字符串,并返回替换后的新字符串,s3默认值为空
SUBSTR(s,i[,j])  从字符串s的第i个位置开始截取长度为j的子字符串,省略参数j,则直接截取到尾部

数字类函数

ABS(n) 返回n的绝对值
CEIL(n) 返回大于或等于n的最小整数
COS(n) 返回n的余弦值,n为弧度
EXP(n) 返回e的n次幂
FLORR(n) 返回小于或等于n的最大整数
LOG(n1,n2)

返回以n1为底n2的对数

MOD(n1,n2) 返回n1除以n2的余数
POWER(n1,n2) 返回n1的n2次方
ROUND(n1,n2) 返回舍入小数点右边n2位的n1的值,n2默认值为0
SIGN(n) 若n为负数,返回-1,n为正数返回1,n为0返回0
SIN(n) 返回n的正弦值,n为弧度
SORT(n) 返回n的平方根,n为弧度
TRUNC(n1,n2) 返回结尾到n2位小数的n1的值,n2默认值为0

举个例子:

 

日期和时间类函数

ADD_MONTHS(d,i) 返回日期d加上i个月之后的结果,i为整数
LAST_DAY(d) 返回包含日期d月份的最后一天
MONTHS_BETWEEN(d1,d2) 返回d1和d2之间的数目(通俗点就是d1减d2有几个月)
NEW_TIME(d1,t1,t2)

当t1和d1相同时,返回t2。d1时日期数据类型,t1和t2是字符串

SYSDATE() 返回系统当前的日期

转换类函数

CHARTORWIDA 将字符串s转换为RWID数据类型
CONVERT(s,aset[,best]) 将字符串s由best字符集转换为aset字符集
ROWIDTOCHAR() 将ROWID数据类型转换为CHAR类型
TO_CHAR(x[,format]) 将表达式转换为字符串,format表示字符串格式
TO_DATE(s[,format[lan]]) 将字符串s转换为date类型,format表示字符串格式,lan表示所使用的语言
TO_NUMBER(s[,format[lan]]) 将返回字符串s代表的数字,format表示字符串格式,lan表示所使用的语言

聚合类函数

AVG(x[DISTINCT|ALL]) 计算选择列表项的平均值,列表项目可以是一个列或多个列的表达式
COUNT(x[DISTINCT|ALL]) 返回查询结果中的记录数
MAX(x[DISTINCT|ALL]) 返回选择列表项目中的最大数,列表项目可以是一个列或多个列的表达式
MIN(x[DISTINCT|ALL]) 返回选择列表项目中的最小数,列表项目可以是一个列或多个列的表达式
SUM(x[DISTINCT|ALL]) 返回选择列表项目的数值总和,列表项目可以是一个列或多个列的表达式
VARIANCE(x[DISTINCT|ALL]) 返回选择列表项目的统计方差,列表项目可以是一个列或多个列的表达式
STDDEV(x[DISTINCT|ALL]) 返回选择列表项目的标准偏差,列表项目可以是一个列或多个列的表达式

5.子查询的用法

在执行数据操作(增删查改)的过程中,如果某个操作需要依赖于另外一个SELECT语句的查询结果,那么就可以把SELECT语句嵌入到该操作语句中,这样就形成了一个子查询。

什么是子查询

子查询是在SQL语句内的另外一条SELECT语句,也称为内查询。在SELECT、INSERT、UPDATE、DELETE等命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。

比如,在SCOTT模式下,在emp表中查询部门名称(ename)为“RESEARCH”的员工信息。代码如下:

对以上代码进行分析,emp表是不存在dname字段(部门名称)的,但存在deptno字段(部门代码);dname字段原本存在于dept表中,dept表中也存在deptno字段,所以deptno为两个表之间的关联字段。所以本示例的需求也可以通过多表关联查询来实现。代码如下:

子查询的使用更加灵活、功能更强大并且易于理解;

多表关联查询的查询效率更高。(因为子查询语句需要检索一遍数据,然后判断外查询语句的条件是否满足,满足则添加到结果集,不满足则继续判断下一行数据)

单行子查询

单行子查询是指返回一行数据的子查询语句。

当在where子句中引用单行子查询时,可以使用单行比较运算符(=、>、<、>=、<=、<>)。

在emp表中,查出既不是最高工资,也不是最低工资的员工信息。

多行子查询

多行子查询是指返回多行数据的子查询语句。

当在where子句中使用多行子查询时,必须使用多行比较符(IN、ANY、ALL)。

使用IN运算符

外查询与子查询结果进行匹配,只要有一个匹配成功,则返回当前检索的记录

在emp表中,查询不是销售部门的员工信息

使用ANY运算符

必须与单行操作符结合使用,并且返回行只要匹配子查询的任何一个结果即可。

在emp表中,查询工资大于10号部门的任意一个员工工资的其他部门的员工信息。

使用ALL运算符

必须与单行操作符结合使用,并且返回行必须匹配所有子查询结果。

在emp表中,查询工资大于30号部门的所有员工工资的员工信息。

关联子查询

上述两种子查询中,内查询和外查询是分开执行的,外查询仅仅是使用了内查询的结果。在一些特殊需求的子查询中,内查询的执行需要借助于外查询,而外查询的执行又离不开内查询的执行。这时,内外查询是相互关联的,这种子查询就被称为关联子查询。

在emp表中,检索工资大于同职位的平均工资的员工信息。

在上面的查询语句中,内查询使用关联子查询计算每个职位的平均工资,而关联子查询必须知道职位的名称,为此外查询就使用f.job字段值为内查询提供职位名称。如果外层查询正在检索的数据行的工资高于平均工资,则该行的员工信息会显示出来。

6.操作数据库

插入数据(INSERT语句)

单条插入数据:

a.使用列列表

insert into dept(deptno,dname,loc)
values(88,'design','beijing');

b.不使用列列表

insert into jobs values('PRO','程序员',5000,10000);

c.使用特定格式

insert into emp(empno,ename,job,hiredate)
values(1356,'MARY','CLERK',to_date(1983-10-20,'YYYY-MM-DD'));

d.使用DEFAULT提供数据

insert into dept values(60,'MARKET',DEFAULT);

如果列不存在默认值则为NULL

e.使用替代变量插入数据

accept no prompt '请输入雇员号:'
accept name prompt '请输入雇员名:'
accept title prompt '请输入雇员岗位:'
accept d_no prompt '请输入部门号:'
insert into emp(empno,ename,job,hiredate,deptno)
values(&no,'&name','&title',SYSDATE,&d_no);

批量插入数据:

insert into jobs_temp
select * from jobs
where jobs.max_salary >10000;

即使用INSERT语句和SELECT语句的组合可以一次性插入多条记录。

注意,两个语句对应的列之间,数据类型必须是兼容的,即select语句返回的数据必须满足insert into表中的约束。

更新数据(UPDATE语句)

更新单列数据:

update emp
set sal = 2460
where ename='SCOTT';

更新多列数据:

update emp
set sal = sal*1.2
where job='SALESMAN';

列之间用逗号隔开。

更新日期列数据:

update emp
set hiredate = TO_DATE('1984/01/01','YYYY/MM/DD')
where empno=7788;

使用DEFAULT选项更新数据:

update emp
set job = DEFAULT
where ename='SCOTT';

如果列不存在默认值则为NULL。

使用子查询更新数据:

同INSERT语句一样,UPDATE语句也可以与SELECT语句组合使用。

update emp
set sal = (select avg(sal)
from emp where job = 'MANAGER')
where sal < 2000;

删除数据(DELETE语句和TRUNCATE语句)

delete语句:删除数据库中的所有记录和指定范围的记录(通过WHERE子句进行限制)。

delete from jobs where job_id='PRO';
delete from emp;

TRUNCATE语句:删除表中的所有记录。

比DELETE快得多,因为它不会产生回滚记录,不能用ROLLBACK语句撤销。

truncate table jobs_temp;

 

 

--------------------------------------------

欢迎关注公众号“编程江湖”,可以领取Java、Python、微信小程序等相关学习资料和项目源码,还能查看技术文章。

​​

2016-11-14 16:37:53 qq_36526703 阅读数 621
  • C# For Unity系列之进阶篇

    整体介绍:       本进阶篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本进阶篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级/进阶篇”讲解特点与内容:          本“中级”与“进阶”篇, 是面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法重点与难点。 中级篇内容主要讲解: .Net 框架、里氏替换原则(LSP)、类的属性极其本质特性、IS ,AS 关键字、字符串的“驻留性” 原理、深入解析Equals() 原理、枚举类型、自定义集合、深入解析动态集合特性与内部原理、泛型集合、泛型约束、初级委托与事件讲解等。         "进阶篇"是在中级篇的基础之上,进一步研究与讲解关于IO操作、序列化、正则表达式、系统委托(Action、Function、Predicate等)、反射原理与特性、Linq查询表达式、多线程、线程池、任务、Socket套接字编程(Tcp与UDP协议),以及最后使用Unity开发具备实战价值的通讯聊天程序等。   C#“进阶篇”教学详细说明如下: 1: IO操作与序列化       学习文件、目录、二进制文件、文本文件的读取与写入底层原理。学习文件序列化与反序列化技能。 2: 正则表达式       学习正则表达式的强大作用与常用原字符的含义与应用场景。 3: 深入委托与事件       学习Action、Func、Predicate 系统内置委托类型,已经适用场合。学习匿名方法、Lambda表达式。深入解析委托与事件的区别。 4: 反射与特性       学习反射的概念与动态调用的重要应用价值,以及Type、Assembley核心类等,最后讲解“特性”技术。   5: Linq 查询表达式      学习Linq 查询表达式对于“对象集合”(支持IEnumberable 或IEnumberable<T>) 以及SQL数据库、XML文档方面的强大查询功能。       6: 多线程      学习多线程以及线程传参、线程取得返回数值技术,前台与后台线程、线程的同步、线程池、任务等技术。      7: Socket套接字通讯      学习Socket套接字通讯中,Tcp与UPD通讯协议的不同应用场景,以及各自的演示示例,最后用Unity开发一款实用性的聊天通讯工具。 温习提示:             本C# for Unity 使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习没有任何影响)。      一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1692 人正在学习 去看看 刘国柱

一.语言介绍

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
sql是最重要的关系数据库操作语言,并且它的影响已经超出数据库领域,得到其他领域的重视和采用,如人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等。
SQL语言基本上独立于数据库本身、使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。数据库和各种产品都使用SQL作为共同的数据存取语言和标准的接口,使不同数据库系统之间的互操作有了共同的基础,进而实现异构机、各种操作环境的共享与移植。

二.语句结构

结构化查询语言包含6个部分:
(1):数据查询语言(DQL:Data Query Language):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
(2):数据操作语言(DML:Data Manipulation Language):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
(3):事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
(4):数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
(5):数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
(6):指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

三.数据类型

SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型。
(一)字符型
VARCHARVS CHAR
VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符。
假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。
当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。
VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要。
(二)文本型
TEXT
使用文本型数据,你可以存放超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。
注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空,要么很大。
当你从HTML FORM的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。但是,无论何时,只要你能避免使用文本型字段,你就应该不使用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。
一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。
(三)数值型
1.整数INT 、小数NUMERIC、钱数MONEY
INT VS SMALLINT VS TINYINT
通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测一下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。
2.NUMERIC
为了能对字段所存放的数据有更多的控制,你可以使用NUMERIC型数据来同时表示一个数的整数部分和小数部分。NUMERIC型数据使你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字段可以存储从-10^38到10^38范围内的数。NUMERIC型数据还使你能表示有小数部分的数。例如,你可以在NUMERIC型字段中存储小数3.14。
3.MONEY VSSMALLMONEY
你可以使用 INT型或NUMERIC型数据来存储钱数。但是,专门有另外两种数据类型用于此目的。如果你希望你的网点能挣很多钱,你可以使用MONEY型数据。如果你的野心不大,你可以使用SMALLMONEY型数据。MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。
SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647 的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。
(四)逻辑型
BIT
如果你使用复选框(CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。
当心,在你创建好一个表之后,你不能向表中添加 BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。
(五)日期型
DATETIME VS SMALLDATETIME
一个 DATETIME型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。
如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样使用,只不过它能表示的日期和时间范围比DATETIME型数据小,而且不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。
DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。

四.语言特点

1.一体化:SQL集数据定义DDL、数据操纵DML和数据控制DCL于一体,可以完成数据库中的全部工作。
2.使用方式灵活:它具有两种使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主语言中使用。
3.非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,而不需要告诉它“怎么做”。
4.语言简洁,语法简单,好学好用:在ANSI标准中,只包含了94个英文单词,核心功能只用6个动词,语法接近英语口语。

结构化查询语言

阅读数 3358

C语言仓库管理系统

阅读数 3118

Sql数据库查询语言

阅读数 2722

没有更多推荐了,返回首页