精华内容
下载资源
问答
  • 到底什么时候创建的ARP表项

    万次阅读 2017-07-22 15:09:31
      我们知道,在2.6.32的内核里,在查路由操作的最后,会有个arp bind neighbour的操作,这个时候就会创建arp表项,即便只是查一下路由,并没有数据包会发送,也会创建这个表项,比如调用一下UDP的connect操作。...

    一周前遇到一个问题,比较简单但值得推敲。到底什么时候创建arp邻居项呢?是在查路由的时候呢,还是在实际走路由的时候?
      我们知道,在2.6.32的内核里,在查路由操作的最后,会有一个arp bind neighbour的操作,这个时候就会创建arp表项,即便只是查一下路由,并没有数据包会发送,也会创建这个表项,比如调用一下UDP的connect操作。
      然而在3.5内核之后,路由查找子系统发生了比较大的重构,neighbour管理和路由表管理彻底分开了,因此在查找路由的时候,也就不再会bind neighbour了,只有在实际的数据包发送的时候,在ip_finish_output2才会实际去bind neighbour。虽然这个改动看似没有什么影响,但是却可能带来一些诡异的问题。
      一般而言,系统不会为收到的那些“免费ARP”创建表项,这种ARP进行的只是一些初始化操作,并不是以通信为目的的,因此在Linux系统中会设置arp_accept为0,它的含义表示,如果收到一个ARP回应,该ARP回应在本地找不到任何与其对应的ARP表项,那就不处理它。
      在使用arping的时候,2.6.32内核和3.5以后的内核在行为出现了差异。我们知道arping使用的是packet套接字发包的,也就是说数据包不走IP路由,直接由dev发送出去,这意味着在3.5以后的内核中,ARP表项在使用arping的时候是始终不会被创建的,那么2.6.32内核呢?这要看情况。
      如果在arping的数据包发送前,曾经有查找路由表的操作,那么ARP表项就会被创建(此时必须用ip neigh ls nud none才能看得到),如果arping命令加上了-s选项指定了源IP地址,就不会调用connect,不会查找路由表自然也就不会创建ARP表项了。
      因此,在arp_accpet参数为0的情况下,对于2.6.32内核使用arping的时候,如果指定了-s选项,那么当ARP Reply到达的时候,是不会创建ARP条目的,如果没有指定-s选项,那么当ARP Reply到达的时候,便会创建ARP条目(因为connect调用已经创建了ARP表项)。
      哪个更合理?到底是查找路由时创建ARP表项还是走路由时创建ARP表项,这是一个问题。

    展开全文
  • Kubernetes之kubectl常用命令使用指南:1:创建和删除

    万次阅读 多人点赞 2017-06-29 15:48:19
    kubectl是个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具。这里我们会通过一些简单的实例来展现其中一些高频命令的使用方法。 更为重要的...

    这里写图片描述
    kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具。这里我们会通过一些简单的实例来展现其中一些高频命令的使用方法。
    更为重要的是这些命令使用的场景以及能够解决什么样的问题。这篇文章我们来介绍一下创建和删除相关的命令。

    常用命令

    kubectl创建和删除相关,本文将会简单介绍一下如下命令

    项番命令说明
    No.1run在集群上运行一个镜像
    No.2create使用文件或者标准输入的方式创建一个资源
    No.3delete使用文件或者标准输入以及资源名称或者标签选择器来删除某个资源

    事前准备

    ##版本

    [root@ku8-1 tmp]# kubectl version
    Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:52:34Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
    [root@ku8-1 tmp]#
    

    集群构成

    一主三从的Kubernetes集群

    项番类型HostnameIP
    No.1Masterku8-1192.168.32.131
    No.1Nodeku8-2192.168.32.132
    No.1Nodeku8-3192.168.32.133
    No.1Nodeku8-4192.168.32.134
    [root@ku8-1 tmp]# kubectl get nodes
    NAME             STATUS    AGE
    192.168.32.132   Ready     12m
    192.168.32.133   Ready     11m
    192.168.32.134   Ready     11m
    [root@ku8-1 tmp]# 
    

    kubectl run

    运行一个镜像

    kubectl run和docker run一样,它能将一个镜像运行起来,我们使用kubectl run来将一个sonarqube的镜像启动起来。

    [root@ku8-1 tmp]# kubectl run sonarqube --image=192.168.32.131:5000/sonarqube:5.6.5 --replicas=1 --port=9000
    deployment "sonarqube" created
    [root@ku8-1 tmp]#
    

    让我们来看看这条kubectl run之后,kubernetes做了什么,从它的提示看到创建了一个deployment(1.4之后推荐的方式)。

    确认Deployment

    [root@ku8-1 tmp]# kubectl get deployment
    NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    sonarqube   1         1         1            1           5m
    [root@ku8-1 tmp]# 
    

    确认pod

    kubernetes将镜像运行在pod中以方便实施卷和网络共享等管理,使用get pods可以清楚的看到生成了一个pod

    [root@ku8-1 tmp]# kubectl get pods
    NAME                         READY     STATUS    RESTARTS   AGE
    sonarqube-1880671902-s3fdq   1/1       Running   0          6m
    [root@ku8-1 tmp]# 
    

    kubectl delete

    让我们来试着使用kubectl delete删除一下这些创建的对象
    ##删除pod

    [root@ku8-1 tmp]# kubectl delete pods sonarqube-1880671902-s3fdq
    pod "sonarqube-1880671902-s3fdq" deleted
    [root@ku8-1 tmp]#
    

    确认结果

    可以看到刚刚生成的sonarqube-1880671902-s3fdq正在结束(Terminating),随之一个新的sonarqube-1880671902-n75d2正在创建,这是正是确保replicas为1的动作。

    [root@ku8-1 tmp]# kubectl get pods
    NAME                         READY     STATUS              RESTARTS   AGE
    sonarqube-1880671902-n75d2   0/1       ContainerCreating   0          11s
    sonarqube-1880671902-s3fdq   0/1       Terminating         0          10m
    [root@ku8-1 tmp]#
    

    再次确认

    稍等之后再次确认,发现replicas仍然保持在1个的状态

    [root@ku8-1 tmp]# kubectl get pods
    NAME                         READY     STATUS    RESTARTS   AGE
    sonarqube-1880671902-n75d2   1/1       Running   0          40s
    [root@ku8-1 tmp]# kubectl get deployments
    NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    sonarqube   1         1         1            1           15m
    [root@ku8-1 tmp]#
    

    删除deployment

    直接删除pod触发了replicas的确保机制,那么我们删除deployment

    [root@ku8-1 tmp]# kubectl delete deployment sonarqube
    deployment "sonarqube" deleted
    [root@ku8-1 tmp]#
    

    结果确认

    通过使用deployment进行删除,则全部删除。

    [root@ku8-1 tmp]# kubectl get pods
    No resources found.
    [root@ku8-1 tmp]# kubectl get deployments
    No resources found.
    [root@ku8-1 tmp]#
    

    kubectl create

    使用kubectl run在设定很复杂的时候需要非常长的一条语句,敲半天也很容易出错,也没法保存,在碰到转义字符的时候也经常会很抓狂,所以更多场景下会使用yaml或者json文件,而使用kubectl create或者delete就可以利用这些yaml文件。
    比如,我们使用如下的方式来分别创建mysql和sonarqube的RC。

    事前准备

    [root@ku8-1 tmp]# ls yamls
    mysql.yaml  sonar.yaml
    [root@ku8-1 tmp]# cat yamls/mysql.yaml 
    ---
    kind: ReplicationController
    apiVersion: v1
    metadata:
      name: mysql
    spec:
      replicas: 1
      selector:
        name: mysql
      template:
        metadata:
          labels:
            name: mysql
        spec:
          containers:
          - name: mysql
            image: 192.168.32.131:5000/mysql:5.7.16
            ports:
            - containerPort: 3306
              protocol: TCP
            env:
              - name: MYSQL_ROOT_PASSWORD
                value: "hello123"
    [root@ku8-1 tmp]# 
    [root@ku8-1 tmp]# cat yamls/sonar.yaml 
    ---
    kind: ReplicationController
    apiVersion: v1
    metadata:
      name: sonarqube
    spec:
      replicas: 1
      selector:
        name: sonarqube
      template:
        metadata:
          labels:
            name: sonarqube
        spec:
          containers:
          - name: sonarqube
            image: 192.168.32.131:5000/sonarqube:5.6.5
            ports:
            - containerPort: 9000
              protocol: TCP
    [root@ku8-1 tmp]# 
    

    创建(MYSQL)

    [root@ku8-1 tmp]# kubectl create -f yamls/mysql.yaml 
    replicationcontroller "mysql" created
    [root@ku8-1 tmp]#
    

    确认(MYSQL)

    [root@ku8-1 tmp]# kubectl get rc
    NAME      DESIRED   CURRENT   READY     AGE
    mysql     1         1         1         1m
    [root@ku8-1 tmp]# kubectl get pod
    NAME          READY     STATUS    RESTARTS   AGE
    mysql-nl8sq   1/1       Running   0          1m
    [root@ku8-1 tmp]# 
    

    创建(SONARQUBE)

    [root@ku8-1 tmp]# kubectl create -f yamls/sonar.yaml 
    replicationcontroller "sonarqube" created
    [root@ku8-1 tmp]# 
    

    确认(SONARQUBE)

    [root@ku8-1 tmp]# kubectl get pods
    NAME              READY     STATUS    RESTARTS   AGE
    mysql-nl8sq       1/1       Running   0          2m
    sonarqube-p1cnj   1/1       Running   0          46s
    [root@ku8-1 tmp]# kubectl get rc
    NAME        DESIRED   CURRENT   READY     AGE
    mysql       1         1         1         2m
    sonarqube   1         1         1         51s
    [root@ku8-1 tmp]# 
    

    删除(SONARQUBE)

    使用yaml文件也可以直接删除所创建出来的内容,比如我们先删除刚刚创建的sonarqube相关。

    [root@ku8-1 tmp]# kubectl delete -f yamls/sonar.yaml 
    replicationcontroller "sonarqube" deleted
    [root@ku8-1 tmp]# 
    

    确认(SONARQUBE)

    [root@ku8-1 tmp]# kubectl get pods
    NAME          READY     STATUS    RESTARTS   AGE
    mysql-nl8sq   1/1       Running   0          4m
    [root@ku8-1 tmp]# kubectl get rc
    NAME      DESIRED   CURRENT   READY     AGE
    mysql     1         1         1         4m
    [root@ku8-1 tmp]# 
    

    删除(MYSQL)

    [root@ku8-1 tmp]# kubectl delete -f yamls/mysql.yaml 
    replicationcontroller "mysql" deleted
    [root@ku8-1 tmp]#
    

    确认(MYSQL)

    [root@ku8-1 tmp]# kubectl get pods
    No resources found.
    [root@ku8-1 tmp]# kubectl get rc
    No resources found.
    [root@ku8-1 tmp]#
    

    Deployment方式:准备

    RC在1.4之后已经被建议用Deployment方式替换,主要只需要替换kind和apiversion和selector即可,1.5和1.6在此处也略有区别。

    [root@ku8-1 tmp]# ls yamls/
    mysql.yaml  sonar.yaml
    [root@ku8-1 tmp]# cat yamls/mysql.yaml 
    ---
    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: mysql
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            name: mysql
        spec:
          containers:
          - name: mysql
            image: 192.168.32.131:5000/mysql:5.7.16
            ports:
            - containerPort: 3306
              protocol: TCP
            env:
              - name: MYSQL_ROOT_PASSWORD
                value: "hello123"
    [root@ku8-1 tmp]# 
    [root@ku8-1 tmp]# cat yamls/sonar.yaml 
    ---
    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: sonarqube
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            name: sonarqube
        spec:
          containers:
          - name: sonarqube
            image: 192.168.32.131:5000/sonarqube:5.6.5
            ports:
            - containerPort: 9000
              protocol: TCP
    [root@ku8-1 tmp]# 
    

    创建

    有多个yaml文件的时候,可以使用如下方式一下全部创建

    [root@ku8-1 tmp]# kubectl create -f yamls/
    deployment "mysql" created
    deployment "sonarqube" created
    [root@ku8-1 tmp]# 
    

    确认

    [root@ku8-1 tmp]# kubectl get pods
    NAME                         READY     STATUS    RESTARTS   AGE
    mysql-478535978-2l7kq        1/1       Running   0          3m
    sonarqube-3574384362-x3mg2   1/1       Running   0          3m
    [root@ku8-1 tmp]# kubectl get deployments
    NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    mysql       1         1         1            1           3m
    sonarqube   1         1         1            1           3m
    [root@ku8-1 tmp]#
    

    删除

    同样,有多个yaml文件的时候,可以使用如下方式一下全部删除

    [root@ku8-1 tmp]# kubectl delete -f yamls/
    deployment "mysql" deleted
    deployment "sonarqube" deleted
    [root@ku8-1 tmp]# 
    

    确认

    [root@ku8-1 tmp]# kubectl get pods
    No resources found.
    [root@ku8-1 tmp]# kubectl get deployments
    No resources found.
    [root@ku8-1 tmp]#
    

    总结

    这篇文章通过几个最简单的命令熟悉了如何使用kubectl对镜像进行创建和删除,在后面我们会进一步介绍一些常用的命令。

    展开全文
  • 1.显示数据库信息:通过show database命令。...数据库是表的容器,表,必须输入某个数据库。因而在创建表之前要指定数据库。1.可以通过语法指明表所属的数据库。库.表语法。如果任何的标识符出现了特...

    1.显示数据库信息:通过show database命令。


    2.为了获得一个数据库内的表的列表,使用show tables;

    3.创建数据库 ,使用create database 数据库名;


    再使用show命令可以看出系统中多了一个自己创建的数据库名。


    4.创建表。数据库是表的容器,表,必须属于某个数据库。因而在创建表之前要指定数据库

    1.可以通过语法指明表所属的数据库。库.表语法。如果任何的标识符出现了特殊字符,需要使用反引号包裹,

    不同的标识符需要用不同的反引号包裹。

    2.可以指定当前的默认数据库。use db_name;只是设定了默认数据库,不会影响其它数据库。

    这里表示使用了当前默认数据库sample_db;

    接下来可以创建表了。创建表时要先分析需要保存的实体数据拥有哪些属性,这些属性应如何保存。

    列定义: 列名   列的数据类型   [列的属性(约束)]

    创建表的SQL命令:create table 表名(列结构) [表选项];

    主键:一列(或一组列),其值能够唯一区分表中每个行。没有主键,更新或删除表中特定的行很困难。因而大多数数据库设计人员都应保证创建的每个表都具有一个主键,以便于以后的数据操纵和管理。


    由于上面采用use sample_db; 命令,故在创建表时会默认放在sample_db数据库中。接下来可以在数据库中查询数据库中所包含的表,可以看到表vendors已经被创建。


    外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

    例子分析:假如有一个包含产品目录的数据库表,其中每个类别的物品占一行。对于每种物品要存储的信息包括产品描述和价格,以及生产该产品的供应商信息。假设有由同一供应商生产的多种物品,那么应该在何处存储供应商信息(如供应商名、地址、联系方法呢)?

    解决:将数据和产品信息分开存储。可以建立两个表,一个表存储供应商信息,另一个表存储产品信息。

    vendors表包含所有供应商信息,每个供应商占一行,每个供应商具有唯一的标识(主键),可以是供应商ID。

    products表只存储产品信息,它除了供应商ID(vendors表的主键)外不存储其他供应商信息。

    vendors表的主键叫做products表的外键,这个外键将vendors表和products表关联,利用供应商ID能从vendors表中找出相应供应商的详细信息。

    创建products表和外键的代码如下:


    创建外键的命令: FOREIGN KEY (字段名) REFERENCES 关联表名(关联字段名)

    这样利用供应商ID能从vendors表中找出相应供应商的详细信息。

    此时可以看到数据库中增加了一个名为products的表。


    5.数据操作。包括创建数据(插入数据)、获得数据(查询、检索数据)、删除数据、修改(更新)数据

    ①创建数据。命令:insert into 表名(字段列表) values (值列表); 

    按照字段列表处的字段名先后顺序去对应添加值。不需要与创建表时的字段列表顺序一致,这样插入数据 更灵活,也方便修改。

    如果在插入时要为所有的字段设置值,那么可以省略字段列表,但是要求值的顺序与创建表的时候字段的顺序一样,不灵活,一般采用上面那种写法。

              

    以上语句命令向vendors表和products表中添加了数据。

    ② 获得数据。select 字段列表 from 表名 查询条件;

    除了指定所需的列外,select语句还可以检索所有的列,通过*通配符来完成。

    可以看到在创建数据之后,表中已经添加了我们创建的相应数据项。

    从这条语句的输出中可以看出,检索出的数据并不是并不是以纯粹的随机顺序显示的。如果没有对数据排序,数据一般以它在底层表中出现的顺序显示。可以是数据最初添加到表中的顺序。

    如果要对数据进行排序,可以使用命令:order by 字段名;

    排序前:检索数据结果


    排序后:检索数据结果,order by默认以升序排序(字符类型:从A到Z。数值类型:从小到大)。

                     

    若想按照降序排序可以采用DESC关键字。


    若想在多个列上排序。


    若想对多格列进行降序排序,需要对每个列指定DESC关键字。

    若想对多个列排序,按照某一字段名降序,再按照某一字段名升序排列,可以这么写。

    以降序排序产品,然后再对产品名排序:


    限制结果:LIMIT命令。select 语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT语句。

    LIMIT 4指示MYSQL返回不多于4行。


    为得到从第几行到第几行,需要指定要检索的开始行和行数。LIMIT 4,3指示MYSQL返回从行4开始的3行。

    第一个数为开始位置,第二个数是要检索的行数。注意:检索出来的第一行是行0而不是行1.


    可以使用ORDER BY 和 LIMIT 的组合,找出一个列中的最高值或最低值。

               

    ③ 删除数据。 delete from 表名 条件;

    ④更新数据。update 表名  set  字段名;




    可以看到数据已经更新了

                 

    展开全文
  • 、存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1、卸载原来的sql server 2000、2005,然后再安装sql server 2008,否则经常sql server服务启动不了 2、sql server服务启动失败,...

    SQLSERVER数据库,安装、备份、还原等问题:
    一、存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题
    1、卸载原来的sql server 2000、2005,然后再安装sql server 2008,否则经常sql server服务启动不了
    2、sql server服务启动失败,解决方法:
    进入sql server configure manager,点开 Sql server 网络配置(非sql native client 配置),点sqlzhh(我sqlserver的名字)协议,将VIA协议禁用。再启动Sql Server服务,成功
    如图:
    在这里插入图片描述
    在这里插入图片描述
    二、在第一次安装SQLSERVER2008结束后,查看安装过程明细,描述中有较多项插件或程度,显示安装失败。
    解决方法:
    1、重新启动安装程度setup.exe,选择进行修复安装,至完成即可。

    三、先创建数据库XXX,再进行还原数据库时,选择好备份文件XXX.bak,确定后进行还原,会报如下图的错误。
    在这里插入图片描述
    解决方法:
    选择好备份数据库文件后,再进入“选项”中,勾选“覆盖现在数据库”即可。
    在这里插入图片描述
    四、查看数据库版本的命令:select @@version
    在数据库中,点击“新建查询”,然后输入命令,执行结果如下
    在这里插入图片描述
    五、数据库定义及操作命令:
    按照数据结构来组织、存储和管理数据的仓库。由表、关系以及操作对象组成,把数据存放在数据表中。
    1、修改数据库密码的命令:
    EXEC sp_password NULL, ‘你的新密码’, ‘sa’
    sp_password Null,‘sa’,‘sa’
    2、操作SQL2008数据库的命令
    备份SQL数据库:
    backup database [3D-DATA]/原数据库/ to disk=‘D:\Program Files\Microsoft SQL       Server\MSSQL10.MSSQLSERVER\MSSQL\backup\3D-DATA_backup_20131017.bak/数据库备份文件/’
    with name = ‘3D-DATA_backup_20131017’/数据库备份文件/
    查看备份数据库的逻辑文件:
    restore filelistonly
    from disk=
    'd:\Program Files\Microsoft SQL Server
    MSSQL10.MSSQLSERVER\MSSQL\backup\3D-DATA_backup_20131017.bak ’
    强制还原SQL数据库:
    [其中,Test-3d是已存在的数据库,3D-FEP_data和3D-FEP_log为备份数据库的两个逻辑文件,]
    restore database [Test-3d]
    from disk = ‘d:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\3D-DATA_backup_20131017.bak’
    with
    move ‘3D-FEP_data’ to ‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-3d.mdf’,
    move ‘3D-FEP_log’ to ‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-3d_log.ldf’,
    stats = 10/* 表示每完成10%显示一条记录*/ ,replace/表示强制,放置在with后,加英文逗号也可/

    以下为另一种方式:
    -备份数据DB 到.bak文件。然后利用此bak文件恢复一个新的数据库DBTest。
    USE master;
    backup database DB
    to disk = ‘g:\DBBack0930.bak’ ;
    restore filelistonly
    form disk = ‘g:\DBBack0930.bak’ ;

    restore database DBTest(此数据库,已创建)
    FROM DISK = ‘g:\DBBack0930.bak’
    WITH MOVE ‘DBTest’ TO ‘E:\Program Files\Microsoft SQL Server2005\Data\DBTest.mdf’,
    MOVE ‘DBTest_log’ TO ‘E:\Program Files\Microsoft SQL Server2005\Data\DBTest_log.ldf’
    GO
    六、
    SQL Server数据库文件恢复技术 yzhshi(yzhshi@etang.com) SQL Server数据库备份有两种方式:
    1、使用命令:BACKUP DATABASE,将数据库文件备份出去;
    2、直接拷贝数据库文件mdf和日志文件ldf的方式。
    下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server Enterprise Manager (SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)
      正常的备份、恢复方式正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
      卸下数据库的命令:Sp_detach_db
      数据库名连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,…16] sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′ 使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将 mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。

    七、SQL命令创建数据库及数据表
    use master
    if db_id (‘Test-a01’)is not null–判断数据库,是否已存在
    drop database [Test-a01]–删除数据库
    go

    create database [Test-a01] on primary
    (
    name = ‘Test-a01_data’, --数据文件的逻辑名称
    filename = ‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-a01_data.ndf’ , --数据文件的路径和文件名
    size = 3mb ,-- 数据文件的初始容量
    maxsize = 10mB --数据文件的最大容量
    )
    log on
    (
    name = ‘Test-a01_log’, --事务日志文件的逻辑名称
    filename = ‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-a01_log.ndf’ , --事务日志文件的路径和文件名
    size = 3mb , --事务日志文件的初始容量
    maxsize = 10mB --事务日志文件的最大容量
    )
    Go
    use [xxxxx] /指定创建表的数据库/
    go
    create table student
    (
    stuID char(5) primary key,–主键
    stuname char(20)not null,
    stusex char(2) check(stusex in(‘男’,‘女’)) default(‘女’),–设定范围及默认值
    stuage char(6),
    stubirth date check(stubirth between ‘1985-01-01’ and ‘1995-12-31’),–设置日期范围
    stuaddress varchar(100),
    stunum char(12),
    stuemail char(40)check(stuemail like ‘%@%’)
    )
    go
    use [xxxxx]
    go
    create table teacher
    (
    TeacherID char(5),
    Teaname char(20)not null,
    Teasex char(2) check(Teasex in(‘男’,‘女’)) default(‘女’),
    Teaage char(6),
    Entrydate date check(Entrydate between ‘1950-01-01’ and ‘2099-12-31’),
    Teaphone varchar(100),
    Teanum char(12),
    Teaaddress char(40)
    )

    1、删除新表:
    drop table table_name;

    2、创建视图:
    create view viewname as select statement;
    例1:
    create view view_name01(stuid,stuname,stusex,stuage)
    as
    select stuid,stuname,stusex,stuage from student where stuage>=25;
    其中,红色部分的字段列,必须相同。
    如下例2,则不用考虑(比较常用).
    create view view_name02
    as
    select stuid,stuname,stusex,stuage from student where stuage>=25;

    查看视图:select * from view_name;

    3、删除视图:
    drop view viewname;

    4、创建索引:
    create [unique] index idx_name on table_name(字段1…);
    create index idx_name on table_name (COLUMN_NAME);

    5、删除索引:
    drop index idxname;

    八、常见创建数据表的限制,有以下几种:
    NOT NULL
    UNIQUE
    CHECK
    主键 (Primary Key)
    外来键 (Foreign Key)

    1、NOT NULL
    表示某字段的值,不允许出现空值。
    例如:
    CREATE TABLE Customer
    (
    SID int NOT NULL,
    Last_Name varchar (30) NOT NULL,
    First_Name varchar(30)
    );

    2、unique
    表示某字段的值,不允许重复
    例如:
    CREATE TABLE Customer
    (
    SID int Unique,
    Last_Name varchar (30) NOT NULL,
    First_Name varchar(30)
    );

    3、check
    检查某字段的值,必须符合某些条件
    CREATE TABLE Customer
    (
    SID int check( sid>0 ),
    Last_Name varchar (30) NOT NULL,
    First_Name varchar(30)
    );

    4、主 键
    主键 (Primary Key) 中的每一笔资料都是表格中的唯一值。
    添加主键SQL命令(注意:选择作主键的列,必须有数值):
    Alter table teacher add primary key(TeacherID);
    Alter table teacher add primary key(TeacherID);

    创建数据表时,加主键的不同方式:
    MySQL:
    CREATE TABLE Customer
    (SID integer,
    Last_Name varchar(30),
    First_Name varchar(30),
    PRIMARY KEY (SID));

    Oracle:
    CREATE TABLE Customer
    (SID integer PRIMARY KEY,
    Last_Name varchar(30),
    First_Name varchar(30));

    SQL Server:
    CREATE TABLE Customer
    (SID integer PRIMARY KEY,
    Last_Name varchar(30),
    First_Name varchar(30));

    删除主键的SQL语句:
    语法:alter table 表名 drop constraint 主键约束名(非字段名称)
    如:
    alter table Stu_PkFk_S drop constraint PK_S;

    5、外 键
    外来键是一个(或数个)指向另外一个数据表主键的字段。外键作用是:确定资料限制输入的参考完整性(referential integrity)。换言之,只有被准许的字段值才会被存入数据库内。

    Store_Information 表格在这里插入图片描述
    Geography 表格
    在这里插入图片描述
    创建外键的命令操作:如下,
    alter table [Store_Information]
    add foreign key (Reg_ID) references Geography;

    alter table 需要建立外键的表 add constraint 外键名字 foreign key references 外键表(外键字段) ;

    以下列出几个在建置 ORDERS 表格时指定外键的方式:
    外键Reg_ID,指向主键regionID。
    MySQL:
    CREATE TABLE ORDERS
    (Order_ID integer,
    Order_Date date,
    Customer_SID integer,
    Amount double,
    Primary Key (Order_ID),
    Foreign Key (Customer_SID) references CUSTOMER(SID));

    Oracle:
    CREATE TABLE ORDERS
    (Order_ID integer primary key,
    Order_Date date,
    Customer_SID integer references CUSTOMER(SID),
    Amount double);

    SQL Server:
    CREATE TABLE ORDERS
    (Order_ID integer primary key,
    Order_Date datetime,
    Customer_SID integer references CUSTOMER(SID),
    Amount double);

    以下的例子则是改变表格架构来指定外键。这里假设 ORDERS 表格已经被建立,而外键尚未被指定:

    MySQL:
    ALTER TABLE ORDERS
    ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

    Oracle:
    ALTER TABLE ORDERS
    ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

    SQL Server:
    ALTER TABLE ORDERS
    ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

    删除外键的SQL命令:
    alter table 表名 drop constraint 外键约束名(非字段名);
    如:
    alter table Stu_PkFk_Sc drop constraint FK_s;

    6、Alter Table
    改变表结构的方式:
    1、加一个字段
    Alter table table_name add 字段1 int,字段2 char(10),…; 加多个字段
    Alter table table_name add 字段1 int、或字段2 char(10)、…;加一个字段

    2、删去一个字段
    Alter table table_name drop column字段1;–(SQLserver数据库,字段前要加“column”)

    3、改变字段名称 (此命令SQLserver数据库,不可用)
    ALTER table table_name change字段1 新字段1 char(50);

    4、改变字段的类型(此命令SQLserver数据库,不可用)
    ALTER table table_name modify 字段1 char(20);

    SQL SERVER 2008不能修改表的解决方法(增加字段、修改字段名)
    新装的SQL SERVER 2008,打开原来SQL SERVER 2008中建立的表,现在想增加一些字段,在保存时提示错误,无法保存。
    原以为是SQL SERVER 2008与2005的不兼容,后来发现在SQL SERVER 2008中新建的表也存在无法修改表结构,也就是无法修改字段名和增加字段名。
    提示是:不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。
    截图如下:
    在这里插入图片描述
    解决办法:
    启动MSSQL SERVER 2008,选择菜单 工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器。然后去掉“ 阻止保存要求重新创建表的更改”前面的勾。重新启动MSSQL SERVER 2008即可。如下图所示:
    在这里插入图片描述

    展开全文
  • 命令操作方式创建和管理数据库

    万次阅读 2018-03-15 23:05:21
    必选项,|,1...n可有多个同类项一.用命令操作方式创建数据库-----使用T-SQL语句中的CREATE DATABASE命令创建数据库。数据库必须要确定数据库名,数据库大小,增长方式和存储数据库的文件。能够创建...
  • 创建文件夹【mkdir】 、mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录。 二、mkdir命令使用格式 格式:mkdir [选项] DirName 三、mkdir命令功能 通过 mkdir ...
  • python Django 连接mysql数据库创建表详细全过程 1,在数据库中新建个要连接的数据库(在cmd命令行里登录数据库进行创建创建) mysql -u root -p**+密码** create database day25; show databases; 2,配置与...
  • 以下设计模式中,哪一项不属于结构性模式? A 适配器模式 B 代理模式 C 命令模式 D 装饰模式 正确答案 : C知识点创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型...
  • linux中创建特殊文件mknod命令用法详解:  函数用途:  创建特殊文件。  语法:  只能由 root 用户或系统组成员运行...mknod 命令建立个目录个特殊文件的对应索引节点。第个参数是 Name 设备的名称。
  • 1、创建命令队列 OpenCL对象,比如内存对象,程序对象和内核对象都是用上下文创建的。对这些对象的操控都是通过命令队列来实现的。用命令队列可以把系列操作按序排队。如果有多个命令队列,应用可以将多个相互...
  • 使用vs2017创建一个.net core 2.0的项目。项目创建完毕后,发现依赖项中的SDK和Nuget出现黄色标志,且编译后,产生很多错误。...只需在dos窗口中通过命令重新加载次csproj文件即可,命令如下: ...
  • Windows:直接使用命令运行个程序

    千次阅读 2019-04-09 10:53:56
    打开Windows运行命令 win+R,就是运行命令快捷键 Windows 自带常用运行命令: 1、cleanmgr:打开磁盘清理工具 2、compmgmt.msc:计算机管理 3、conf:启动系统配置实用程序 4、charmap:启动字符映射 5、...
  • Oracle数据库Cmd命令创建新用户并连接 ORACLE 配置 Oracle的三个用户 用超级管理员身份连接 创建新用户 连接 添加数据库表格 删除用户数据 ORACLE 配置-配置文件所在的路 C:\app\Administrator\product\11.2.0\...
  • 数据库应用技术系列第讲 1 创建数据库快照 CREATE DATABASE数据库快照名 ON( NAME = 逻辑文件名, FILENAME = '操作系统文件名' ) AS SNAPSHOT OF源数据库名 例:创建test1数据库的快照test1_s1 CREATE ...
  • 功能:创建一个目录(类似DOS下的md命令)。 语法:mkdir [选项] dirname  说明:该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中 (dirname的父目录中)具有写权限,并且dirname不能是当前目录...
  • 学习Linux二(创建、删除文件和文件夹命令) 今天学习了几个命令,是创建、删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令创建文件夹【mkdir】  、mkdir命令使用权限 ...
  • Centos创建和修改用户及密码命令

    万次阅读 2016-06-19 15:46:58
    linux下创建用户 1、添加ftp用户 useradd ftpname -d /home/ftp passwd ftppwd 以下操作都以root权限进行: service vsftpd start 启动Linux自带的FTP服务 2. 添加普通用户  useradd nagios –d /usr/local/...
  • 这绝对是整理的最全面最详细最认真最适合用来当笔记的Linux终端命令汇总的文章了
  • 用SQL语句创建表

    万次阅读 多人点赞 2016-07-28 23:22:41
    数据库中的所有数据存储在中。数据包括行和列。列决定了中数据的类型。行包含了实际的数据。...其中的个字段名为为au_lname,这个字段被用来存储作者的名字信息。每次向这个中添加新作者时,作
  • windows常用命令行命令

    万次阅读 多人点赞 2017-08-31 11:16:21
    windows常用命令 打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口 # ...
  • 快速创建一个react项目

    千次阅读 2019-03-07 16:18:30
    创建一个react项目有三种方式: 1.create-react-app 快速脚手架(简单,类似于 vue-cli 工具) 2.webpack一步一步构建 3....这里主要介绍利用create-react-app 快速脚手架 创建一个react...
  • Microsoft SQL Server2014安装、创建数据库实例、创建表及C#简单使用 1、安装 介绍Microsoft SQL Server 2014 数据库在Windows系统(以Win7 64位为例)的安装方法: 在执行安装过程前首先需要下载Microsoft ...
  • OpenSSL命令详解()——标准命令

    万次阅读 2017-02-06 00:06:25
    ref: ...http://blog.csdn.net/scuyxi/article/details/54898870OpenSSL命令分为以下3个部分。 标准命令Standard commands1. asn1parse:asn1parse用于解释用ANS.1
  • 转载:http://kingxss.iteye.com/blog/1741076创建用户和空间: 1、登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切换成oracle用户)2、以sysdba方式来打开sqlplus,命令如下: ...
  • 每天个linux命令:at命令

    万次阅读 2017-02-14 16:11:44
    linux at命令
  • MySQL创建中数据操作

    千次阅读 2016-09-01 21:53:41
    这篇文章主要介绍在navicat的命令界面操作mysql。主要涉及建立结构,和对表中数据的增加删除修改查询等动作。站在个新手角度的简单mysql结构和数据操作。
  • ln(即link) 的功能是为某一个文件在另外一个位置建立一个同步的链接。有两种链接方式,一种是硬链接(hard ...符号链接的内容只是一个所链接文件的文件名,在使用ls –l时,符号链接的第一项的第一位为“l”。 ...
  • 华为交换机MAC地址以及命令配置

    千次阅读 2020-07-24 14:32:41
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入段漂亮的代码片生成个适合你的列表创建一个表格设定内容居中、居左、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 485,149
精华内容 194,059
关键字:

创建表的命令是哪一项