数据库-----数据类型、完整性约束

一、数据类型

  1、数字:

    整型:tinyint :有符号范围在(-128,127) 无符号范围在(0,255)使用unsigned    

       int :int类型后面的存储显示宽度,而不是存储宽度,位数不够用zerofill来用0填充 

          bigint :

    小数:

      float:在位数比较短的情况下不精准,

      float(m,d)    m是全长,d是小数点后个数。m最大值为255,d最大值为30

      double:在位数比较长的情况下不精准

      double(m,d)    m是全长,d是小数点后个数。m最大值为255,d最大值为30

      decimal:(如果是用小数,则用推荐使用decimal)

        精准

        内部原理是以字符串形式去存

      decimal[(m[,d])]   [unsigned]   [zerofill]  m是整数部分总个数(负号不算)d是小数点后个数。m最大值为65,d最大为30。

  2、字符串:

    char(10):简单粗暴,浪费空间,存取速度快

    # char类型:定长,简单粗暴,浪费空间,存取速度快

      字符串范围:0-255(一个中文是一个字符,是utf8编码的3个字节)

      存储char类型的值时,会往右填充空格来满足长度

      检索:

        当我们打开pad_char_to_full_length SQL模式(设置SQL模式:SET sql_mode="PAD_CHAR_TO_FULL_LENGTH"; 查询sql的默认模式:select @@sql_mode;)查出的结果就不会自动删除尾部的空格。

    varchar:精确,节省空间,存取速度慢

    # varchar类型:变长,字符长度范围:0-65535    varchar类型存储数据的真实内容,不会用空格填充,就算是空格也会被存起来

    length() :查看字节数

    char_length() :查看字符数

  3、时间类型:

    year:YYYY(1901/2155)

    date:YYYY-MM-DD(1000-01-01/9999-12-31)

    time:HH:MM:SS(-838:59:59/838:59:59)

    datetime:YYYY-MM-DD  HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)

    TIMESTAMP:YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

    # 调用mysql自带的now()函数,获取当前类型指定的时间 如下结构:

    insert into t1 values(now(),now(),now());

  4、枚举类型与集合类型

    enum   和  set

    enum('vip1','vip2','vip3','vip4'),# 在指定范围内,多选一

    set('play','music','read','study') # 在指定范围内,多选多

二、完整性约束

  1、not null   和  default

    not null  标识该字段不能为空

    default 为该字段设置默认值(默认值可以为空)   

create table tb1(
    nid int not null default 2,
    num int not null
);

  2、unique

    中文翻译:不同的,在mysql中称为单列唯一  

# 第一种创建unique
create table department(
    id int,
    name char(10) unique
);

create table department(
    id int unique,
    name char(10) unique
);

# 第二种创建unique的方式
create table department(
    id int,
    name char(10),
    unique(id),
    unique(name)
);

  3、联合唯一

# 联合唯一 只要两列记录 有一列不同 既符合联合唯一的约束
create table services(
    id int,
    ip char(15),
    port int,
    unique(id),
    unique(ip,port)
);

三、primary key

  一个表中可以:

  单列做主键

  多列做主键(复合主键)

  约束:等价于not null unique,字段的值不为空且唯一。

  存储引擎默认是(innodb):对于innodb存储引擎来说,一张表必须有一主键。

  1、单列主键

# 创建t1表,为id字段设置主键,唯一的不同的记录
create table t1(
    id int primary key,
    name char(16)
);

insert into t1 values(1,"王")(2,"建");
insert into t1 value(2,"山");   # 会报错,因为id是唯一,已经存在id=2了


# not null + unique的化学反应,相当于给id设置primary key
create table t2(
    id int not null unique,  # 相当于primary key
    name char(16)
);
单列主键的使用

  2、复合主键

# 只要id,port其中有一不相同就可以插入
create table t3(
    ip char(15),
    port int,
    primary key(ip,port)
);

四、auto_increment

  约束:约束的字段为自动增长,约束的字段必须同时被key约束

# auto_increment之前必须加primary key,确保id是唯一且不同
create table student(
    id int primary key auto_increment, # 这里往进插的时候也可以指定id
    name varchar(20),
    sex enum('male','female') default 'male',
    hobby set('','','')
);
# 对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长,
例如:delete from student where id=2,
# 应该用truncate清空表,比起delete一条一条的删除记录,truncate是直接清空表,在删除大表时用它

五、foreign key

  创建两张关联表操作:

# 创建表时先创建被关联表,再创建关联表
# 先创建被关联表
create table dep(
    id int primary key,
    name varchar(20) not null,
    descripe varchar(20) not null
);

# 再创建关联表(emp表)
create table emp(
    id int primary key,
    name varchar(20) not null,
    age int not null,
    dep_id int,
    constraint fk_dep foreign key(dep_id) references dep(id)
);
# 插入记录时,先往被关联表中插入记录,再往关联表中插入记录
# 如果我们想删除某个部门,并且这个部门的员工表的有关联的记录相继删除,我们需要做一下事情:
constraint fk_dep foreign key(dep_id) references dep(id)
on delete cascade # 同步删除
on update cascade # 同步更新
# 这是一句话,(不要用逗号隔开)

 

转载于:https://www.cnblogs.com/wjs521/p/9671712.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的 使学生加深对数据库安全性和完整性的理解。并掌握SQL Server中有关用户、角色及操作权限的管理方法。熟悉通过SQL语句对数据进行完整性控制。 二、实验内容和要求   数据库的安全性实验,在SQL Server企业管理器中,设置SQL Server的安全认证模式,实现对SQL Server的用户和角色管理,设置和管理数据操作权限。   具体内容如下:   设置SQL Server的安全认证模式(Windows或SQL Server和Windows(S)认证模式)。   登录的管理 创建一个登录用户   数据库用户的管理 登陆用户只有成为数据库用户(Database User)后才能访问数据库。每个数据库的用户信息都存放在系统表Sysusers中,通过查看Sysusers表可以看到该数据库所有用户的情况。SQL Server的数据库中都有两个默认用户:dbo(数据库拥有者用户)和(dba)。通过系统存储过程或企业管理器可以创建新的数据库用户。   角色的管理 创建一个角色,使创建的用户成为该角色的成员,并授予一定的操作权限。   在学生表中定义主键、外键约束。   在课程表的“课程名”字段上定义唯一约束。   在选课表的“成绩”字段上定义check约束,使之必须大于等于0且小于等于100.“课程号”字段只能输入数字字符。   定义规则,并绑定到读者表的“性别”字段,使之只能取“男、女”值。   在学生表中增加出生日期字段。定义缺省,并绑定到借阅表的“借阅日期”上,使之只能取当前日期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值