zoukankan      html  css  js  c++  java
  • SQL数据库—<2>数据库基本操作(CRUD)

    学习基本操作语句之前先简单了解数据库的基本数据类型:

    数据类型:
        二进制数据:以十六进制形式存储
            固定长度:binary
            可变长度:varbinary
        字符数据:
            char:定长
            varchar:长度不同时,但是任何项长度不能超过8KB
        日期时间数据:
            datatime(1753-1-1,9999-12-31) smalldatetime(1900-1-1,2079-6-6)


    数值型数据
        整型数据:bigint int samllint tinyint
        实型数据:decimal :decimal[p(,s)] 其中p为总位数,即精度,s为小数位数,小数点算一位
                  float
    货币数据:
        money
    特殊数据类型:
        bit:true、false ; Yes、No
       
    文本和图像数据类型:
        文本:text
        图像:image

    简单书写规范

    SQL语言中不区分大小写,SQL数据库中的数据是区分大小写的

    遇到关键字可以用 [] 括号扩起来

    注释:

    -- :单行注释

    /* */:多行注释

    更详细内容可以查阅资料

    一、数据库操作:创建、删除、修改等基本操作

    数据库的CRUD操作,C是指create新增,R是指retrieve检索,U是指update更改,D是指delete删除

    使用SQL语句

    1 create database 数据库名   --建,完成可用 USE 打开数据库。
    2 drop database 数据库名  --
    3 alter database 数据库名  --
    4 sp_renamedb  '旧名字','新名字' --修改名字

    二、数据表操作:增、删、改、查

    一个表至少有1列,最多有1024列,每个数据库中最多可创建200万个表
        表名最多有128个字符组成
        语法
                --创建表简单语法,identity:自增长列关键字,从一开始增长,每多一列自增一。

    1         create table 数据表名( 列名 数据类型 约束 [NULL | NO NULL][identity(1,1)])          
    2         sp_renamedb  '旧名字','新名字' --改名
    3         alter table 表名 add 列名 列类型 --添加列
    4         alter table 表名 drop column 列名 --删除列
    5         alter table 表名 alter column 列名 新类型 --修改列的类型
    6         drop  table 表名 --删除表   
    7      truncate table 表名 --是清空、重置表;delete会产生很多日志,而truncate只会产生一行日志。
    
    

        
            约束:主键约束、唯一约束、外键约束、非空约束、check约束
           
            防止同一条数据完全重复:
            一、主关键字约束:主键约束。主键:primary key
              1.能够唯一的区分每一行数据。——不许重
              2.表中的数据按照主键字排序的。——有序
              3.主键字不能为空——不为空
              4.一个表只能有一个主键,但可以设置组合主键。
            可视化操作:在表的设计界面,在相应的列上,右击-"设为主键"/"删除主键":

            二、唯一键约束。候选键。唯一键:UNIQUE
              1.不许重,可以为空。
              2.可以有多个唯一键
              3.唯一键不自动排序。
            可视化操作:在表的设计界面上,右击--“索引/键”在弹出窗口上,点击左下角“添加”,右侧属性列表,修改类型——唯一键,设置列

            三、自增长列:标识列,Identity列
             1.不能手动向里面填值。如果要写insert语句的话,则语句应当把这一列忽略
             2.自增长列主要用于整型、长整型,Decimal类型。
             3.不要随便把自增长列作为主键。
            可视化操作:在表的设计界面中,选中相应的列,在下面的属性面版——“标识规范”--选择是

            防止有些该填的没有填
            一、非空约束
              不能为NULL。
            可视化操作:在表的设计界面中“允许NULL值”中的复选框去掉。

            二、默认值。(区别NULL与“”的区别)默认值可以是函数
              如果不给列赋值的话,会使用默认值填上。
            可视化操作:在表的设计界面,选择相应的列,在下面的属性面版中——默认值

            防止乱填:
            一、Check约束。
              按照某种规则对数据进行检查。
            可视化操作:在表的设计界面中,右击相应的列,选择“CHECK约束”在弹出的对话框中,设置约束的名称和表达式。


            二、外键约束。主表,从表。
              主表是用来约束从表的。外键应当建在从表上。
              使用主表的主键来约束从表外键。
              从表中的外键列是不能随便乱填内容的,它只能填写主表主键中存在的数据。

              一旦建立起外键关系来,从表的外键不能乱填,反过主表中的主键列也不能乱删除乱改。

              级联删除的设置——整理

            可视化操作:先建好主表,在从表的设计界面上,右击-“关系”,在弹出的对话框中选择“添加”,在右边属性列表中设“表和列的规范”


    Ø Go批处理语句 
    用于同时执行多个语句 
    Ø 使用、切换数据库 
    use master
    go
    
    Ø 创建、删除数据库 
    方法1、 
    --判断是否存在该数据库,存在就删除
    if (exists (select * from sys.databases where name = 'testHome'))
        drop database testHome
    go
    --创建数据库,设置数据库文件、日志文件保存目录
    create database testHome
    on(
        name = 'testHome',
        filename = 'c:datastudents.mdf'    
    )
    log on(
        name = 'testHome_log',
        filename = 'c:data	estHome_log.ldf'
    )
    go
    
    方法2(设置文件大小)、 
    if (exists (select * from sys.databases where name = 'testHome'))
        drop database testHome
    go
    create database testHome
    --默认就属于primary主文件组,可省略
    on primary (    
        --数据文件的具体描述
        name = 'testHome_data',                --主数据文件的逻辑名
        fileName = 'c:	estHome_data.mdf',    --主数据文件的物理名
        size = 3MB,                        --主数据文件的初始大小
        maxSize = 50MB,                    --主数据文件增长的最大值
        fileGrowth = 10%                --主数据文件的增长率
    )
    --日志文件的具体描述,各参数含义同上
    log on (
        name = 'testHome_log',
        fileName = 'c:	estHome_log.ldf',
        size = 1MB,
        fileGrowth = 1MB
    )
    go
    
    方法3(设置次数据文件)、 
    if (exists (select * from sys.databases where name = 'testHome'))
        drop database testHome
    go
    create database testHome
    --默认就属于primary主文件组,可省略
    on primary (    
        --数据文件的具体描述
        name = 'testHome_data',                --主数据文件的逻辑名
        fileName = 'c:	estHome_data.mdf',    --主数据文件的物理名
        size = 3MB,                        --主数据文件的初始大小
        maxSize = 50MB,                    --主数据文件增长的最大值
        fileGrowth = 10%                --主数据文件的增长率
    ),
    --次数据文件的具体描述
    (    
        --数据文件的具体描述
        name = 'testHome2_data',            --主数据文件的逻辑名
        fileName = 'c:	estHome2_data.mdf',    --主数据文件的物理名
        size = 2MB,                        --主数据文件的初始大小
        maxSize = 50MB,                    --主数据文件增长的最大值
        fileGrowth = 10%                --主数据文件的增长率
    )
    --日志文件的具体描述,各参数含义同上
    log on (
        name = 'testHome_log',
        fileName = 'c:	estHome_log.ldf',
        size = 1MB,
        fileGrowth = 1MB
    ),
    (
        name = 'testHome2_log',
        fileName = 'c:	estHome2_log.ldf',
        size = 1MB,
        fileGrowth = 1MB
    )
    go
    Ø 基本数据类

    精确数字类型

    类型

    描述

    bigint

    bigint 数据类型用于整数值可能超过 int 数据类型支持范围的情况,范围:-2^63 到 2^63-1,存储空间8字节

    int

    整数数据类型,范围在-2^31 到 2^31-1,存储空间4字节

    smallint

    整数,范围在-2^15 到 2^15-1,存储空间2字节

    tinyint

    范围在0 到 255,存储空间1字节

    bit

    可以取值为 1、0 或 NULL 的整数数据类型,每8个bit占一个字节,16bit就2个字节,24bit就3个字节

    decimal

    带固定精度和小数位数的数值数据类型,有效值从 - 10^38 +1 到 10^38 - 1

    numeric

    同上

    money

    货币或货币值的数据类型,范围在-922,337,203,685,477.5808 到 922,337,203,685,477.5807

    smallmoney

    货币类型,-214,748.3648 到 214,748.3647

    近似数字类型

    类型

    描述

    float

    表示浮点数值数据的大致数值数据类型。浮点数据为近似值;范围-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308

    real

    real 的 SQL-92 同义词为 float(24),范围在-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38

    日期时间类型

    类型

    描述

    datetime

    表示某天的日期和时间的数据类型,范围在1753 年 1 月 1 日到 9999 年 12 月 31 日

    smalldatetime

    范围在1900 年 1 月 1 日到 2079 年 6 月 6 日

    字符串类型

    类型

    描述

    char

    固定长度或可变长度的字符数据类型,范围在范围为 1 至 8,000字节

    text

    最大长度为 2^31-1

    varchar

    固定长度或可变长度的字符数据类型,最大存储大小是 2^31-1 个字节

    Unicode字符串类型

    类型

    描述

    nchar

    字符数据类型,长度固定,在必须在 1 到 4,000 之间

    nvarchar

    可变长度 Unicode 字符数据。最大存储大小为 2^31-1 字节

    ntext

    长度可变的 Unicode 数据,最大长度为 2^30 - 1 (1,073,741,823) 个字符

    二进制字符串类型

    类型

    描述

    binary

    长度为 n 字节的固定长度二进制数据,范围从 1 到 8,000 的值。存储大小为 n 字节。

    varbinary

    可变长度二进制数据。n 可以取从 1 到 8,000 的值。最大的存储大小为 2^31-1 字节

    image

    长度可变的二进制数据,从 0 到 2^31-1 (2,147,483,647) 个字节

    Ø 判断表或其他对象及列是否存在 
    --判断某个表或对象是否存在
    if (exists (select * from sys.objects where name = 'classes'))
        print '存在';
    go
    if (exists (select * from sys.objects where object_id = object_id('student')))
        print '存在';
    go
    if (object_id('student', 'U') is not null)
        print '存在';
    go
     
    --判断该列名是否存在,如果存在就删除
    if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
        alter table student drop column idCard
    go
    if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
        alter table student drop column tel
    go
    Ø 创建、删除表 
    --判断是否存在当前table
    if (exists (select * from sys.objects where name = 'classes'))
        drop table classes
    go
    create table classes(
        id int primary key identity(1, 2),
        name varchar(22) not null,
        createDate datetime default getDate()
    )
    go
    if (exists (select * from sys.objects where object_id = object_id('student')))
        drop table student
    go
    --创建table
    create table student(
        id int identity(1, 1) not null,
        name varchar(20),
        age int,
        sex bit,
        cid int
    )
    go
    Ø 给表添加字段、修改字段、删除字段
    --添加字段
    alter table student add address varchar(50) not null;
    --修改字段
    alter table student alter column address varchar(20);
    --删除字段
    alter table student drop column number;
     
    --添加多个字段
    alter table student 
    add address varchar(22),
        tel varchar(11),
        idCard varchar(3);
     
    --判断该列名是否存在,如果存在就删除
    if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
        alter table student drop column idCard
    go
    if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
        alter table student drop column tel
    go
    Ø 添加、删除约束 
    --添加新列、约束
    alter table student 
        add number varchar(20) null constraint no_uk unique;  
    --增加主键
    alter table student  
        add constraint pk_id primary key(id);  
    --添加外键约束
    alter table student
        add constraint fk_cid foreign key (cid) references classes(id)
    go
    --添加唯一约束
    alter table student
        add constraint name_uk unique(name);
    --添加check约束
    alter table student with nocheck   
        add constraint check_age check (age > 1);
    alter table student
        add constraint ck_age check (age >= 15 and age <= 50)
    --添加默认约束
    alter table student
        add constraint sex_def default 1 for sex;
    --添加一个包含默认值可以为空的列
    alter table student 
        add createDate smalldatetime null
        constraint createDate_def default getDate() with values;
     
    ----- 多个列、约束一起创建--------
    alter table student add   
        /*添加id主键、自增*/  
        id int identity constraint id primary key,   
        /* 添加外键约束*/   
        number int null    
        constraint uNumber references classes(number),  
        /*默认约束*/  
        createDate decimal(3, 3)  
        constraint createDate default 2010-6-1  
    go 
     
    --删除约束
    alter table student  drop constraint no_uk;
    Ø 插入数据 
    insert into classes(name) values('1班');
    insert into classes values('2班', '2011-06-15');
    insert into classes(name) values('3班');
    insert into classes values('4班', default);
     
    insert into student values('zhangsan', 22, 1, 1);
    insert into student values('lisi', 25, 0, 1);
    insert into student values('wangwu', 24, 1, 3);
    insert into student values('zhaoliu', 23, 0, 3);
    insert into student values('mazi', 21, 1, 5);
    insert into student values('wangmazi', 28, 0, 5);
    insert into student values('jason', null, 0, 5);
    insert into student values(null, null, 0, 5);
     
    insert into student 
    select 'bulise' name, age, sex, cid 
    from student 
    where name = 'tony';
        
    --多条记录同时插入
    insert into student
        select 'jack', 23, 1, 5 union
        select 'tom', 24, 0, 3 union
        select 'wendy', 25, 1, 3 union
        select 'tony', 26, 0, 5;
    Ø 查询、修改、删除数据 
    --查询数据
    select * from classes;
    select * from student;
    select id, 'bulise' name, age, sex, cid from student 
    where name = 'tony';
    select *, (select max(age) from student) from student 
    where name = 'tony';
     
    --修改数据
    update student set name = 'hoho', sex = 1 where id = 1;
     
    --删除数据(from可省略)
    delete from student where id = 1;
    Ø 备份数据、表 
    --备份、复制student表到stu
    select * into stu from student;
    select * into stu1 from (select * from stu) t;
    select * from stu;
    select * from stu1;
    Ø 利用存储过程查询表信息 
    --查询student相关信息
    exec sp_help student;
    exec sp_help classes;
     
    代码内转载 ---地址

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件 664507902@qq.com联系,我将以第一时间删除相关内容。

查看全文
  • 相关阅读:
    archlinux .bash_history
    Ubuntu环境下挂载新硬盘
    软碟通 UltraISO U启替代品 Win32DiskImager 无设备 无盘符 无u盘 无优盘 解决方案 之diskpart
    delphi Integer overflow
    MSBuild Tools offline
    delphi synedit免费的拼写检查器dll
    git 自定义命令行
    lua编译
    gcc ar
    Windows Subsystem for Linux (WSL)挂载移动硬盘U盘 卸载 c d 盘
  • 原文地址:https://www.cnblogs.com/ooip/p/4535487.html
  • Copyright © 2011-2022 走看看